我对寻址模式有点困惑。
array1 DWORD 200 DUP(?)如果我有这样的声明:
mov EAX, [EBX + EDI + 10]EBX是基础,EDI是索引,+ 10表示向EDI添加10个字节?那么,EDI会返回14字节长吗?把地址寄回给EAX?
类似地,
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放入从索引0开始的数组中,4字节大吗?那么,index2= = 100,index = 101,index= 102?
谢谢
发布于 2012-07-20 05:25:02
mov EAX, [EBX + EDI + 10]获取EBX中的值,并将EDI中的值相加,然后添加10,然后使用此结果作为地址将32位值加载到EAX中。
mov EAX, [EBX + EDI * 4]将EBX中的值与EDI中的值相加4倍,然后使用结果作为地址将32位值加载到EAX中。
最后一个将从100开始的递减数字序列存储到从array1开始的内存位置。每次执行loop指令时,ECX都会递减,直到它达到0。ECX的每个渐进值存储在的地址是array1加上4倍ESI,该值在每次迭代时递增。
https://stackoverflow.com/questions/11569353
复制相似问题