Assembly idiv的操作数类型不匹配

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(作为指定操作数的最低有效四个

我目前正在编写一个生成x86-32代码的编译器

然而,我在尝试实施除法时遇到了一个问题

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位。