Ch3.3 Data Formats

Park Choong Ho·2021년 4월 26일
1

3.3 Data Formats

Intel이 16-bit 아키텍쳐에서 32-bit 아키텍쳐로 진화해왔기 때문에, 인텔은 word를 16-bit type를 지칭하는데 사용합니다. 따라서 32-bit를 double-words, 64-bit를 quad words라고 합니다. 아래 표에서 C type을 활용한 x86-64 표현 방식을 확인할 수 있습니다.

Size of C Data Types

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는 전혀 다른 인스트럭션과 레지스터를 가지기 때문입니다.

profile
백엔드 개발자 디디라고합니다.

0개의 댓글