gpt4 book ai didi

assembly - NASM 中的两个数字相除

转载 作者:行者123 更新时间:2023-12-02 21:37:49 26 4
gpt4 key购买 nike

开始自学汇编 (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 ebx寄存器对 edx:eax(这是一个隐式操作数)指令)通过提供的源操作数(即:除数)。

<小时/>
mov edx, 0
mov eax, 250
mov ecx, 25
div ecx

在上面的代码中,edx:eax被除数ecx除数。执行div指令后,寄存器eax包含edx包含余数>.

<小时/>

我使用寄存器ecx而不是ebx来保存除数,因为,如stated in the comments ,寄存器 ebx 必须在调用之间保留。否则,在修改之前必须正确保存,并在从相应的子例程返回之前恢复

<小时/>

除以零可能会出现错误

stated in one comment ,如果商不符合商寄存器的范围(本例中为 eax),则会发生除零错误。

这可以解释为什么你的程序崩溃:由于寄存器edx在执行div指令之前没有被设置,它可能包含一个非常大的值,以至于结果商不适合 eax 寄存器。

关于assembly - NASM 中的两个数字相除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45506439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com