x86汇编内存操作数

时间:2010-12-16 18:52:06

标签: assembly x86 x86-64 cpu-registers operands

大家好 我有一个与x86有关的问题。在Intel手册中,某些指令可能采用不同类型的内存操作数。 例如。 IDIV r / m8或IDIV r / m16或IDIV r / m32或IDIV r / m64 现在他们都是IDIV有可能知道操作数是m8,m16,m32还是m64? 我在想,如果操作数是m8,那么它由8位寄存器寻址,例如。 ax如果32然后是eax,尤其是...... 我的假设是否正确?如我错了请纠正我 欢迎任何建议 感谢

2 个答案:

答案 0 :(得分:0)

是的,用作操作数的寄存器可以解决歧义。 (注意,ax是一个16位寄存器,而不是一个8位寄存器 - 分别对于高字节或低字节为ahal。)

如果您只是指内存操作数,则需要使用BYTE PTRWORD PTRDWORD PTR说明符来解决歧义,如下所示:

mov dword ptr [eax], 0

此示例将eax中包含的地址的32位数量(“双字”)设置为0。

答案 1 :(得分:0)

  1. 操作数是m8,m16还是m32,用于寻址存储单元的寄存器可以是8位,16位或32位 - 所有都是有效的。

  2. 要指定从内存中读取的位数,您需要在地址前使用大小说明符byteworddword之一。例如:

  3. idiv byte [bx] ; m8

    idiv word [bx] ; m16

    idiv dword [bx] ; m32