|通用寄存器|
32位 | 16位 | 8位 |
---|---|---|
EAX | AX | AL |
ECX | CX | CL |
EDX | DX | DL |
EBX | BX | BL |
ESP | SP | AH |
EBP | BP | CH |
ESI | SI | DH |
EDI | DI | BH |
汇编常用指令
mov
移动
用法
mov r/m8,r8 ;r通用寄存器
mov r/m16,r16 ;m代表内存
mov r/m32,r32 ;imm代表立即数
mov r8,r/m8 ;r8代表8位通用寄存器
mov r16,r/m16 ;m8代表8位内存
mov r32,r/m32 ;imm8代表8位立即数
mov r8,imm8
mov r16,imm16
mov r32,imm32
ADD
相加
用法
add r/m8,r8 ;r通用寄存器
add r/m16,r16 ;m代表内存
add r/m32,r32 ;imm代表立即数
add r8,r/m8 ;r8代表8位通用寄存器
add r16,r/m16 ;m8代表8位内存
add r32,r/m32 ;imm8代表8位立即数
add r/m8,imm8
add r/m16,imm16
add r/m32,imm32
add r/m16,imm8
add r/m32,imm8
sub
减法
用法
sub r/m8,r8 ;r通用寄存器
sub r/m16,r16 ;m代表内存
sub r/m32,r32 ;imm代表立即数
sub r8,r/m8 ;r8代表8位通用寄存器
sub r16,r/m16 ;m8代表8位内存
sub r32,r/m32 ;imm8代表8位立即数
sub r/m8,imm8
sub r/m16,imm16
sub r/m32,imm32
sub r/m16,imm8
sub r/m32,imm8
and
与运算
用法
and r/m8,r8 ;r通用寄存器
and r/m16,r16 ;m代表内存
and r/m32,r32 ;imm代表立即数
and r8,r/m8 ;r8代表8位通用寄存器
and r16,r/m16 ;m8代表8位内存
and r32,r/m32 ;imm8代表8位立即数
and r/m8,imm8
and r/m16,imm16
and r/m32,imm32
and r/m16,imm8
and r/m32,imm8
xor
异或运算
用法
xor r/m8,r8 ;r通用寄存器
xor r/m16,r16 ;m代表内存
xor r/m32,r32 ;imm代表立即数
xor r8,r/m8 ;r8代表8位通用寄存器
xor r16,r/m16 ;m8代表8位内存
xor r32,r/m32 ;imm8代表8位立即数
xor r/m8,imm8
xor r/m16,imm16
xor r/m32,imm32
xor r/m16,imm8
xor r/m32,imm8
not
非指令
not r/m8
not r/m16
not r/m32
movs
从内存到内存移动数据
movs指令一定 与EDI 和ESI配合 且一定是从ESI移动到EDI
movs移动byte,word,dword 可以简写成MOVSB,MOVSW,MOVSD
stos
将al,ax,eax 的值存储到EDI指定的内存单元中
STOS BYTE PTR ES:[EDI] 简写STOSB
STOS WORD PTR ES:[EDI] 简写STOSW
STOS DWORD PTR ES:[EDI] 简写STOSD
rep
重复执行
例
mov ECX,10 ;ECX存放执行次数
rep movsd ;重复执行movsd10次相当于 Loop
push
- 向堆栈中压入值
- 修改栈顶指针ESP的值
例
PUSH r32
PUSH r16
PUSH m16
PUSH m32
PUSH imm8/imm16/imm32
pop
- 从堆栈中取值
- 修改栈顶指针ESP的值
例
PUSH r32
PUSH r16
PUSH m16
PUSH m32
EIP
EIP是用来指向下一个调用\执行的的地址
标志寄存器
EFL 他是32位的
他有八个位数每一个都可以拆分