我对寻址模式感到有点困惑。
array1 DWORD 200 DUP(?)
如果我有这样的陈述:
mov EAX, [EBX + EDI + 10]
EBX是基础,EDI是索引,而+ 10是说增加10个字节到EDI?那么,EDI会返回14个字节长吗? 并返回地址并将其放入EAX?
Similiarly,
mov EAX, [EBX + EDI * 4]
这是说在数组中的索引中,返回4个字节长吗? 因为每个索引的数组长4个字节对吗?我想我不明白* 4的作用!
另外,
mov ECX, 100 ; loop counter
mov ESI, 0
top1:
mov [array1 + ESI * 4], ECX
inc ESI
loop top1
这会将数字100放入数组开始,索引为零4字节大吗? 那么,index [0] = 100,index [1] = 101,index [2] = 102?
谢谢
答案 0 :(得分:2)
mov EAX, [EBX + EDI + 10]
获取EBX
中的值并在EDI
中添加值并添加10,然后将此结果用作地址,将32位值加载到EAX
。
mov EAX, [EBX + EDI * 4]
获取EBX
中的值,并将EDI
中的值加4倍,然后将结果用作地址,将32位值加载到EAX
。
最后一个将从100开始的递减序列存储到从array1
开始的存储器位置。每次执行ECX
指令时,loop
都会递减,直到达到0. ECX
的每个渐进值的地址都存储为array1
加上ESI
{{1}} },在每次迭代时递增。