首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Masm32 -寻址模式和数组

Masm32 -寻址模式和数组
EN

Stack Overflow用户
提问于 2012-07-20 05:09:21
回答 1查看 1.1K关注 0票数 0

我对寻址模式有点困惑。

代码语言:javascript
运行
复制
 array1 DWORD 200 DUP(?)

如果我有这样的声明:

代码语言:javascript
运行
复制
mov EAX, [EBX + EDI + 10]

EBX是基础,EDI是索引,+ 10表示向EDI添加10个字节?那么,EDI会返回14字节长吗?把地址寄回给EAX?

类似地,

代码语言:javascript
运行
复制
mov EAX, [EBX + EDI * 4]

这是不是说,在数组中的任何索引处,都会返回4字节长?因为每个索引的数组都是4字节长,对吧?我想我不明白*4是做什么的!

此外,

代码语言:javascript
运行
复制
  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?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-20 05:25:02

代码语言:javascript
运行
复制
mov EAX, [EBX + EDI + 10]

获取EBX中的值,并将EDI中的值相加,然后添加10,然后使用此结果作为地址将32位值加载到EAX中。

代码语言:javascript
运行
复制
mov EAX, [EBX + EDI * 4]

EBX中的值与EDI中的值相加4倍,然后使用结果作为地址将32位值加载到EAX中。

最后一个将从100开始的递减数字序列存储到从array1开始的内存位置。每次执行loop指令时,ECX都会递减,直到它达到0。ECX的每个渐进值存储在的地址是array1加上4倍ESI,该值在每次迭代时递增。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11569353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档