【发布时间】:2018-01-12 08:54:07
【问题描述】:
开始自学组装 (NASM) 我想知道如何除以 2 个数字(例如在 Windows 上)。
我的代码看起来像这样,但它崩溃了。
global _main
extern _printf
section .text
_main:
mov eax, 250
mov ebx, 25
div ebx
push ebx
push message
call _printf
add esp , 8
ret
message db "Value is = %d", 10 , 0
我想知道真正的问题是什么?它甚至不显示除法后的值。
【问题讨论】:
-
请参阅指令集参考以了解
div的工作原理。提示:被除数是 64 位值,您需要将edx归零。此外,调用约定要求ebx被保留,并且结果不会在ebx中。 -
汇编指令不遵循意愿或逻辑,即仅仅因为某些指令被称为“DIV”,并不意味着它可以按预期工作。但是您的代码看起来像您没有检查说明手册。您需要指令参考指南(simplified web version here)(但在极少数情况下不要犹豫使用英特尔官方文档)进行 ASM 编程,经常检查它是否有各种指令(尤其是涉及标志或其他棘手的微妙细节时,像
DIV行为)。
标签: assembly x86 nasm integer-division