ASM |在计算器项目中Mod(%)为0后程序退出

时间:2013-03-02 10:52:20

标签: assembly x86 calculator modulo divide

在我的calcilator projuect中,我正在做一个Mod动作

前。 15%6 = 3

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

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

该程序甚至没有显示我输入'%',只是退出。

完整计划:http://pastebin.com/zkHw911M(第168行)

OR除以和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

ScreenShoot:

2 个答案:

答案 0 :(得分:0)

你的DoMod看起来对我好。我怀疑你的Int2Str是问题所在。在我看来,如果结果为零,那么你pop一些尚未push的东西,并且不会在你的字符串中加上'0'。结果为零的sub是否有效?我(不方便)无法测试您的代码,但我认为cmp al, 0应该在div后计算,计算数字,push它 - jnz topjmp top ...微妙的错误!看那里,看看是否有帮助...

答案 1 :(得分: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