能力值:
( LV4,RANK:50 )
|
-
-
2 楼
第一种是对的,lea指令是取有效地址.最需要注意的是他和mov指令的区别.
另外还有les,lds指令你也可以参考下
此外建议你熟悉下汇编里的七种寻址方式.这玩意是必须的
|
能力值:
( LV5,RANK:60 )
|
-
-
3 楼
第二種是不加括號的情況。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
.................
第二种准确,第一种是胡言乱语,表述不清。
lea eax,[ebx - 02] ;eax得到的是主存单元的有效地址,不是物理地址,也不是该单元的内容。
术语'有效地址'(也就是EA),其值就是相对于逻辑段始址的偏移量。
[ebx -02]的完整写法是DS:[ebx - 02] 。
|
能力值:
( 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.
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
非也。
你所说的情况只有在DS=0的情况下发生。
你可以调试一下,当DS=1000的话,[edx - 02]所指向的地址会不会是4f6000。
|
|
|