跳至主要内容

14.常见汇编指令

MOV指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
MOV r/m8,  r8
MOV r/m16, r16
MOV r/m32, r32
MOV r/m64, r64

MOV r8, r/m8
MOV r16, r/m16
MOV r32, r/m32
MOV r64, r/m64

MOV r/m8, imm8
MOV r/m16, imm16
MOV r/m32, imm32
MOV r/m64, imm32 ; 64 位模式下会符号扩展

MOV r8, imm8
MOV r16, imm16
MOV r32, imm32
MOV r64, imm64
  • r8:8 位寄存器,例如 AL
  • r16:16 位寄存器,例如 AX
  • r32:32 位寄存器,例如 EAX
  • r64:64 位寄存器,例如 RAX
  • r/m8:8 位寄存器或内存
  • imm8:8 位立即数

ADD指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ADD r/m8,  r8
ADD r/m16, r16
ADD r/m32, r32
ADD r/m64, r64

ADD r8, r/m8
ADD r16, r/m16
ADD r32, r/m32
ADD r64, r/m64

ADD r/m8, imm8
ADD r/m16, imm16
ADD r/m32, imm32
ADD r/m64, imm32

SUB指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SUB r/m8,  r8
SUB r/m16, r16
SUB r/m32, r32
SUB r/m64, r64

SUB r8, r/m8
SUB r16, r/m16
SUB r32, r/m32
SUB r64, r/m64

SUB r/m8, imm8
SUB r/m16, imm16
SUB r/m32, imm32
SUB r/m64, imm32

AND指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
AND r/m8,  r8
AND r/m16, r16
AND r/m32, r32
AND r/m64, r64

AND r8, r/m8
AND r16, r/m16
AND r32, r/m32
AND r64, r/m64

AND r/m8, imm8
AND r/m16, imm16
AND r/m32, imm32
AND r/m64, imm32

OR指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
OR r/m8,  r8
OR r/m16, r16
OR r/m32, r32
OR r/m64, r64

OR r8, r/m8
OR r16, r/m16
OR r32, r/m32
OR r64, r/m64

OR r/m8, imm8
OR r/m16, imm16
OR r/m32, imm32
OR r/m64, imm32

XOR指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
XOR r/m8,  r8
XOR r/m16, r16
XOR r/m32, r32
XOR r/m64, r64

XOR r8, r/m8
XOR r16, r/m16
XOR r32, r/m32
XOR r64, r/m64

XOR r/m8, imm8
XOR r/m16, imm16
XOR r/m32, imm32
XOR r/m64, imm32

NOT指令

1
2
3
4
NOT r/m8
NOT r/m16
NOT r/m32
NOT r/m64

MOVS指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
MOVS m8,  m8
MOVS m16, m16
MOVS m32, m32
MOVS m64, m64

MOVSB ; 传送 1 字节
MOVSW ; 传送 2 字节
MOVSD ; 传送 4 字节
MOVSQ ; 传送 8 字节

movsb ; [rdi] = [rsi]
movsw ; [rdi] = [rsi]
movsd ; [rdi] = [rsi]
movsq ; [rdi] = [rsi]
  • DF标志寄存器表示运行后rdi和rsi自加还是自减

STOS指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
STOS m8
STOS m16
STOS m32
STOS m64

STOSB ; AL -> [RDI]
STOSW ; AX -> [RDI]
STOSD ; EAX -> [RDI]
STOSQ ; RAX -> [RDI]

stosb ; byte ptr [rdi] = AL
stosw ; word ptr [rdi] = AX
stosd ; dword ptr [rdi] = EAX
stosq ; qword ptr [rdi] = RAX

REP指令

  • 按照RCX中的值为执行次数
1
2
3
4
5
6
7
8
9
REP MOVSB
REP MOVSW
REP MOVSD
REP MOVSQ

REP STOSB
REP STOSW
REP STOSD
REP STOSQ

关于本文

由 GuQing 撰写,采用 CC BY-NC 4.0 许可协议。