有了这个数据

.data
tableD DWORD 10h, 20h, 30h, 40h, 50h, 60h
Rowsize = ($ - tableD)
DWORD 60h,70h,80h,90h,0A0h
DWORD 0B0h,0C0h,0D0h,0E0h,0F0h

我可以用
.code
mov eax,tableD[ebx + esi*TYPE tableD]

但我不能用
mov eax,tableD[ebx*2 + esi*TYPE tableD]

但我可以用
mov eax,tableD[ebx*2 + esi]

我不能在那里使用 2 *s 吗?

我可以知道这些物品的条款吗?

最佳答案

x86 架构支持以下形式的四部分寻址模式:

base + index * scale + displacement

其中所有四个部分都可以不存在(如果不存在,scale 就是 1)。这意味着内存操作数中只能有一个缩放组件;所以是的,你只能使用一个 *

此外,缩放因子限制为 1、2、4 或 8;其他缩放因子无法编码。

关于assembly - 我什么时候可以在汇编语言中使用 * ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44552628/

10-11 18:53