【发布时间】:2021-02-20 01:01:19
【问题描述】:
以下是我编写的用于在 EMU8086 中查找两个数字的 LCM 的代码。当我运行它时,我在 Ans 变量中得到值 0。
.MODEL SMALL
.DATA
Num1 DW 250
Num2 DW 100
Ans DW ?
.CODE
MOV AX,@DATA
MOV DS, AX
MOV AX, Num1
MOV BX, Num2
MOV DX, 0000h
NEXT: PUSH AX
PUSH DX
DIV BX
CMP DX, 0000h
JZ LAST
POP DX
POP AX
ADD AX, Num1
JNC NEXT
INC DX
JMP NEXT
LAST: POP Ans+2
POP Ans
MOV AH, 4Ch
INT 21h
END
【问题讨论】:
-
不知道是不是和this有关? emu8086 在其
DIV的实现中似乎存在错误。你用其他模拟器测试过吗? -
一个注释,不过;我没有仔细阅读代码,但您似乎在
Ans和Ans+2存储了两个结果字。但是,Ans只分配了一个字,因此pop Ans+2将覆盖其他内容。不确定这是否是您的错误,但它看起来不对。 -
另外,这是一个非常荒谬的寻找 LCM 的算法;重复将
Num1添加到自身,直到它是Num2的倍数。您可能会查找“欧几里得算法”以获得更有效的方法。