0

在我的计算器项目中,我正在做一个 Mod 动作

前任 。15 % 6 = 3

当我这样做并且有一个mod(!= 0)它的工作

但是当我这样做并且 mod 是 0 时,例如。100 % 10

该程序甚至没有显示我输入了 '%' ,然后就退出了。

完整程序: http: //pastebin.com/zkHw911M(第168行)

或除和 Mod 部分:

DivideDo:
push ax
;mov ax , word ptr Num1Int
mov ah , 0
mov al , Num1Int
div Num2Int
mov ResultInt , al
pop ax
ret

ModDo:
push ax
;mov ax , word ptr Num1Int
mov ah , 0
mov al , Num1Int
div Num2Int
mov ResultInt , ah
pop ax
ret

截图:

4

2 回答 2

0

您的“显示十进制数”例程似乎存在致命缺陷。它假定将至少显示一个非零数字。

I1:
                cmp al,0    <-- In the case where the result is zero, you don't push anything on the stack
                je I2
                mov ah,0
                div dl
                push ax
                inc cx
                jmp I1
        I2:
                pop ax
                add ah,30H
                mov [bx] , ah
                inc bx
                loop I2
于 2013-03-02T19:37:57.497 回答
0

DoMod在我看来没问题。我怀疑你Int2Str的问题。在我看来,如果结果为零,那么你的pop东西还没有被push编辑过,并且永远不要在你的字符串中放一个“0”。sub结果为零的 a是否有效?我不能(方便地)测试你的代码,但我认为cmp al, 0应该在 之后div,计算数字,然后push它 -jnz top而不是jmp top......微妙的错误!看看那里,看看有没有帮助...

于 2013-03-02T19:33:18.800 回答