首页
社区
课程
招聘
[旧帖] [讨论]汇编中括号得问题,看几个教程说得都不一样 0.00雪花
发表于: 2007-7-17 14:33 5920

[旧帖] [讨论]汇编中括号得问题,看几个教程说得都不一样 0.00雪花

2007-7-17 14:33
5920
初学汇编  想请教个问题  看了看雪论坛得破解基础教程有一个关于中括号得文章,对于LEA 中中括号得解释有两种,第一种是  lea eax,[edx-02] 把edx-02的有效值(一个地址值)给eax
第二种是
lea eax,[edx-02]
就是把 edx 中的值减去2再送入eax, 而不是把由[edx-02]指明的内存地址上的值放到eax. 其结果是[eax]和[ebx-02]都表示同一个地址.

我都是引用了原文, 我想知道 到底那一个是正确得啊
谢谢解答

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 208
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
第一种是对的,lea指令是取有效地址.最需要注意的是他和mov指令的区别.
另外还有les,lds指令你也可以参考下

此外建议你熟悉下汇编里的七种寻址方式.这玩意是必须的
2007-7-17 15:24
0
雪    币: 134
活跃值: (84)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
第二種是不加括號的情況。
2007-7-17 17:09
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
.................

第二种准确,第一种是胡言乱语,表述不清。

lea eax,[ebx - 02]    ;eax得到的是主存单元的有效地址,不是物理地址,也不是该单元的内容。
术语'有效地址'(也就是EA),其值就是相对于逻辑段始址的偏移量。

[ebx -02]的完整写法是DS:[ebx - 02] 。
2007-7-17 18:37
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
报告~
我发现两种说法都是同一个意思...
------------------------------------
LEA  EAX,[EDX-2]

假设此时有EDX=004f6002,

假设此时部分内存如下

内存地址          内存值
004f6000          FF FF FF FF
004f6002          EE EE EE EE
004f6004          DD DD DD DD
004f6006          BB BB BB BB
004f6008          CC CC CC CC

按第一种说法,为把EDX-02=004f6000送到eax,即,在执行命令后,eax=004f6000

按第二种说法, 也是把edx减去2然后送到eax.和第一种一样.

"而不是把由[edx-02]指明的内存地址上的值放到eax. " 这句话的意思是说, “而不是把地址004f6000指向的内存的值送到eax.”

换句话说, (参照前面的内存假设),
是把004f6000送到eax而不是把FF FF FF FF送到eax.
因为此时[edx-02]指向的地址是4f6000,在那个地址上保存的数据是FF FF FF FF.
2007-7-17 19:57
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
非也。
你所说的情况只有在DS=0的情况下发生。

你可以调试一下,当DS=1000的话,[edx - 02]所指向的地址会不会是4f6000。
2007-7-17 22:07
0
游客
登录 | 注册 方可回帖
返回
//