通用寄存器

BamB00 2021-04-12 00:04:28
Categories: Tags:

|通用寄存器|

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

  1. 向堆栈中压入值
  2. 修改栈顶指针ESP的值

PUSH r32
PUSH r16
PUSH m16
PUSH m32
PUSH imm8/imm16/imm32

pop

  1. 从堆栈中取值
  2. 修改栈顶指针ESP的值

PUSH r32
PUSH r16
PUSH m16
PUSH m32

EIP

EIP是用来指向下一个调用\执行的的地址

标志寄存器

EFL 他是32位的

EFL

他有八个位数每一个都可以拆分