인텔 아키텍처 매뉴얼
둘러보기로 이동
검색으로 이동
이 문서는 현재 작성중입니다. |
인텔 아키텍처 매뉴얼은 인텔(Intel)이 공개한 Intel 64와 IA-32 아키텍처 CPU를 위한 소프트웨어 개발 매뉴얼이다. 매뉴얼 본체는 이곳에서 다운로드 할 수 있다.
이 문서는 인텔 공식 매뉴얼을 간단히 해설한 것이다.
명령 형식
Instruction Prefixes | Opcode | ModR/M | SIB | Displacement | Immediate |
---|---|---|---|---|---|
1byte(옵션) | 1~3byte | 1byte(필요한 경우) | 1byte(필요한 경우) | 1,2,4byte(필요한 경우) | 1,2,4byte(필요한 경우) |
Instruction Prefixes
접두어는 4가지 그룹으로 나누어지며, 명령어는 각 그룹에서 최대 1개의 접두어만 효과가 있다. 각 그룹의 접두어는 순서에 상관없다.
- 그룹 1
- F0H : LOCK 접두어.
- F2H : REPNE/REPNZ 접두어. 문자열과 I/O관련 명령에만 사용가능하다.
- F3H : REP/REPE/REPZ 접두어. 문자열과 I/O관련 명령에만 사용가능하다. (F3h는 특정 명령에서 필수 접두어로 쓰이기도 한다.)
- 그룹 2
- 세그먼트 덮어쓰기 접두어 : 메모리 읽기, 쓰기시에 참조하는 세그먼트 레지스터를 기본설정 외의 레지스터로 변경한다.
- 2EH : CS segment override (use with any branch instruction is reserved)
- 36H : SS segment override prefix (use with any branch instruction is reserved)
- 3EH : DS segment override prefix (use with any branch instruction is reserved)
- 26H : ES segment override prefix (use with any branch instruction is reserved)
- 64H : FS segment override prefix (use withany branch instruction is reserved)
- 65H : GS segment override prefix (use with any branch instruction is reserved)
- Branch hints:
- 2EH : Branch not taken (used only with Jccinstructions)
- 3EH : Branch taken (used only with Jccinstructions)
- 세그먼트 덮어쓰기 접두어 : 메모리 읽기, 쓰기시에 참조하는 세그먼트 레지스터를 기본설정 외의 레지스터로 변경한다.
- 그룹 3
- 66H : 오퍼랜드[1] 크기 덮어쓰기 접두어. 16비트 데이터형을 32비트 데이터형으로 확장한다. (예: mov ax, 0x33 -> mov eax, 0x33)
- 그룹 4
- 67H : 주소 크기 덮어쓰기 접두어. ModR/M 해석시 32비트 모드로 해석한다. 기본값은 16비트 모드. CPU설정에 따라 이 접두어가 없어도 기본적으로 32비트로 해석하는 경우도 있다.
Opcode
명령의 종류를 나타내는 중요 부분. 1~3byte의 크기를 가지며 때때로 ModR/M에 추가로 3비트의 정보를 포함할 수 있다.
ModR/M
오퍼랜드의 조합을 나타내는 1byte의 파라메터.
명령 분석 가이드
주석
- ↑ 오퍼랜드란 명령어(opcode)가 필요로 하는 파라메터이다.
x86 관련 문서
- x86 아키텍쳐 CPU : 8086, 486
- x86 레지스터
- x86 어셈블리 언어
- 인텔 아키텍처 매뉴얼