ModR/M
ModR/MModR/M 바이트는 x86 명령 집합에 대한 명령 인코딩의 중요한 부분입니다.
묘사
x86의 opcode는 일반적으로 1바이트이지만 2바이트 명령과 접두사가 존재합니다.ModR/M은 opcode 뒤에 오는 바이트이며 명령이 [1]: §2.1 실행되는 방법에 대한 추가 정보를 추가합니다.형식은 다음과 같습니다.
조금 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
사용. | 모드 | 레지스트 | R/M |
여기서 REG는 레지스터를 지정하고 R/M은 MOD 값에 따라 레지스터를 포함하거나 주소 지정 모드를 지정할 수 있습니다.
일부 지침에서는 ModR/M 바이트의 REG 부분을 사용할 수 없습니다.이러한 명령의 대부분은 이 필드를 사용하여 "복수화"됩니다.이 필드에서는 단일 opcode가 여러 명령을 참조할 수 있으며 REG 필드가 명령을 결정합니다.opcode lists에서는 opcode 뒤에 슬래시(슬래시)를 붙여 지정합니다.0 ~ 7 [1]: §3.1.1.1 의 숫자입니다/.
64비트 변경
ModR/M 바이트는 AMD의 64비트 확장을 통해 원래 명령 집합에 추가된 변경의 핵심입니다.롱 모드에서는 상위 4비트가 다음과 같은 임의의 opcode0100
(10 진수 4)는 새로운 프리픽스인 REX [2]: §1.2.7 프리픽스로 간주됩니다.프리픽스 바이트의 하위4비트는 다양한 용도로 사용됩니다.여기에는 그 후의 ModR/M 바이트의 REG 및 R/M 필드의 추가 비트도 포함됩니다.그 중에서도 이들 값을 3비트에서4비트로 확장하면 사용 가능한 프로세서레지스터의 수가 8개에서 [2]: §1.4 16개로 2배가 됩니다.
SIB 바이트
SIB 바이트는 x86 어셈블리의 옵션 포스트 opcode 바이트로, 복잡한 어드레싱에 사용됩니다.
SIB 바이트의 형식은 ModR/M 바이트와 비슷하며 다음 형식을 취합니다.(scale * index) + base + displacement
여기서 Scale은 1, 2, 4, 또는 8입니다. BASE 및 INDEX는 [3]각각 레지스터를 인코딩합니다.변위는 [4]최종 주소에 적용되는 SIB 바이트 이후에 부호화된 상수 오프셋입니다.
REX 프리픽스를 사용하면 옵션으로 SIB 바이트가 SSE [1]레지스터를 사용할 수 있습니다.
조금 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
사용. | 규모. | 색인 | 기초 |
레퍼런스
- ^ a b c Intel Coropration (2016-09-01). "Intel® 64 and IA-32 Architectures Software Developer's Manual, Volume 2A". Retrieved 2021-09-13.
- ^ a b Advanced Micro Devices (2021-03-01). "AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions" (PDF). Retrieved 2021-09-13.
- ^ Chris, Hartman. "Encoding instructions". University of Alaska Fairbanks. Retrieved 28 July 2022.
- ^ "80386 Programmer's Reference Manual -- Section 17.2". www.scs.stanford.edu. Retrieved 28 July 2022.