x86架构常见寄存器及指令详解

一、十六个常用的寄存器

​ AX:累加add寄存器,存储函数返回值

​ BX:基址base寄存器,数据段基址

​ CX:计数count寄存器,字符串和循环操作数的寄存器

​ DX:数据data寄存器,I/O指针寄存器

​ CS、DS、ES、FS、GS、SS:段选择寄存器,去除低三位

​ ESI:字符串操作的源地址指针寄存器

​ EDI:字符串操作的目的地址指针寄存器

​ EBP、ESP

​ EFLAGS:标志位寄存器

​ EIP:程序计数器。存放程序下一个执行的指令地址

二、汇编指令

1.NOP :交换指令,操作数为90,什么也不干
2.PUSH x:将x压入栈,esp先减再压数据
3.POP x: 将栈顶数据弹出到x中,esp递增
4.CALL x:将call指令下一条指令压入栈中,改变eip的值为x
5.RET: 将栈顶数据弹出到eip 若为RET X 表示esp再增加x字节
6.MOV  目的源 :将源的值传给目的 !!不能同时是内存操作数
7.LEA x1,x2:将x2的地址载入到x1
8.ADD x1,x2:x1=x1+x2,指令的计算结果将影响eflags寄存器
9.SUB x1,x2:x1=x1-x2,同add,不能同时是内存操作数
10. jmp x: 将eip的值改为x。 jmp -2意味着jmp指令的无限循环
11. jcc x:当条件满足时跳转到x
12. cmp x1, x2: 用于比较两个操作数的大小
13. test x1, x2:通过计算两个操作数的逻辑与位运算实现比较操作,根据结果设置eflags
14. AND x1,x2: x1 = x1&x2
15. OR x1,x2: x1 = x1|x2
16. XOR x1,x2: x1 = x1^x2 常用于清零,效率高xor eax eax
17. not x1: x1 = ~x1 
18. SHL x1,x2:x1=x1<>x2 逻辑右移,左边补0,  SAR:算术右移,左边补符号
20. IMUL/MUL: imul实现有符号数的乘法运算,mul是无符号乘法
	imul r/m32 eax=eax*r/m*32
	imul reg,r/m reg=reg*r/m32
	imul reg,r/m32,immediate reg=r/m32*immediate
21. IDIV/DIV: div用于实现无符号数的除法运算
	idiv ecx: eax / ecx 商放在eax,余数放在edx 
	div ax, r/m8 ; ax 除以 r/m8, al是商,ah是余数
	div eax,r/m32; eax除以r/m32,eax是商,edx是余数
	若被除数是32位数,在指令执行前edx被置为0
22. REP STOS; rep是前缀,表示重复执行某项操作
23. REP MOVS:重复执行movs操作
24. LEAVE: 用于子函数推出时清理栈的操作,ret和leave选择取决于编译器。  等价于mov  esp, ebp; pop ebp

10、

x86架构常见寄存器及指令详解_第1张图片

11、

x86架构常见寄存器及指令详解_第2张图片

22、

x86架构常见寄存器及指令详解_第3张图片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QTW0rDty-1681098950742)(./…/AppData/Roaming/Typora/typora-user-images/image-20221109195726769.png)]

x86架构常见寄存器及指令详解_第4张图片

x86架构常见寄存器及指令详解_第5张图片

你可能感兴趣的:(架构)