操作数类型不匹配的idiv

Sve*_*ven 1 x86 assembly

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

但是,在尝试实现除法时遇到问题.

idivl %ecx, %ebx
Run Code Online (Sandbox Code Playgroud)

此代码给出了以下错误:

Error: operand type mismatch for `idiv'
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么?以上行是idiv我的代码中唯一出现的时间.

Pol*_*ial 6

根据我的参考,IDIV将64位整数EDX:EAX除以提供的寄存器值.

idiv - 整数分部

idiv指令通过指定的操作数值划分64位整数EDX的内容:EAX(通过将EDX视为最重要的四个字节,EAX作为最不重要的四个字节构造).除法的商结果存储在EAX中,而余数存放在EDX中.

句法

idiv <reg32>
idiv <mem>
Run Code Online (Sandbox Code Playgroud)

例子

idiv ebx ; divide the contents of EDX:EAX by the contents of EBX. Place the quotient in EAX and the remainder in EDX.
idiv DWORD PTR [var] ; divide the contents of EDX:EAS by the 32-bit value stored at memory location var. Place the quotient in EAX
Run Code Online (Sandbox Code Playgroud)

和EDX中的其余部分.

idivl指令的行为完全相同idiv,除了idivl是有符号的除法.

http://www.cs.virginia.edu/~evans/cs216/guides/x86.html

另一个很棒的参考:http://ref.x86asm.net/