汇编指令和寄存器
8个32位通用寄存器按顺序分别是:
EAX 通常用来保存函数的返回值
ECX 用作计数器
EDX
EBX
ESP 栈顶指针寄存器 保存栈顶地址
EBP 栈底指针寄存器 保存栈底地址
ESI 源变址寄存器 MOVS 或 STOS等指令
EDI 目的变址寄存器
8个16位通用寄存器:
AX CX DX BX SP BP SI DI
8个8位通用寄存器:
AH AL CH AL DH DL BH BL
EIP 寄存器 保存下次程序要执行的基址
标志寄存器位置和作用
EFL 对应的16进制转换为2进制就是每个标志寄存器对应的值
CF 0位 无符号进位标志
PF 2位 最后8位的1的奇偶标志
AF 4位 辅助进位,借位标志
ZF 6位 零标志
SF 7位 符号标志
OF 11位 有符号溢出标志 当0-7F中的正数相加等于负数时有溢出,当80-FF中的负数相加等于正数时有溢出,正数加负数永远不会溢出。
DF 10位 方向标志 当时候 movs 或 stos时可以使用DF控制内存的方向 0为+ 1为-
mov 移动指令
add 加
sub 减
or 或
and 与
xor 异或
movs 移动ESI指向的内存地址的数据到EDI指向的内存地址中 简写方法 movsb movsw movsd
movsx 有符号数类型转换 一般用于数据宽度从小到大扩展使用,如果数据宽度从大到小会从最低位开始截取数据
movzx 无符号数类型转换 一般用于数据宽度从小到大扩展使用,如果数据宽度从大到小会从最低位开始截取数据
stos MAX中的数据移动到EDI指向的内存地址中 简写方法 stosb stosw stosd
ADC 借位加如果CF标志的值为1 会多加1
SBB 借位减如果CF标志的值为1 会多减1
XCHG 交换指令
SAL 算术左移最高位进CF位最低位补0
SAR 算术右移最低位进CF并且最低位补充到最高位
SHL 逻辑左移最高位进CF位最低位补0
SHR 逻辑右移最低位进CF最高位补0
ROL 循环左移最高位进CF并且最高位补充到最低位
ROR 循环右移最低位进CF并且最低位补充到最高位
RCL 带进位的循环左移最高位进CF,原始的CF位补充到最低位
RCR 带进位的循环右移最低位进CF,原始的CF位补充到最高位
PUSH 入栈指令 把数据入栈并且栈顶地址会向上移动4个字节 就是-4
POP 出栈指令 把栈顶的数据取出存入寄存器,栈顶地址会向下移动4个字节 就是+4
CMP 单纯的比较指令不改变值,通常用来修改ZF标志寄存器
TEST 单纯的与指令不改变值,通常用来修改ZF变值寄存器
JMP 修改EIP寄存器的值
CALL 修改EIP寄存器的值,并把下一行要运行的基址PUSH到栈顶位置
RET 返回到CALL指令PUSH到栈顶的基址,并把栈顶的值POP出来
REP 按ECX中存放的数量循环执行指令
-----------------------------------------------------------JCC指令集---------------------------------------------------------------------