x86汇编内存操作数

大家好 我有一个与x86有关的问题。在Intel手册中,某些指令可能采用不同类型的内存操作数。 例如。 IDIV r / m8或IDIV r / m16或IDIV r / m32或IDIV r / m64 现在他们都是IDIV有可能知道操作数是m8,m16,m32还是m64? 我在想,如果操作数是m8,那么它由8位寄存器寻址,例如。 ax如果32然后是eax,尤其是...... 我的假设是否正确?如我错了请纠正我 欢迎任何建议 谢谢     
已邀请:
是的,用作操作数的寄存器可以解决歧义。 (注意,
ax
是一个16位寄存器,而不是一个8位寄存器 - 分别为高或低字节的
ah
al
。) 如果您只是指内存操作数,则需要使用
BYTE PTR
WORD PTR
DWORD PTR
说明符来解决歧义,如下所示:
mov dword ptr [eax], 0
此示例将
eax
中包含的地址的32位数量(“双字”)设置为0。     
无论操作数是m8,m16还是m32,用于寻址存储单元的寄存器都可以是8位,16位或32位 - 所有这些都是有效的。 要指定从内存中读取多少位,需要在地址前使用大小说明符
byte
word
dword
之一。例如:
idiv byte [bx] ; m8
idiv word [bx] ; m16
idiv dword [bx] ; m32
    

要回复问题请先登录注册