寄存器
通用寄存器 (前八个)
32位 16位 作用
EAX(累加器) AX 作用于操作数和结果的数据
EBX(基址寄存器) BX DS段中的数据指针
ECX(计数器) CX 用于字符串和循环操作
EDX(数据寄存器) DX 输入/输出指针
EBP(扩展基址寄存器)BP SS段中的栈底指针
ESI(源变址寄存器) SI 字符串操作源指针
EDI(目的变址寄存器)DI 字符串操作的目的指针
ESP(栈指针寄存器) SP SS段中的栈顶指针
EIP(指令寄存器) IP 下一条将要执行的指令
段寄存器(6个)
32位 16位 作用
ECS CS 代码段寄存器,存放代码段的段基址
ESS SS 栈段寄存器,存放栈的段基址
EDS DS 数据段寄存器,存放数据段的段基址
EES ES 附加段寄存器,存放附加数据段的段基址
EFS FS 附加段寄存器,存放附加数据段的段基址
EGS GS 附加段寄存器,存放附加数据段的段基址
程序状态与控制寄存器(状态标志)
CF
进位标志
无符号整数发生溢出时被置为1
ZF
零标志
运算结果为0时,其值为1,否则为零
OF
溢出标志
有符号整数发生溢出时被置为1
SF
符号标志
结果为负,SF=1,结果为非负,SF=0
PF
奇偶标志
二进制1的个数为偶数个时,为1
DF
方向标志位
DF=0时,si,di递增。否则递减
汇编指令
这里有本手册,可以对着看一下这些指令的作用
链接:https://pan.baidu.com/s/12JSgbh4Ww8_QK1s36sbJ9Q
提取码:n0wf
常见的一些指令如下
数据转移指令
MOV
算术运算指令
ADD
SUB
MUL/IMUL
DIV/IDIV
逻辑运算符
AND
OR
XOR
NOT
分支跳转指令
JMP/JE/JLE
循环指令
LOOP
栈指令操作
PUSH
POP
函数相关指令
CALL
RET
中断指令
INT
比较指令
cmp
条件跳转指令
上面已经有过无条件跳转指令jmp了
下面这些是与状态标志有关的
cmp dest,str
jxx xxxx
当然这个表格的记法有一些技巧
一般条件跳转指令会与比较指令结合使用
例如cmp,test之类的
例如 je j->jump转移,e->equal相同
也就是相同转移,意思就是写两个数相同就跳转
cmp是比较指令,也就是两个数相减,但是不存储,只是改变状态标志