나는 약간의 조사를했다. 바이트는 8 비트이고 워드는 메모리에서 주소를 지정할 수있는 가장 작은 단위입니다. 단어의 정확한 길이는 다양합니다. 내가 이해하지 못하는 것은 바이트를 갖는 요점이 무엇입니까? 왜 8 비트라고 말하지 않습니까?
나는 교수에게이 질문을했고 그는 요즘 대부분의 기계가 바이트 주소 지정이 가능하다고 말했습니다.
나는 약간의 조사를했다. 바이트는 8 비트이고 워드는 메모리에서 주소를 지정할 수있는 가장 작은 단위입니다. 단어의 정확한 길이는 다양합니다. 내가 이해하지 못하는 것은 바이트를 갖는 요점이 무엇입니까? 왜 8 비트라고 말하지 않습니까?
나는 교수에게이 질문을했고 그는 요즘 대부분의 기계가 바이트 주소 지정이 가능하다고 말했습니다.
답변:
바이트 : 오늘날 바이트는 거의 항상 8 비트입니다. 그러나 항상 그런 것은 아니며 "표준"이나이를 지시하는 어떤 것도 없습니다. 8 비트는 작업하기에 편리한 숫자이기 때문에 사실상 표준이되었습니다.
Word : 프로세서가 데이터를 처리하는 데 사용되는 기본 크기 (레지스터 크기). 오늘날 만나는 가장 일반적인 단어 크기는 8, 16, 32 및 64 비트이지만 다른 크기도 가능합니다. 예를 들어 36 비트 머신 이 몇 대 있었 거나 12 비트 머신이 있었습니다.
바이트 는 CPU에 대한 가장 작은 단위이다. 단일 비트를 설정 / 삭제하려면 먼저 메모리에서 해당 바이트를 가져 와서 비트를 엉망으로 만든 다음 바이트를 다시 메모리에 써야합니다.
단어 대조적으로이 프로세서는 한번에 (덧셈과 뺄셈 등)을 처리 할 수있는 비트의 큰 덩어리이다. 일부 프로세서는 다른 작업 (예 : 정수 대 부동 소수점 처리)에 대해 다른 단어 크기를 가질 수 있으므로이 정의는 약간 모호합니다. 단어 크기는 대부분 의 작업에서 작동하는 것입니다.
포인터 크기 가 다른 몇 가지 프로세서도 있습니다 . 예를 들어 8086은 16 비트 프로세서로 레지스터가 16 비트 너비임을 의미합니다. 그러나 포인터 (주소)는 20 비트 폭이며 특정 방식으로 두 개의 16 비트 레지스터를 결합하여 계산되었습니다.
word
는 16 비트입니다. 기본 피연산자 크기가 32 비트 (dword)이고 정수 레지스터 너비가 64 비트 (qword) 인 최신 x86 CPU에서도 마찬가지입니다. 그리고 xmm 레지스터는 128 비트 너비입니다 ( movdqa
이동 이중 쿼드). 메모리 버스는 폭이 64 비트 이상이고 (그리고 64 바이트 버스트로 전송 = 캐시 라인) 캐시 경로에 대한 실행 단위는 폭이 128 비트 이상이거나 256 비트 또는 512 비트 폭입니다. 최신 x86의 기본 머신 워드 크기가 무엇이든 16 비트는 아니지만 최신 x86은 여전히 8086 용어를 사용합니다.
내가 이해하지 못하는 것은 바이트를 갖는 요점이 무엇입니까? 왜 8 비트라고 말하지 않습니까?
바이트가 반드시 8 비트가 아니라는 기술적 인 점을 제외하고, 용어를 갖는 이유는 단순한 인간의 본성 때문입니다.
노력의 경제 (일명 게으름)- "8 비트"보다 "바이트"라고 말하는 것이 더 쉽습니다.
부족주의-사람들의 그룹은 다른 사람들과 구별하기 위해 전문 용어 / 사적인 언어를 사용하는 것을 좋아합니다.
그냥 분위기를 타. 50 년 이상 축적 된 IT 용어와 문화적 짐을 불평으로 바꾸지는 않을 것입니다.
FWIW- "하드웨어 아키텍처와 무관 한 8 비트"를 의미 할 때 사용하는 올바른 용어는 "옥텟"입니다.
바이트
이 질문에 C ++ 관점에서 대답하려고합니다.
C ++ 표준은 '바이트'를 "실행 환경의 기본 문자 집합의 모든 구성원을 보유하기에 충분히 큰 주소 지정 가능한 데이터 단위"로 정의합니다.
이것이 의미하는 바는 바이트가 구현을위한 기본 문자 집합을 수용 할 수있는 최소한의 인접 비트로 구성된다는 것입니다. 즉, 가능한 값의 수는 고유 문자 수보다 크거나 같아야합니다. 미국에서 기본 문자 세트는 일반적으로 ASCII 및 EBCDIC 세트이며 각 세트는 8 비트로 수용 할 수 있습니다. 따라서 바이트는 최소 8 비트를 가질 것입니다.
즉, 바이트는 단일 문자를 저장하는 데 필요한 메모리 양입니다.
C ++ 구현에서 '비트 수'를 확인하려면 'limits.h'파일을 확인하십시오. 아래와 같은 항목이 있어야합니다.
#define CHAR_BIT 8 /* number of bits in a char */
워드
워드는 기계 / 시스템에 의해 함께 (즉, 한 번의 시도로) 처리 될 수있는 특정 비트 수로 정의됩니다. 또는 Word가 단일 작업으로 CPU와 RAM간에 전송할 수있는 데이터 양을 정의한다고 말할 수 있습니다.
컴퓨터 기계의 하드웨어 레지스터는 워드 크기입니다. 또한 워드 크기는 가능한 가장 큰 메모리 주소를 정의합니다 (각 메모리 주소는 바이트 크기 메모리를 가리킴).
주 – C ++ 프로그램에서 메모리 주소는 단어가 아닌 메모리 바이트를 가리 킵니다.
워드는 프로세서의 레지스터 크기입니다. 즉, add, mul 등과 같은 프로세서 명령이 단어 크기의 입력에 있습니다.
그러나 대부분의 최신 아키텍처에는 8 비트 청크로 주소를 지정할 수있는 메모리가 있으므로 "바이트"라는 단어를 사용하는 것이 편리합니다.
이 맥락에서 단어는 기계가 메모리로 작업 할 때 사용하는 단위입니다. 예를 들어, 32 비트 머신에서 단어는 32 비트 길이이고 64 비트에서는 64 비트 길이입니다. 단어 크기는 주소 공간을 결정합니다.
프로그래밍 (C / C ++)에서 단어는 일반적으로 int_ptr
포인터와 길이가 같은 유형 으로 표시되며 이러한 세부 정보를 추상화합니다.
Win32 API와 같은 일부 API는 WORD
(16 비트) 및 DWORD
(32 비트) 와 같은 유형이 있기 때문에 혼동을 줄 수 있습니다 . 그 이유는 API가 처음에는 16 비트 머신을 대상으로하고 그 다음 32 비트 머신으로 포팅 된 다음 64 비트 머신으로 포팅 되었기 때문입니다. 포인터를 저장하려면 INT_PTR
. 여기 와 여기에 자세한 내용이 있습니다 .
모든 답변은 높은 수준의 언어와 주로 C / C ++를 가정 한 것 같습니다.
그러나 질문은 "어셈블리"태그가 붙어 있으며 내가 아는 모든 어셈블러 (8 비트, 16 비트, 32 비트 및 64 비트 CPU)에서 정의가 훨씬 더 명확합니다.
byte = 8 bits
word = 2 bytes
dword = 4 bytes = 2Words (dword means "double word")
qword = 8 bytes = 2Dwords = 4Words ("quadruple word")
int<X>_t
와 uint<X>_t
특정 비트 크기의 변수 / 매개 변수를 원하는 경우에 사용한다 유형 (플러스 이상).
단어의 정확한 길이는 다양합니다. 내가 이해하지 못하는 것은 바이트를 갖는 요점이 무엇입니까? 왜 8 비트라고 말하지 않습니까?
단어의 길이는 다양하지만 모든 최신 컴퓨터와 내가 익숙한 모든 이전 아키텍처에서도 단어 크기는 여전히 바이트 크기의 배수입니다. 따라서 가변 워드 크기와 관련하여 "8 비트"보다 "바이트"를 사용하는 데 특별한 단점이 없습니다.
그 외에도 "8 비트"에 대해 바이트 (또는 옥텟 1 ) 를 사용하는 몇 가지 이유가 있습니다 .
1 이 답변에 대해 바이트를 8 비트로 간주하지만 이것은 보편적으로 사실이 아닙니다. 구형 컴퓨터에서는 바이트 크기가 다를 수 있습니다 (예 : 6 비트 . 옥텟 은 컴퓨터에 관계없이 항상 8 비트를 의미합니다 . 따라서이 용어는 네트워크 프로토콜을 정의하는 데 자주 사용됩니다.) 현대 사용에서 바이트는 8 비트와 동의어로 압도적으로 사용됩니다.
데이터 시트 및 컴파일러에있는 용어가 무엇이든 '바이트'는 8 비트입니다. 특히 'Byte'라는 단어가 "By Eight"라는 표현에서 나왔기 때문에 질문자와 일반성을 더 모호한 예외와 혼동하지 마십시오. 저는 반도체 / 전자 산업에서 30 년 넘게 일해 왔으며 8 비트 이상을 표현하는 데 사용되는 '바이트'로 한 번도 알려지지 않았습니다.
컴퓨터 저장 장치의 기본 단위는 비트입니다. 비트는 0과 1의 두 값 중 하나를 포함 할 수 있습니다. 컴퓨터의 다른 모든 저장소는 비트 모음을 기반으로합니다. 충분한 비트가 주어지면 컴퓨터가 숫자, 문자, 이미지, 영화, 사운드, 문서 및 프로그램 등을 표현할 수있는 것은 놀랍습니다. 바이트는 8 비트이며 대부분의 컴퓨터에서 가장 작은 편리한 저장소 청크입니다. 예를 들어, 대부분의 컴퓨터에는 비트 이동 명령이 없지만 바이트 이동 명령이 있습니다. 덜 일반적인 용어는 주어진 컴퓨터 아키텍처의 기본 데이터 단위 인 단어입니다. 단어는 하나 이상의 바이트로 구성됩니다. 예를 들어 64 비트 레지스터와 64 비트 메모리 주소가있는 컴퓨터에는 일반적으로 64 비트 (8 바이트) 단어가 있습니다. 컴퓨터는 한 번에 한 바이트가 아닌 기본 단어 크기로 많은 작업을 실행합니다. 컴퓨터 저장, 대부분의 컴퓨터 처리량과 함께 일반적으로 바이트 및 바이트 모음 단위로 측정 및 조작됩니다. 1 킬로바이트 (KB)는 메가 바이트 당 1,024 바이트 또는 MB는 1,024 기가 바이트 당 2 바이트 (GB)는 1,024 테라 바이트 당 3 바이트 (TB)는 1,024 페타 바이트 당 4 바이트 (PB)는 1,024 5 바이트 컴퓨터 제조업체는 종종이 숫자를 반올림하고 메가 바이트는 100 만 바이트이고 기가 바이트는 10 억 바이트라고 말합니다. 네트워킹 측정은이 일반 규칙의 예외입니다. 비트 단위로 제공됩니다 (네트워크가 한 번에 조금씩 데이터를 이동하기 때문). 024 5 바이트 컴퓨터 제조업체는 종종이 숫자를 반올림하여 메가 바이트가 1 백만 바이트이고 1 기가 바이트가 10 억 바이트라고 말합니다. 네트워킹 측정은이 일반 규칙의 예외입니다. 비트 단위로 제공됩니다 (네트워크가 한 번에 조금씩 데이터를 이동하기 때문). 024 5 바이트 컴퓨터 제조업체는 종종이 숫자를 반올림하여 메가 바이트가 1 백만 바이트이고 1 기가 바이트가 10 억 바이트라고 말합니다. 네트워킹 측정은이 일반 규칙의 예외입니다. 비트 단위로 제공됩니다 (네트워크가 한 번에 조금씩 데이터를 이동하기 때문).
기계가 바이트 주소 지정이 가능하고 단어가 메모리에서 주소 지정 될 수있는 가장 작은 단위라면 단어는 바이트가 될 것입니다!
word
분명히 32 비트를 의미하지만 lb
8 비트를로드 하는 (로드 바이트) 명령어가 있습니다.
8 비트 그룹을 바이트 라고합니다. (특정 아키텍처의 경우는 예외 :)
단어 프로세서의 명령어 집합 및 / 또는 하드웨어 유닛으로서 처리되는 비트의 고정 크기의 그룹이다. 즉, 범용 레지스터 (일반적으로 1 바이트 이상)의 크기는 단어입니다.
는 C에서, 단어가되어 가장 자주 > = 정수라고int
octet
는 용어 byte와 관련된 모호성 때문에 8 비트 시퀀스를 명시 적으로 나타내도록 정의되었습니다 . 의 소리와 같은 I 그러나 byte
더 나은 :)
byte
더 나은 소리를 좋아합니다": 나는 당신이 이것에 혼자가 아니며 몇몇 틈새 시스템에 대해 안전하다고 강력히 의심합니다. 바이트의 "혼란"은 아마도 8 비트가 아닌 크기 일 수 있습니다. 요즘 더 이상 관련이 없습니다.
BYTE 및 WORD의 용어는 참조되는 프로세서의 크기와 관련이 있습니다. 가장 일반적인 프로세서는 8 비트, 16 비트, 32 비트 또는 64 비트였습니다. 프로세서의 WORD 길이입니다. 숫자 길이에 관계없이 실제로 WORD의 절반은 BYTE입니다. 이를 위해 BYTE의 절반이 NIBBLE입니다.
사실, 일반적으로 단어는 16 비트와 동의어가되었으며, 이는 바이트가 8 비트와 비슷합니다. 32 비트 CPU의 "워드 크기"가 32 비트이기 때문에 약간 혼란 스러울 수 있지만, 데이터 단어에 대해 이야기 할 때 하나는 16 비트를 의미합니다. 32 비트 워드 크기를 가진 마이크로 컨트롤러는 명령어를 "longs"(단어 / 더블 워드 혼동을 피하기 위해 시도하고 방지하기 위해)라고 부릅니다.
ldrh
16 비트를로드하고이를 32 비트 레지스터로 0 확장합니다. 또는 ldrsh
16 비트를로드하고 부호 확장합니다.