
이거 아니다
C 코드가 변수, 포인터, 배열 등 사용할 때
실제 어셈블리에서는 어떻게 데이터에 접근하는지
개요
- CPU에는 16개의 64비트 범용 레지스터가 있음
- 레지스터는 포인터, 정수, 인자, 지역변수 등을 담는다
- 한 레지스터는 다양한 크기로 쪼개서 접근이 가능(%rax, %eax, %ax, %al)
- 어떤 명령어들은 8바이트 전부를 쓰고, 어떤 명령어는 일부만 씀
- 그 일부만 쓸 때 상위 바이트들이 어떻게 처리되는지가 중요

Caller, Callee saved 레지스터가 7종 더 있으나 이 9가지를 외우자
참고
레지스터 뷰 계열의 차이
- 전통 계열 (8086 때 부터 존재)
- %ax, %bx, %cx, %dx 계열
- 하위 8비트 : %al, %bl, %cl, %dl
- 특징 : 레거시 구조, OS/컴파일러 호환성 높음
- 64비트 확장 계열 (x86-64부터)
- %rsi, %rdi, %rbp, %r8~%r15
- 하위 8비트 : %sil, %dil, %bpl, %spl, %r8b ~ %r15b
- 특징 : 최신 아키텍처로, 특정 상황에만 적용
왜 알아야 하나?
”전혀 다른 뿌리를 가진 하위 레지스터”는 혼용이 불가함

📌출처 : Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 1, Section 3.4.1.1
“In 64-bit mode, an instruction cannot reference legacy high-bytes (AH, BH, CH, DH) and one of the new byte registers at the same time (e.g., the low byte of RAX, or R8B).”
- 레거시 상위 바이트 레지스터 (%ah, %bh, %ch, %dh)는 REX prefix가 포함된 명령어에서 사용 불가능함.
- 동시에 REX 계열 바이트 레지스터 (%sil, %dil, %spl, %bpl, %r8b ~ %r15b) 와 혼용 불가.
- 코드 짤 때 혼용 시도하면 assembler 에러 뜸
레지스터 뷰 계층 구조
%rax 레지스터를 통한 예제
64비트 - %rax, 32비트 - %eax, 16비트 - %ax, 8비트 - %al
- 이는 레지스터 하나가 여러 크기의 데이터를 담을 수 있음을 보임
- 어셈블리 연산은 이 하위조각 들 중 일부만 사용
- 하위조각 들 중 일부만 사용한다
→ 레지스터 전체를 쓰지 않고, 일부분만 연산 대상으로 삼을 수 있다. 동시에 서로 쓰지못한다는 뜻은 아님 - 즉 “%rax를 쓰고있으면 %al을 쓰지 못한다” 가 아닌
”%rax, %eax, %ax, %al은 물리적으로 같은 레지스터의 다른 길이 뷰임”상황 가능 여부 주의할 점 %rax 쓰는 중에 %al 접근 ✅ 가능 같은 레지스터의 하위 조각이라 값 꼬일 수 있음 %rax, %eax, %ax 동시 사용 ✅ 가능 근데 영향을 주고받으니까 주의해서 써야 함 %eax에 쓰면 상위 초기화? ✅ 맞음 %rax 상위 32비트 자동 0으로 초기화됨 %al, %ax는 상위 영향 없음 ✅ 맞음 위험할 수 있음 (기존 쓰레기값 남아 있음)
- 하위조각 들 중 일부만 사용한다
%rax = 64비트 전체
%eax = 하위 32비트
%ax = 하위 16비트
%al = 하위 8비트 (LSB)
%ah = 상위 8비트 (16비트 중 상위)
32비트 mov는 zero-extend됨
“왜 %eax에 값을 넣으면 %rax 상위 비트가 0으로 초기화될까?”
x86-64 채택 방식임(IA32)
- 즉, 32비트 레지스터에 값을 저장하면 상위 32비트가 0이 됨
- 반면, 8비트(%al)이나 16비트(%ax)는 상위 비트 안건드림
728x90
'CS:APP' 카테고리의 다른 글
| mov 인스트럭션 - CS:APP 3.4.2 (0) | 2025.04.07 |
|---|---|
| 오퍼랜드 식별자(operand specifier 어셈블리의 시작과 끝 - CS:APP 3.4.1 (0) | 2025.04.07 |
| GCC는 C를 어떻게 기계어로 짜깁기할까? - CS:APP 3.2 요약과 인사이트 (0) | 2025.04.07 |
| 암달의 법칙 (Amdahl's law) (0) | 2025.04.07 |
| 캐시와 저장장치의 상관관계 (0) | 2025.03.21 |