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