[assembly] 단어와 바이트의 차이점은 무엇입니까?

나는 약간의 조사를했다. 바이트는 8 비트이고 워드는 메모리에서 주소를 지정할 수있는 가장 작은 단위입니다. 단어의 정확한 길이는 다양합니다. 내가 이해하지 못하는 것은 바이트를 갖는 요점이 무엇입니까? 왜 8 비트라고 말하지 않습니까?

나는 교수에게이 질문을했고 그는 요즘 대부분의 기계가 바이트 주소 지정이 가능하다고 말했습니다.



답변

바이트 : 오늘날 바이트는 거의 항상 8 비트입니다. 그러나 항상 그런 것은 아니며 “표준”이나이를 지시하는 어떤 것도 없습니다. 8 비트는 작업하기에 편리한 숫자이기 때문에 사실상 표준이되었습니다.

Word : 프로세서가 데이터를 처리하는 데 사용되는 기본 크기 (레지스터 크기). 오늘날 만나는 가장 일반적인 단어 크기는 8, 16, 32 및 64 비트이지만 다른 크기도 가능합니다. 예를 들어 36 비트 머신 이 몇 대 있었 거나 12 비트 머신이 있었습니다.

바이트 는 CPU에 대한 가장 작은 단위이다. 단일 비트를 설정 / 삭제하려면 먼저 메모리에서 해당 바이트를 가져 와서 비트를 엉망으로 만든 다음 바이트를 다시 메모리에 써야합니다.

단어 대조적으로이 프로세서는 한번에 (덧셈과 뺄셈 등)을 처리 할 수있는 비트의 큰 덩어리이다. 일부 프로세서는 다른 작업 (예 : 정수 대 부동 소수점 처리)에 대해 다른 단어 크기를 가질 수 있으므로이 정의는 약간 모호합니다. 단어 크기는 대부분 의 작업에서 작동하는 것입니다.

포인터 크기 가 다른 몇 가지 프로세서도 있습니다 . 예를 들어 8086은 16 비트 프로세서로 레지스터가 16 비트 너비임을 의미합니다. 그러나 포인터 (주소)는 20 비트 폭이며 특정 방식으로 두 개의 16 비트 레지스터를 결합하여 계산되었습니다.


답변

내가 이해하지 못하는 것은 바이트를 갖는 요점이 무엇입니까? 왜 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 ++ 프로그램에서 메모리 주소는 단어가 아닌 메모리 바이트를 가리 킵니다.


답변

왜 8 비트라고 말하지 않습니까?

모든 컴퓨터에 8 비트 바이트가있는 것은 아니기 때문입니다. 이 태그 때문에 C, 조회 CHAR_BITlimits.h.


답변

워드는 프로세서의 레지스터 크기입니다. 즉, 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")