当前位置: 首页 > 知识库问答 >
问题:

Masm32-寻址模式和阵列

白宏大
2023-03-14

我对寻址模式有点困惑。

 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字节大。所以,index[0] = 100,index[1]= 101,index[2]= 102?

谢谢你

共有1个答案

笪俊迈
2023-03-14
mov EAX, [EBX + EDI + 10]

将< code>EBX中的值与< code>EDI中的值相加,再加上10,然后将此结果用作地址,将32位值加载到< code>EAX中。

mov EAX, [EBX + EDI * 4]

获取 EBX 中的值,并将其添加到 EDI 中值的 4 倍,然后将结果用作地址,将 32 位值加载到 EAX 中。

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

 类似资料:
  • 我使用英特尔®架构代码分析器(IACA)发现了一些(对我来说)意想不到的东西。 以下使用寻址的指令 不符合IACA规定的微型保险丝。但是,如果我这样使用

  • 大多数汇编语言指令都需要处理操作数。 操作数地址提供存储要处理的数据的位置。 某些指令不需要操作数,而某些其他指令可能需要一个,两个或三个操作数。 当指令需要两个操作数时,第一个操作数通常是目标,它包含寄存器或存储单元中的数据,第二个操作数是源。 源包含要传递的数据(立即寻址)或数据的地址(寄存器或存储器)。 通常,源数据在操作后保持不变。 三种基本寻址方式是 - 寄存器寻址 立即寻址 内存寻址

  • 周五晚上,绝影和往常一样回家。这是他和他们这些大学生唯一不同的地方:他家和大学在一个城市,每周五就可以回家。这样做的好处有两点:一、每周只有五天要用生活费;二、可以不用自己洗衣服,冬天的衣服,直接穿回家换就好了,夏天的,打包回家换。 这周过来,他和平时有点不一样,土匪见他提了两本书,一本《鲁迅杂文全集》,一本《PC汇编语言程序设计》。 土匪对这两本书没都没啥兴趣,他喜欢看武打小说,是“武打”小说,

  • 4. 寻址方式 通过上一节的例子我们了解到,访问内存时在指令中可以用多种方式表示内存地址,比如可以用数组基地址、元素长度和下标三个量来表示,增加了寻址的灵活性。本节介绍x86常用的几种寻址方式(Addressing Mode)。内存寻址在指令中可以表示成如下的通用格式: ADDRESS_OR_OFFSET(%BASE_OR_OFFSET,%INDEX,MULTIPLIER) 它所表示的地址可以这样

  • 3.6 基址加变址寻址方式 操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。其有效地址的计算公式如右式所示。 在不使用段超越前缀的情况下,规定:如果有效地址中含有BP,则缺省的段寄存器为SS;否则,缺省的段寄存器为DS。 例3.4 假设指令:MOVBX, [BX+SI],在执行时,(DS)=1000H,(BX)=2100H,(SI)=0011H,

  • 他在找那本《PC汇编语言程序设计》,那书封面已经被撕掉,还好没被当废纸扔掉。他赶紧翻到寻址那章。 原来如此!寻址方式原来就是寻找数据的方法。比如要除法,被除数在哪里,除数在哪里,商放哪里,余数放哪里,要么在寄存器要么在内存。就这么简单个道理,不如就叫“数据寻找方法”那让人一看就明白,多直观。非要叫个大家都不熟悉的“寻址”。就算叫“寻址”,也完全可以在旁边加以解释,或者写上句:“XXXX寻址方式类似