gpt4 book ai didi

assembly - 汇编 x86 中整数之间的除法

转载 作者:行者123 更新时间:2023-12-02 08:02:04 25 4
gpt4 key购买 nike

我正在开发编译器,当我尝试从以下自定义语言代码生成汇编代码时遇到问题

b:=-2;
c:=-4;
a:=c/b;

为了测试这个结果,我使用 if 条件询问 a == 2 是否成立,但事实并非如此。

这是从代码 avobe 生成的代码段

mov ax, 1
mov _a, ax

mov ax, -2
mov _b, ax

mov ax, -4
mov _c, ax


mov dx, 0
mov ax, _c
mov bx, _b
cmp bx, 0
JE label_div0Excp // jump to division by 0 message
idiv bx
mov @aux0, ax

mov ax, @aux0
mov _a, ax

mov ax, _a
cmp ax,2

JNE label_1

invoke MessageBox, NULL, addr _message0, addr _message0, MB_OK //_message0 say that result == 2

有人可以帮我吗?

谢谢

最佳答案

IDIV 进行有符号除法,因此它期望 DX:AX 中的被除数是有符号双字。因此,您应该将 AX 符号扩展为 DX:AX,而不是在除法之前清除 DX。这可以通过 CWD 指令来完成。

摘自英特尔手册:CWD 指令可用于在字除法之前从字中生成双字被除数。”

关于assembly - 汇编 x86 中整数之间的除法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27903128/

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