为什么间接寻址中的索引器必须是dword?
例如,这不起作用:
.data
arr dword 10 dup(?)
.code
...
mov bx, 2
call [arr+bx*4] ;;error A2032:invalid use of register
但使用ebx
代替bx
会有效,为什么?
答案 0 :(得分:4)
由于并非所有24种寻址模式都是同时引入的,因此有些模式不适用于16位寄存器。
在一条指令中,寻址模式在字节 modRM 和 SIB 中编码:
可能的 16位寻址模式是:
如您所见,没有[bx*4] + disp16
,因为需要 SIB ,但 SIB 只能指定32位寄存器(64位)注册 REX 前缀):
您可以在Intel manual 2
上找到所有相关的技术说明