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

本文介绍了十六个常用的寄存器,如AX、BX、CX、DX等,以及它们在数据处理和内存操作中的作用。此外,还详细阐述了汇编指令,包括NOP、PUSH、POP、CALL、RET等,涉及数据传输、流程控制、算术逻辑运算等方面,为理解底层计算机工作原理提供基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、十六个常用的寄存器

​ 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,   SAL:算术左移
19. SHR 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、

image-20221109191942037

11、

image-20221109192001627

22、

image-20221109195718317

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

image-20221109195808277

image-20221109200110581

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值