Intel이 16-bit 아키텍쳐에서 32-bit 아키텍쳐로 진화해왔기 때문에, 인텔은 word
를 16-bit type를 지칭하는데 사용합니다. 따라서 32-bit를 double-words
, 64-bit를 quad words
라고 합니다. 아래 표에서 C type을 활용한 x86-64 표현 방식을 확인할 수 있습니다.
int
는 double words로 저장됩니다 (32 bits). 포인터는 8 byte quad words로 저장됩니다(64-bit 기계에서). x86-64에서, long
타입은 64bits입니다. 이번 장 대부분 코드는 포인터와 long
데이터 타입을 포함하는데, 이 타입들은 quad words입니다. x86-64 인스트럭션은 쿼드 워드 뿐만 아닌 바이트, 워드, 더블워드까지 실행할 수 있습니다.
Floating point는 두가지 형태로 구분됩니다. 하나는 Single-Precision(4 bytes, float
), 다른 하나는 Double-Precision(8 bytes, double
). x86-64와 연계된 예전 마이크로프로세서들 중 floating-point 동작을 80-bit floating-point 방식으로 실행하는 프로세서들도 있습니다. 이는 C에서 long double
을 사용해 지정할 수 있습니다. 하지만 이 타입을 사용하지 않는 것을 추천하는데, 왜냐하면 다른 기계와 호환이 좋지 않고 일반적인 single, double precision을 가진 하드웨어에서 동작하지 않기 때문입니다.
위 표에서 보듯이, GCC가 생성한 대부분 어셈블리 인스트럭션은 크기를 나타내는 문자 하나를 접미사로 가집니다. 예를 들어, 데이터를 옮기는 인스트럭션은 4가지 형태로 나누어집니다. movb
, movw
, movl
, movq
. 접미사 l
은 double words로 사용됩니다. 왜냐하면 32-bit 크기가 long words
로 연상되기 때문입니다. 어셈블리 코드는 l
을 4 byte integer나 double-precision floating-point 숫자를 가리키는데 사용합니다. 헷갈릴 필요없는데, 왜냐하면, floating-point code는 전혀 다른 인스트럭션과 레지스터를 가지기 때문입니다.