我什么时候可以在汇编语言中使用*?

unl*_*ing 3 x86 assembly

有这些数据

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

我可以用

.code
mov eax,tableD[ebx + esi*TYPE tableD]
Run Code Online (Sandbox Code Playgroud)

但我不能用

mov eax,tableD[ebx*2 + esi*TYPE tableD]
Run Code Online (Sandbox Code Playgroud)

但我可以用

mov eax,tableD[ebx*2 + esi]
Run Code Online (Sandbox Code Playgroud)

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

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

fuz*_*fuz 6

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

base + index * scale + displacement
Run Code Online (Sandbox Code Playgroud)

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

此外,缩放因子限于1,2,4或8; 其他缩放因子无法编码.

  • @unlimitedcoding:比例可以只有2的幂,只有第一个,1,2,4和8. (3认同)