Несоответствие типов операндов для idiv - PullRequest
1 голос
/ 06 декабря 2011

Я сейчас пишу компилятор, который выдает код x86-32.

Однако у меня возникла проблема при попытке реализовать деление.

idivl %ecx, %ebx

Этот код выдает мне следующую ошибку:

Error: operand type mismatch for `idiv'

Кто-нибудь знает почему?Вышеуказанные строки - единственный раз, когда idiv появляется в моем коде.

Ответы [ 2 ]

6 голосов
/ 06 декабря 2011

Согласно моей справке, IDIV делит 64-разрядное целое число EDX:EAX на предоставленное значение регистра.

idiv - Целочисленное деление

Инструкция idiv делит содержимое 64-битного целого числа EDX: EAX (созданного путем просмотра EDX как наиболее значимых четырех байтов). и EAX как младшие четыре байта) указанным операндом значение. Коэффициент деления сохраняется в EAX, а остаток помещается в EDX.

Синтаксис

idiv <reg32>
idiv <mem>

Примеры

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

и остаток в EDX.

Инструкция idivl ведет себя точно так же, как idiv, за исключением того, что idivl является знаковым делением.

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

Еще одна замечательная ссылка: http://ref.x86asm.net/

3 голосов
/ 06 декабря 2011

idivl принимает только один аргумент.см. здесь .он делит содержимое EDX: EAX на содержимое аргумента

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...