有了这个数据
.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/