Для простого тестового примера для моего проекта компилятора я пытаюсь разделить 88 на 11, но когда я звоню idivq
, моя программа выдает исключение с плавающей запятой. Вот соответствующий раздел сгенерированного кода, где происходит исключение:Простой раздел x86-64 не работает
# push 88
movq $88,%r10
# push 11
movq $11,%r13
# \
movq %r10,%rax
idivq %r13
Я посмотрел примеры того, как использовать div
, и я думал, следующий в том же формате, так что я не понимаю, почему я получая исключение.
Возможный дубликат http://stackoverflow.com/questions/10343155/x86-assembly-handling-the-idiv-instruction – Leeor
Ваш idivq делит rdx: rax на r13. Не устанавливая rdx, вы можете легко вызвать ловушку #DE. Как это порождает «исключение с плавающей точкой», трудно догадаться. –