Fundamental of CS/: : CSAPP

[CSAPP] Ch 3. 프로그램의 기계수준 표현 : (3) 데이터의 형식

Jay.P Morgan 2024. 3. 19. 23:22

  3.3  데이터의 형식

 

  인텔 프로세서들이 처음에는 16비트 구조를 사용했기 때문에워드라는 단어를 16비트 데이터 타입을 말할  사용한다. 32비트는 '더블워드' , 64비트는 '쿼드워드라고 부른다.

※ x86-64에서 C 자료형의 길이

 

     • 포인터 : 64bit 머신에선 예상대로 8byte 쿼드워드로 저장됨.

     • 부동소수점 : x86계열에서 특별히 10byte 부동소수점 형식 연산을 구현하였으나, 호환성과 성능을 고려하여 이용하지 않는 것이 좋다.

 

  여기서 주목할 점은포인터 char *  쿼드워드로 표현된다는 것 → 모든 포인터가  q 표현된다.

  이 데이터의 형식이  인스트럭션의 접미사로 붙여쓰이게 된다.

  예를 들면 movb (바이트이동), movw (워드이동), movl (더블워드 이동), movq (쿼드워드 이동이런 방식이다.

  부동소수점에서 접미어 'l'을 4byte 정수 뿐만 아니라 8byte 더블 정밀도 부동소수점 수를 나타내기 위해서도 사용함.

 

 

 

  ※ 어셈블리 코드를 C 프로그램과 함께 사용하기

  C 프로그램으로 접근할 수 없는 하드웨어 기능들이 존재한다.

    (ex)  Parity Check (하위 8bit에 1의 개수가 짝수이면 parity flag bit를 1로 셋팅, 그렇지 않으면 0으로 셋팅) 등

 

  어셈블리 코드 인스트럭션을 C 프로그램 내에 연결하는 2가지 방법

     • 전체 함수를 별도의 어셈블리 파일로 작성하고, 어셈블러와 링커가 이를 C로 작성한 코드와 함께 연결

     • GCC의 인라인(inline) 어셈블리 기능을 사용하는 것

       - 어셈블리 코드의 간단한 영역을 C 프로그램에서 asm 디렉티브를 사용하여 연결