Assembly idiv的操作数类型不匹配
我目前正在编写一个生成x86-32代码的编译器 然而,我在尝试实施除法时遇到了一个问题Assembly idiv的操作数类型不匹配,assembly,x86,Assembly,X86,我目前正在编写一个生成x86-32代码的编译器 然而,我在尝试实施除法时遇到了一个问题 idivl %ecx, %ebx 此代码给出了以下错误: Error: operand type mismatch for `idiv' 有人知道为什么吗?以上几行是我的代码中唯一出现的idiv。根据我的参考,idiv将64位整数EDX:EAX除以提供的寄存器值 整数除法 idiv指令将64位整数EDX:EAX(通过将EDX视为最重要的四个字节来构造)的内容进行分割 和EAX(作为指定操作数的最低有效四个
idivl %ecx, %ebx
此代码给出了以下错误:
Error: operand type mismatch for `idiv'
有人知道为什么吗?以上几行是我的代码中唯一出现的
idiv
。根据我的参考,idiv
将64位整数EDX:EAX
除以提供的寄存器值
整数除法
idiv指令将64位整数EDX:EAX(通过将EDX视为最重要的四个字节来构造)的内容进行分割
和EAX(作为指定操作数的最低有效四个字节)
价值除法的商结果存储到EAX中,而
剩余部分放在EDX中
语法
idiv <reg32>
idiv <mem>
其余部分在EDX中
idivl
指令的行为与idiv
完全相同,只是idivl
是有符号除法
idivl %ecx, %ebx
看
另一个伟大的参考:根据我的参考,
IDIV
将64位整数EDX:EAX
除以提供的寄存器值
整数除法
idiv指令将64位整数EDX:EAX(通过将EDX视为最重要的四个字节来构造)的内容进行分割
和EAX(作为指定操作数的最低有效四个字节)
价值除法的商结果存储到EAX中,而
剩余部分放在EDX中
语法
idiv <reg32>
idiv <mem>
其余部分在EDX中
idivl
指令的行为与idiv
完全相同,只是idivl
是有符号除法
idivl %ecx, %ebx
看
另一个很好的参考:idivl只接受一个参数。看见
它将EDX:EAX的内容除以参数的内容idivl只接受一个参数。看见
它将EDX:EAX的内容除以参数的内容I可能是错误的,但
idiv
不是一条单操作数指令吗?@神秘-是,它计算edx:eax/r32
,其中edx:eax
是edx
和eax
的按位串联,以形成64位值,r32
是任何32位寄存器或指针。结果放在eax
中,其余部分放在edx
中。我可能错了,但idiv
不是一条单操作数指令吗?@mystical-是,它计算edx:eax/r32
,其中edx:eax
是edx
和eax
的按位串联,以形成64位值,r32
是任何32位寄存器或指针。结果放在eax
中,其余部分放在edx
中。这可能对您有所帮助,它本质上是一个普通指令的外行术语列表,它们的作用是:idiv
是有符号除法div
未签名idivl
在AT&T语法中只是一个显式操作数大小为32位的idiv。这可能对您有所帮助,它本质上是一个普通指令的外行术语列表,它们的作用是:idiv
是有符号除法div
未签名idivl
就是idiv
,在AT&T语法中显式操作数大小为32位。