Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly Masm32-寻址模式和阵列_Assembly_X86_Masm_Addressing Mode - Fatal编程技术网

Assembly Masm32-寻址模式和阵列

Assembly Masm32-寻址模式和阵列,assembly,x86,masm,addressing-mode,Assembly,X86,Masm,Addressing Mode,我对寻址模式有点困惑 array1 DWORD 200 DUP(?) 如果我有以下声明: mov EAX, [EBX + EDI + 10] EBX是基础,EDI是索引,+10表示向EDI再添加十个字节?那么,EDI将返回14个字节长? 并返回地址并将其放入EAX 同样地 mov EAX, [EBX + EDI * 4] 这是否意味着在数组中的哪个索引处,返回4字节长? 因为每个索引的数组长度为4字节,对吗?我想我不明白*4是做什么的 另外, mov ECX, 100 ; loop

我对寻址模式有点困惑

 array1 DWORD 200 DUP(?)
如果我有以下声明:

mov EAX, [EBX + EDI + 10]
EBX是基础,EDI是索引,+10表示向EDI再添加十个字节?那么,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字节大? 那么,指数[0]=100,指数[1]=101,指数[2]=102

多谢各位

mov EAX, [EBX + EDI + 10]
EBX
中的值与
EDI
中的值相加10,然后将此结果用作地址,将32位值加载到
EAX

mov EAX, [EBX + EDI * 4]
EBX
中的值与
EDI
中的值相加4倍,然后将结果用作地址,将32位值加载到
EAX

mov EAX, [EBX + EDI * 4]

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

A
mov
这样就不会把地址放在目的地,而是放在该地址的值上。如果您想要地址,这就是
lea
的用途。EDI中4倍的值到底意味着什么?如果值是5乘以4,那么我们会返回20?我看不出这样做有什么意义?或者我们是从EDI索引开始重新组合4个字节?确切地说,如果EDI是5,表示我们需要第6个32位整数,我们需要将5*4=20添加到基址(因为地址指向8位的单个字节,在处理4字节32位数量时,我们需要将索引乘以4)。