AT&T汇编心得之间接寻址和LEA指令

本文深入探讨了80x86汇编语言中的寻址方式,特别是如何使用esp寄存器进行间接寻址,并通过实例解释了pushl-0x4(%ecx)指令的运作过程。此外,文章还详细阐述了LEA指令的功能,包括如何将esp寄存器的内容加上4后直接传递给ecx寄存器,从而简化了地址传递的过程。

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

原文地址(本人blog):http://blog.sina.com.cn/s/blog_4d1bbec70100du0f.html

寻址方式:

0x4(%esp)的操作是把寄存器esp中的值取出,然后加上4,得到的值作为地址,间接寻址得到需要的数据
例如:
pushl -0x4(%ecx)
该指令的含义是取出寄存器ecx的值,减去4,将得到的值作为地址,在内存找到该地址对应的值,将其压入栈中。

这是执行后的结果:

ecx            0xbff01450
esp            0xbff0143c    0xbff0143c
ebp            0xbff01498    0xbff01498

(gdb) x/x $esp
0xbff0143c:    0x0804840a    
(gdb) x/x 0xbff0144c
0xbff0144c:    0x0804840a

其中,内存0xbff0144c即为%ecx-4后得到的值

指令LEA的作用和80x86汇编有些类似,即地址传递,下面举例说明:
LEA 0x4(%esp), %ecx
该指令的作用是,取出esp寄存器里的值,加上4,不再继续寻址,而是将得到值直接传递给ecx;如果是其他指令,则还需进行间接寻址,再传值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值