AMD64/명령어 목록

덤프버전 :


파일:나무위키+상위문서.png   상위 문서: AMD64

명령어 집합
CISC
AMD64x86 · M68K · 68xx · Z80 · 8080 · MOS 65xx · VAX
RISC
AArch64 ARM · RISC-V · MIPS · DEC Alpha · POWER PowerPC · CELL-BE
LoongArch · OpenRISC · PA-RISC · SPARC · Blackfin · SuperH · AVR32 AVR
VLIW
EPIC
E2K · IA-64 · Crusoe


x86 · AMD64 확장 명령어 집합
인텔 주도 확장 명령어
범용
APX
SIMD
MMX · SSE SSE2 · SSE3 · SSSE3 · SSE4.1 · SSE4.2 · AVX AVX2 · AVX-512 · AVX10 · AMX
AVX-512: F · CD · DQ · BW · VL · IFMA · VBMI · VBMI2 · VNNI · VAES · GFNI · BITALGVPCLMULQDQ · VPOPCNTDQ · VP2INTERSECT · BF16
(Xeon Phi): ER · PF · 4FMAPS · 4VNNIW
AVX[1]: AVX-VNNI · AVX-IFMA
AVX10: AVX10.1 · AVX10.2
비트 조작
BMI1 · BMI2 · ADX
보안 및 암호
AES-NI · CLMUL · RDRAND · RDSEED · SHA · MPX · SGX · TME · MKTME
가상화 및 기타
VT-x(VMX) · SMX · TSX
AMD 주도 확장 명령어
SIMD 및 비트 연산
3DNow! · F16C · XOP · FMA FMA4 · FMA3
비트 조작
ABM
보안 및 암호
SME
가상화 및 기타
AMD-V


1. 개요
1.1. 약어 설명
1.2. 표기법
1.2.1. 인텔 문법과 AT&T 문법
1.2.2. 16진수 및 2진수
1.3. 명령어 인코딩
1.3.1. 레거시 접두사
1.3.2. REX 접두사
1.3.3. REX2 접두사 (APX 확장)
1.3.4. AMD64 Opcode
1.3.4.1. 2-byte 이상 opcode
1.3.5. Mod R/M
1.3.6. SIB
1.4. VEX 인코딩 (AVX 확장)
1.4.1. VEX 접두사
1.4.2. 2-byte VEX
1.4.3. 3-byte VEX
1.5. EVEX 인코딩 (AVX-512 확장)
1.5.1. EVEX
1.6. 확장 EVEX 인코딩 (APX 확장)
1.7. 레지스터
1.7.1. 정수 레지스터
1.7.2. 부동소수점/벡터 레지스터
1.7.3. 특수 레지스터
2. AMD64 명령어 목록
2.1. AMD64 범용 명령어
2.1.1. 사칙연산 명령어
2.1.1.1. ADD
2.1.1.2. ADC
2.1.1.3. SUB
2.1.1.4. SBB
2.1.1.5. NEG
2.1.1.6. CMP
2.1.1.7. MUL
2.1.1.8. IMUL
2.1.1.9. DIV
2.1.1.10. IDIV
2.1.2. 논리 연산 명령어
2.1.2.1. AND
2.1.2.3. XOR
2.1.2.4. NOT
2.1.2.5. TEST
2.1.3. Shift/Rotate 명령어
2.1.3.1. ROL
2.1.3.2. ROR
2.1.3.3. RCL
2.1.3.4. RCR
2.1.3.5. SHL / SAL
2.1.3.6. SHR
2.1.3.7. SAR
2.1.4. 비트 및 바이트 조작 명령어
2.1.5. 메모리 관련 명령어
2.1.6. 제어 명령어
2.1.7. 플래그 조작 명령어
2.1.8. I/O 명령어
2.1.9. 문자열 조작 명령어
2.1.9.1. Fast-String Operation
2.1.10. 플래그 제어 및 세그멘트 레지스터 명령어
2.1.11. XSAVE 명령어
2.1.12. 기타 명령어
2.2. x87 FPU 명령어
2.3. MMX 명령어
2.4. SSE 명령어
2.5. SSE2 명령어
3.1. SSE3 명령어
3.2. SSE4.1 명령어
3.3. SSE4.2 명령어
3.4. SSE4.1 명령어
4.1. AVX 명령어
4.2. FMA 명령어
4.3. AVX2 명령어
4.4. AVX-512 명령어
4.5. AMX 명령어
5. APX 확장
6. 연산 관련 확장 명령어
6.1. ABM/BMI1 명령어
6.1.1. ABM 명령어
6.1.1.1. POPCNT
6.1.1.2. LZCNT
6.1.2. BMI1 명령어
6.2. BMI2 명령어
6.3. AES-NI 명령어
6.4. RDRAND 명령어
6.5. SHA 명령어
7. 가상화 명령어
7.1. VT-x 명령어
7.2. AMD-V 명령어
8. 기타 확장 명령어
8.1. TSX 명령어
8.2. MPX 명령어
8.3. SGX 명령어
8.4. TME 명령어



1. 개요[편집]


AMD64 아키텍처의 명령어 목록. 64-bit 모드 기준으로 기술한다.


1.1. 약어 설명[편집]


* r : 레지스터
* m : 메모리
* imm : 상수 (ib: 8-bit, iw: 16-bit, id: 32-bit)


1.2. 표기법[편집]



1.2.1. 인텔 문법과 AT&T 문법[편집]


문법
Intel
AT&T
파라미터 순서
instr dest, src

mov eax, 42

destination을 좌측, source를 우측에 표기한다.
instr src, dest

movl $42, %eax

source를 좌측, destination을 우측에 표기한다.
파라미터 표기
add eax, 1

어셈블러가 자동으로 타입을 파악한다.
addl $1, %eax

immediate는
$
, register는
%
기호를 앞에 붙여 표기한다.
피연산자 크기
mov eax, 1234

레지스터명으로부터 자동으로 결정된다.
movl $1234, %eax

크기를 나타내는 접미사를 사용하여 명시한다.
메모리 주소 표기
lea esi, [ebx+eax*8+4]

lea 4(%ebx,%eax,8), %esi

x86 어셈블리는 크게 인텔 문법과 AT&T 문법으로 나뉜다. 인텔 문법은 Windows 환경에서 널리 쓰이며(예: Visual C++), AT&T 문법은 Unix 환경에서 널리 쓰인다(예: GCC). 여기서는 인텔 문법을 기준으로 설명한다.


1.2.2. 16진수 및 2진수[편집]


* 16진수 숫자는 뒤에
h
를 붙여서 표기한다.
* 2진수 숫자는 뒤에
b
를 붙여서 표기한다.


1.3. 명령어 인코딩[편집]


AMD64 ISA는 다음과 같은 가변길이 인코딩을 사용한다.
(Legacy Prefixes) (REX Prefix) [Opcode] (Mod R/M) (SIB) (Displacement) (Immediate)

  • (Legacy Prefixes): 4가지 그룹으로 구분되며 각 그룹에 속하는 접두사(각 1 바이트)가 선택적으로 붙을 수 있다.
  • (REX Prefix): AMD64에 추가된 레지스터에 접근하거나 64-bit operand를 지정할 때 사용한다.
  • [Opcode]: 1-3 바이트 길이로 수행하고자 하는 명령어의 종류를 지정한다. 이때 일부 SSE 명령어의 경우 prefix를 사용하는 것과 동일하게 인코딩되어 있으나(예:
    CVTDQ2PD
    :
    F3 0F E6h
    ) 이는 opcode의 일부로, prefix로 취급되지 않는다.
  • (Mod R/M): 피연산자의 형태(레지스터/메모리) 및 메모리 주소 형식을 지정한다. 명령어에 따라 선택적으로 요구한다.
  • (SIB):
    [base + index * scale (+ disp.)]
    형식으로 계산되는 메모리의 base 레지스터, index 레지스터 및 scale을 지정한다. 명령어에 따라 선택적으로 요구한다.
  • (Displacement): 1/2/4 바이트 크기의 displacement로 명령어에 따라 선택적으로 요구한다.
  • (Immediate): 1/2/4 바이트 크기의 immediate(명령어에 인코딩되는 숫자) 값으로 명령어에 따라 선택적으로 요구한다.


1.3.1. 레거시 접두사[편집]


  • Group 1: Lock and repeat prefixes
    • 메모리 접근의 독점 또는 명령어의 반복 수행을 지정하는 명령어이다.
    • F0h
      (0xF0): LOCK 접두사. 명령어가 수행되는 동안 해당 명령어가 접근하는 주소에 대한 lock을 수행한다.
    • F2h
      (0xF2),
      F3h
      (0xF3): 반복 접두사. 문자열을 다루는 명령어 앞에 붙어 해당 명령어가 특정 조건에 따라 반복적으로 수행되도록 하는 접두사이다. 이에 해당하지 않는 명령어에 사용하는 것은 정의되지 않은 동작이나,
      repz ret
      과 같이 사용되는 경우가 존재한다.

  • Group 2: Segment override prefixes
    • 메모리 세그멘트를 지정하는 접두사이다.
    • 2Eh
      (0x2E): CS segment override
    • 36h
      (0x36): SS segment override
    • 3Eh
      (0x3E): DS segment override
    • 26h
      (0x26): ES segment override
    • 64h
      (0x64): FS segment override
    • 65h
      (0x65): GS segment override

  • Group 3: Operand-size override prefix
    • 66h
      (0x66): 명령어의 피연산자의 크기가 기본값과 다름을 나타내는 접두사이다.

  • Group 4: Address-size override prefix
    • 67h
      (0x67): 명령어가 사용하는 주소의 크기가 기본값과 다름을 나타내는 접두사이다.


1.3.2. REX 접두사[편집]


REX Prefix | Opcode |  ModR/M  |   SIB
 0100W00B   (......)  *****bbb
 0100WR0B   (......)  **rrrbbb            (SIB를 사용하지 않는 경우)
 0100WRXB   (......)  **rrr100   ssxxxbbb (SIB를 사용하는 경우)

W, R, X, B 4개의 필드로 구성되는 접두사(
40h..4Fh
)로, 64-bit operand를 사용하거나 AMD64에 추가된 레지스터에 접근하는 데 사용된다.
* W 필드: 1인 경우 64-bit operand를 지정한다.[1]
* R 필드: ModR/M r 필드(
rrr
)를 확장한다. (
Rrrr
)
* X 필드: SIB index 필드(
xxx
)를 확장한다. (
Xxxx
)
* B 필드: ModR/M r/m 필드 또는 SIB base 필드(
bbb
)를 확장한다. (
Bbbb
)
[1] 16-bit 접두사
66h
가 붙는 경우 해당 접두사는 무시된다.


1.3.3. REX2 접두사 (APX 확장)[편집]




1.3.4. AMD64 Opcode[편집]


64-bit 모드를 기준으로 서술한다.
[각주]

1.3.4.1. 2-byte 이상 opcode[편집]



1.3.5. Mod R/M[편집]


필드
mod
reg/opcode
r/m
비트 수
2-bit
3-bit
3-bit
Mod R/M 바이트는 3개의 필드로 구성되어 있다.
  • mod
    • operand의 모드를 지정한다. r/m 필드와 결합되어 사용된다.
    • 32-bit/64-bit addressing에서 r/m 필드의 값이
      100
      (esp/r12)인 경우 SIB를 사용한다.
    • 00
      : (m) (레지스터/SIB) 또는 disp16/disp32 값에 해당하는 주소를 지정한다.[2]
    • 01
      : (m) (레지스터/SIB) 값에 disp8을 더한 주소를 지정한다.
    • 10
      : (m) (레지스터/SIB) 값에 disp16/disp32를 더한 주소를 지정한다.
    • 11
      : (r) 레지스터의 값을 operand로 사용한다.
  • reg/opcode
    • 레지스터 번호 또는 일부 명령어의 경우 opcode 정보를 담고 있다.
  • r/m
    • 레지스터 번호를 나타낸다.
[2] r/m 필드의 값이
101
(ebp/r13)인 경우 호환 모드에서는 disp 값을 그대로, 64-bit 모드에서는 rip+disp32 값을 사용한다. 단, 64비트 모드에서도 SIB를 사용하여 disp32 값을 그대로 사용할 수 있다.


1.3.6. SIB[편집]


필드
scale
index
base
비트 수
2-bit
3-bit
3-bit
32-bit addressing에서 선택적으로 사용되는 바이트이다.
[base + index * scale]
에 해당하는 주소를 지정하는 데 사용된다.
  • scale
    • 00
      : 1 (byte)
    • 01
      : 2 (bytes)
    • 10
      : 4 (bytes)
    • 11
      : 8 (bytes)
  • Index
    • 해당하는 레지스터의 값을 사용한다. 단,
      100
      (esp)인 경우 0으로 계산한다. (esp를 index에 사용할 수 없다.) REX.X prefix가 사용된 경우 이 값을 포함하여 계산되므로 r12 레지스터는 사용이 가능하다.
  • Base
    • 해당하는 레지스터의 값을 사용한다. 단,
      101
      (ebp/r13)인 경우 mod에 따라 다음의 값을 사용한다.
    • 00
      :
      [scaled index] + disp32
    • 01
      :
      [scaled index] + disp8 + [EBP/R13]
    • 10
      :
      [scaled index] + disp32 + [EBP/R13]
[각주]

1.4. VEX 인코딩 (AVX 확장)[편집]


AVX 확장에서 아래와 같은 VEX 인코딩이 도입되었다.
(Prefixes) [VEX Prefix] [Opcode] [Mod R/M] (SIB) (Displacement) (Immediate)

  • (Prefixes)
  • [VEX Prefix]: AVX에서 사용되는 2-3 바이트 길이의 접두사이다.
  • [Opcode]: 1 바이트 길이로 수행하고자 하는 명령어의 종류를 지정한다.
  • [Mod R/M]: 피연산자의 형태(레지스터/메모리) 및 메모리 주소 형식을 지정한다.
  • (SIB):
    [base + index * scale (+ disp.)]
    형식으로 계산되는 메모리의 base 레지스터, index 레지스터 및 scale을 지정한다. 명령어에 따라 선택적으로 요구한다.
  • (Displacement): 1/2/4 바이트 크기의 displacement로 명령어에 따라 선택적으로 요구한다.
  • (Immediate): 1 바이트 크기의 immediate(명령어에 인코딩되는 숫자) 값으로 명령어에 따라 선택적으로 요구한다.
[각주]

1.4.1. VEX 접두사[편집]


VEX 접두사의 각 필드는 다음과 같은 정보를 포함한다:
  • R: REX.R의 보수(complement)와 동일하다.
  • X: REX.X의 보수(complement)와 동일하다.
  • B: REX.B의 보수(complement)와 동일하다.
  • W: opcode에 따라 선택적으로 사용되거나 무시된다.
  • m-mmmm:
    • 00000: 예약됨
    • 00001:
      0F
      로 시작하는 opcode를 암시한다.
    • 00010:
      0F 38
      로 시작하는 opcode를 암시한다.
    • 00011:
      0F 3A
      로 시작하는 opcode를 암시한다.
    • 00100-11111: 예약됨
  • vvvv:
1의 보수(1's complement) 형태로 레지스터를 명시하며 사용되지 않는 경우 그 값은
1111
이다.
  • L: 벡터 길이
    • 0: 스칼라 또는 128비트 벡터
    • 1: 256비트 벡터
  • pp: SIMD 접두사와 동치인 opcode 확장
    • 00: None
    • 01:
      66
    • 10:
      F3
    • 11:
      F2
[각주]

1.4.2. 2-byte VEX[편집]


Byte 0 |  Byte 1
  C5h    RvvvvLpp

64-bit 모드에서는 사용되지 않는 레거시 명령어인
AAD
(
C5h
)를 접두사로 사용한다.
[각주]

1.4.3. 3-byte VEX[편집]


Byte 0 |  Byte 1  |  Byte 2
  C4h    RXBmmmmm   WvvvvLpp

64-bit 모드에서는 사용되지 않는 레거시 명령어인
AAA
(
C4h
)를 접두사로 사용한다.
[각주]

1.5. EVEX 인코딩 (AVX-512 확장)[편집]


AVX-512 확장에서 아래와 같은 EVEX 인코딩이 도입되었다.
(Prefixes) [EVEX Prefix] [Opcode] [Mod R/M] (SIB) (Displacement) (Immediate)

  • (Prefixes):
  • [EVEX Prefix]: AVX-512에서 사용되는 4 바이트 길이의 접두사이다.
  • [Opcode]: 1 바이트 길이로 수행하고자 하는 명령어의 종류를 지정한다.
  • [Mod R/M]: 피연산자의 형태(레지스터/메모리) 및 메모리 주소 형식을 지정한다.
  • (SIB):
    [base + index * scale (+ disp.)]
    형식으로 계산되는 메모리의 base 레지스터, index 레지스터 및 scale을 지정한다. 명령어에 따라 선택적으로 요구한다.
  • (Displacement): 1/2/4 바이트 크기의 displacement로 명령어에 따라 선택적으로 요구한다.
  • (Immediate): 1 바이트 크기의 immediate(명령어에 인코딩되는 숫자) 값으로 명령어에 따라 선택적으로 요구한다.
[각주]

1.5.1. EVEX[편집]


62h |    P0     |    P1    |     P2     |
 62h   RXBR'00mm   Wvvvv1pp   zL'LbV'aaa

32-bit 모드에서만 사용되는
BOUND
(
62h
) 명령어를 접두사로 사용한다.

EVEX 접두사의 각 필드는 다음과 같은 정보를 포함한다:
  • mm: VEX.mmmmm의 하위 2비트와 동일하다.
  • pp: VEX.pp와 동일하다.
  • RXB: VEX 접두사와 마찬가지로 비트가 반전된 형태로 인코딩된다.
  • R': EVEX.R의 확장. 비트가 반전된 형태로 인코딩된다.
  • X: SIB/VSIB가 없는 경우 EVEX.B와 결합되어 사용된다.
  • vvvv: VEX.vvvv와 동일
  • V': EVEX.vvvv와 결합하여 사용한다. 비트가 반전된 형태로 인코딩된다.
  • aaa: opmask register specifier
  • W: Osize promotion
  • z: zeroing/merging
  • b: broadcast/RC/SAE context
  • L'L: Vector length
[각주]

1.6. 확장 EVEX 인코딩 (APX 확장)[편집]


APX 확장에서 추가된 GPR 또는 피연산자(New Data Destination)를 활용하기 위해 AVX-512의 EVEX 인코딩을 도입하였다.
  • M2-M0 필드: opcode가 속한 map을 가리키는 필드이다.
  • pp 필드: EVEX와 동일
  • W 필드: EVEX와 동일
  • ND 필드(b): NDD 사용 여부를 나타내는 필드이다.
  • NF 필드(a): 플래그 레지스터를 업데이트하는 기존 명령어의 플래그 업데이트 여부를 정하는 필드이다.
  • R4,R3 필드(R',R): ModR/M r 필드(
    rrr
    )를 확장한다. (
    RRrrr
    )
  • X4,X3 필드(X',X): SIB index 필드(
    xxx
    )를 확장한다. (
    XXxxx
    )
  • B4,B3 필드(B',B): ModR/M r/m 필드 또는 SIB base 필드(
    bbb
    )를 확장한다. (
    BBbbb
    )
  • V4-V0 필드(V', vvvv): NDD가 사용되는 경우 해당하는 레지스터를 지정하는 데 쓰이는 필드이다.
[각주]

1.7. 레지스터[편집]


  • 범용 레지스터:
    • A: Accumulator, C: Count, D: Data, B: Base
    • SP: Stack Pointer, BP: Base Pointer
    • SI: Source Index, DI: Destination Index
  • 특수 레지스터:
    • 세그멘트 레지스터(CS/DS/SS/ES/FS/GS)
    • 플래그 레지스터(EFLAGS)
    • 명령어 포인터(EIP)
  • 접두사/접미사:
    • -L/H: 8비트 (L: 하위 8비트, H: 상위 8비트)
    • -B: 8비트
    • -X: 16비트/32비트/64비트 (A, B, C, D)
    • -W: 16비트
    • -D: 32비트
    • E-: 32비트
    • R-: 64비트


1.7.1. 정수 레지스터[편집]


번호 / 종류
0
1
2
3
4
5
6
7
8-15
16-31
8비트 정수
AL
CL
DL
BL
AH, SPL
CH, BPL
DH, SIL
BH, DIL
R8B-R15B[REX.R]
R16B-R31B[APX]
16비트 정수
AX
CX
DX
BX
SP
BP
SI
DI
R8W-R15W[REX.R]
R16W-R31W[APX]
32비트 정수
EAX
ECX
EDX
EBX
ESP
EBP
ESI
EDI
R8D-R15D[REX.R]
R16D-R31D[APX]
64비트 정수[REX.W]
RAX
RCX
RDX
RBX
RSP
RBP
RSI
RDI
R8D-R15D[REX.R]
R16D-R31D[APX]
[REX.R] A B C D REX.R/REX.X/REX.B 접두사 필요[APX] A B C D APX 확장. REX2 또는 EVEX 접두사를 사용해 인코딩됨[REX.W] 명령어에 따라 REX.W 접두사 필요


1.7.2. 부동소수점/벡터 레지스터[편집]


번호 / 종류
0
1
2
3
4
5
6
7
8-15
16-31
80비트 x87
ST0
ST1
ST2
ST3
ST4
ST5
ST6
ST7
-
-
64비트 MMX[3]
MM0
MM1
MM2
MM3
MM4
MM5
MM6
MM7
128비트 SSE
XMM0
XMM1
XMM2
XMM3
XMM4
XMM5
XMM6
XMM7
XMM8-XMM15
XMM16-XMM31[EVEX]
256비트 AVX[VEX]
YMM0
YMM1
YMM2
YMM3
YMM4
YMM5
YMM6
YMM7
YMM8-YMM15
YMM16-YMM31[EVEX]
512비트 AVX[EVEX]
ZMM0
ZMM1
ZMM2
ZMM3
ZMM4
ZMM5
ZMM6
ZMM7
ZMM8-ZMM15
ZMM16-ZMM31
[3] x87과 동시에 사용할 수 없다.[EVEX] A B C EVEX 인코딩으로만 접근 가능. AVX-512 또는 AVX10 필요[VEX] VEX 또는 EVEX 인코딩으로만 접근 가능. AVX 필요


1.7.3. 특수 레지스터[편집]


  • 플래그 레지스터 (RFLAGS)
    • 상태 플래그
    • CF(0): Carry Flag
    • PF(2): Parity Flag
    • AF(4): Auxiliary Carry Flag
    • ZF(6): Zero Flag
    • SF(7): Sign Flag
    • 제어 플래그
    • DF(10): Direction Flag
    • 시스템 플래그
    • TF(8): Trap Flag
    • IF(9): Interrupt Enable Flag
    • OF(11): Overflow Flag
    • IOPL(12-13): I/O Privilege Level
    • NT(14): Nested Task
    • RF(16): Resume Flag
    • VM(17): Virtual-8086 Mode
    • AC(18): Alignment Check
    • VIF(19): Virtual Interrupt Flag
    • VIP(20): Virtual Interrupt Pending
    • ID(21): ID Flag
  • 제어 레지스터 (CR0-CR8)
  • 디버그 레지스터 (DR0-DR7)
[각주]

2. AMD64 명령어 목록[편집]



2.1. AMD64 범용 명령어 [편집]



2.1.1. 사칙연산 명령어[편집]



2.1.1.1. ADD[편집]

Opcode
확장
Mnemonic
형식
비고
00 /r

x86
ADD r/m8,r8

r/m += r

01 /r

x86
ADD r/m16,r16

66h
접두사 필요
ADD r/m32,r32


REX.W 01 /r

AMD64
ADD r/m64,r64


02 /r

x86
ADD r8,r/m8

r += r/m

03 /r

x86
ADD r16,r/m16

66h
접두사 필요
ADD r32,r/m32


REX.W 03 /r

AMD64
ADD r64,r/m64


04 ib

x86
ADD al,imm8

a += imm

05 iw

x86
ADD ax,imm16

66h
접두사 필요
05 id

ADD eax,imm32


REX.W 05 id

AMD64
ADD rax,imm32


80 /0 ib

x86
ADD r/m8,imm8

r/m += imm

81 /0 iw

x86
ADD r/m16,imm16

66h
접두사 필요
81 /0 id

ADD r/m32,imm32


REX.W 81 /0 id

AMD64
ADD r/m64,imm32


83 /0 ib

x86
ADD r/m16,imm8

r/m += imm
66h
접두사 필요
ADD r/m32,imm8


REX.W 83 /0 ib

AMD64
ADD r/m64,imm8


[각주]

2.1.1.1.1. INC[편집]

Opcode
확장
Mnemonic
형식
비고
FE /0

x86
INC r/m8

r/m += 1

FF /0

x86
INC r/m16

66h
접두사 필요
INC r/m32


REX.W FF /0

AMD64
INC r/m64


[각주]

2.1.1.2. ADC[편집]

Opcode
확장
Mnemonic
형식
비고
10 /r

x86
ADC r/m8,r8

r/m += r + CF

11 /r

x86
ADC r/m16,r16

66h
접두사 필요
ADC r/m32,r32


REX.W 11 /r

AMD64
ADC r/m64,r64


12 /r

x86
ADC r8,r/m8

r += r/m + CF

13 /r

x86
ADC r16,r/m16

66h
접두사 필요
ADC r32,r/m32


REX.W 13 /r

AMD64
ADC r64,r/m64


14 ib

x86
ADC al,imm8

a += imm + CF

15 iw

x86
ADC ax,imm16

66h
접두사 필요
15 id

ADC eax,imm32


REX.W 15 id

AMD64
ADC rax,imm32


80 /2 ib

x86
ADC r/m8,imm8

r/m += imm + CF

81 /2 iw

x86
ADC r/m16,imm16

66h
접두사 필요
81 /2 id

ADC r/m32,imm32


REX.W 81 /2 id

AMD64
ADC r/m64,imm32


83 /2 ib

x86
ADC r/m16,imm8

r/m += imm + CF
66h
접두사 필요
ADC r/m32,imm8


REX.W 83 /2 ib

AMD64
ADC r/m64,imm8


[각주]

2.1.1.3. SUB[편집]

Opcode
확장
Mnemonic
형식
비고
28 /r

x86
SUB r/m8,r8

r/m -= r

29 /r

x86
SUB r/m16,r16

66h
접두사 필요
SUB r/m32,r32


REX.W 29 /r

AMD64
SUB r/m64,r64


2A /r

x86
SUB r8,r/m8

r -= r/m

2B /r

x86
SUB r16,r/m16

66h
접두사 필요
SUB r32,r/m32


REX.W 2B /r

AMD64
SUB r64,r/m64


2C ib

x86
SUB al,imm8

a -= imm

2D iw

x86
SUB ax,imm16

66h
접두사 필요
2D id

SUB eax,imm32


REX.W 2D id

AMD64
SUB rax,imm32


80 /5 ib

x86
SUB r/m8,imm8

r/m -= imm

81 /5 iw

x86
SUB r/m16,imm16

66h
접두사 필요
81 /5 id

SUB r/m32,imm32


REX.W 81 /5 id

AMD64
SUB r/m64,imm32


83 /5 ib

x86
SUB r/m16,imm8

r/m -= imm
66h
접두사 필요
SUB r/m32,imm8


REX.W 83 /5 ib

AMD64
SUB r/m64,imm8


[각주]

2.1.1.3.1. DEC[편집]

Opcode
확장
Mnemonic
형식
비고
FE /1

x86
DEC r/m8

r/m += 1

FF /1

x86
DEC r/m16

66h
접두사 필요
DEC r/m32


REX.W FF /1

AMD64
DEC r/m64


[각주]

2.1.1.4. SBB[편집]

Opcode
확장
Mnemonic
형식
비고
18 /r

x86
SBB r/m8,r8

r/m -= r + CF

19 /r

x86
SBB r/m16,r16

66h
접두사 필요
SBB r/m32,r32


REX.W 19 /r

AMD64
SBB r/m64,r64


1A /r

x86
SBB r8,r/m8

r -= r/m + CF

1B /r

x86
SBB r16,r/m16

66h
접두사 필요
SBB r32,r/m32


REX.W 1B /r

AMD64
SBB r64,r/m64


1C ib

x86
SBB al,imm8

a -= imm + CF

1D iw

x86
SBB ax,imm16

66h
접두사 필요
1D id

SBB eax,imm32


REX.W 1D id

AMD64
SBB rax,imm32


80 /3 ib

x86
SBB r/m8,imm8

r/m -= imm + CF

81 /3 iw

x86
SBB r/m16,imm16

66h
접두사 필요
81 /3 id

SBB r/m32,imm32


REX.W 81 /3 id

AMD64
SBB r/m64,imm32


83 /3 ib

x86
SBB r/m16,imm8

r/m -= imm + CF
66h
접두사 필요
SBB r/m32,imm8


REX.W 83 /3 ib

AMD64
SBB r/m64,imm8


[각주]

2.1.1.5. NEG[편집]


2.1.1.6. CMP[편집]

Opcode
확장
Mnemonic
형식
비고
38 /r

x86
CMP r/m8,r8

temp = r/m - r

39 /r

x86
CMP r/m16,r16

66h
접두사 필요
CMP r/m32,r32


REX.W 39 /r

AMD64
CMP r/m64,r64


3A /r

x86
CMP r8,r/m8

temp = r - r/m

3B /r

x86
CMP r16,r/m16

66h
접두사 필요
CMP r32,r/m32


REX.W 3B /r

AMD64
CMP r64,r/m64


3C ib

x86
CMP al,imm8

temp = a - imm

3D iw

x86
CMP ax,imm16

66h
접두사 필요
3D id

CMP eax,imm32


REX.W 3D id

AMD64
CMP rax,imm32


80 /7 ib

x86
CMP r/m8,imm8

temp = r/m - imm

81 /7 iw

x86
CMP r/m16,imm16

66h
접두사 필요
81 /7 id

CMP r/m32,imm32


REX.W 81 /7 id

AMD64
CMP r/m64,imm32


83 /7 ib

x86
CMP r/m16,imm8

temp = r/m - imm
66h
접두사 필요
CMP r/m32,imm8


REX.W 83 /7 ib

AMD64
CMP r/m64,imm8


[각주]

2.1.1.7. MUL[편집]


2.1.1.8. IMUL[편집]


2.1.1.9. DIV[편집]


2.1.1.10. IDIV[편집]


2.1.2. 논리 연산 명령어[편집]



2.1.2.1. AND[편집]


2.1.2.2. OR[편집]


2.1.2.3. XOR[편집]


2.1.2.4. NOT[편집]


2.1.2.5. TEST[편집]


2.1.3. Shift/Rotate 명령어[편집]



2.1.3.1. ROL[편집]


2.1.3.2. ROR[편집]


2.1.3.3. RCL[편집]


2.1.3.4. RCR[편집]


2.1.3.5. SHL / SAL[편집]


2.1.3.6. SHR[편집]


2.1.3.7. SAR[편집]


2.1.4. 비트 및 바이트 조작 명령어[편집]



2.1.5. 메모리 관련 명령어[편집]



2.1.6. 제어 명령어[편집]



2.1.7. 플래그 조작 명령어[편집]



2.1.8. I/O 명령어[편집]



2.1.9. 문자열 조작 명령어[편집]



2.1.9.1. Fast-String Operation[편집]


2.1.10. 플래그 제어 및 세그멘트 레지스터 명령어[편집]



2.1.11. XSAVE 명령어[편집]



2.1.12. 기타 명령어[편집]




2.2. x87 FPU 명령어[편집]



2.3. MMX 명령어[편집]



2.4. SSE 명령어[편집]



2.5. SSE2 명령어[편집]




3. SSE 확장[편집]



3.1. SSE3 명령어[편집]



3.2. SSE4.1 명령어[편집]



3.3. SSE4.2 명령어[편집]



3.4. SSE4.1 명령어[편집]




4. AVX 확장[편집]



4.1. AVX 명령어[편집]



4.2. FMA 명령어[편집]



4.3. AVX2 명령어[편집]



4.4. AVX-512 명령어[편집]



4.5. AMX 명령어[편집]




5. APX 확장[편집]




6. 연산 관련 확장 명령어[편집]



6.1. ABM/BMI1 명령어[편집]



6.1.1. ABM 명령어[편집]



6.1.1.1. POPCNT[편집]

Opcode
확장
Mnemonic
형식
비고
F3 0F B8 /r

ABM[a]/SSE4.2[i]
POPCNT r16,r/m16


66h
접두사 필요
POPCNT r32,r/m32



F3 REX.W 0F B8 /r

POPCNT r64,r/m64



[a] AMD[i] Intel


6.1.1.2. LZCNT[편집]

Opcode
확장
Mnemonic
형식
비고
F3 0F BD /r

ABM[a]/BMI1[i]
LZCNT r16,r/m16


66h
접두사 필요
LZCNT r32,r/m32



F3 REX.W 0F BD /r

LZCNT r64,r/m64



[a] AMD[i] Intel


6.1.2. BMI1 명령어[편집]



6.2. BMI2 명령어[편집]



6.3. AES-NI 명령어[편집]



6.4. RDRAND 명령어[편집]



6.5. SHA 명령어[편집]




7. 가상화 명령어[편집]



7.1. VT-x 명령어[편집]



7.2. AMD-V 명령어[편집]




8. 기타 확장 명령어[편집]



8.1. TSX 명령어[편집]



8.2. MPX 명령어[편집]



8.3. SGX 명령어[편집]



8.4. TME 명령어[편집]


파일:크리에이티브 커먼즈 라이선스__CC.png 이 문서의 내용 중 전체 또는 일부는 2023-10-20 02:30:11에 나무위키 AMD64/명령어 목록 문서에서 가져왔습니다.