汇编指令和寄存器

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指令集---------------------------------------------------------------------

 

posted @ 2019-05-28 17:22  篓子  阅读(1559)  评论(0编辑  收藏  举报