Masm32 - 寻址模式和数组

时间:2012-07-19 21:09:21

标签: assembly x86 masm addressing-mode

我对寻址模式感到有点困惑。

 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?

谢谢

1 个答案:

答案 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}} },在每次迭代时递增。