我刚刚在几天前开始学习装配,看起来我碰到了一堵坚固的墙。我有这个问题,我必须在汇编程序中接受一个整数输入(celcius)并将其转换为华氏。装配中的乘法和除法练习x8086
这里是我的代码:
org 100h
jmp compare
var1 db 0
ans1 db ?
num1 db ?
num2 db ?
ex1 db ?
ex2 db ?
compare:
cmp var1,0
je start
jne move
move:
mov bl,var1
mov num1,bl
jmp digits
start:
mov ah,01h
int 21h
mov num1,al
cmp num1,0dh
jne digits
je convert
digits:
mov ah,01h
int 21h
cmp al,0dh
je revert
mov num2,al
jne proceed
proceed:
sub num1,48
mov cl,num1
mov al,10
imul cl
mov num1,al
sub num2,48
mov bl,num2
add num1,bl
mov bl,num1
mov var1,bl
jmp compare
revert:
cmp num2,0 ;also added this one too recently
jne c1
sub num1,48
c1:
mov bl,num1
mov var1,bl
jmp convert
convert:
mov cl, var1
mov al, 9
imul cl
mov cl, 5
idiv cl
add al, 32
mov ans1, al
mov bl,ans1
mov dl,0 ;i recently added this for convertion
mov al,ans1
mov bl,10
div bl
mov ex1,al
mov ex2,ah
adc ex1,48
adc ex2,48
print:
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,02h
mov dl,ans1
int 21h
mov ah,02h ;print the converted values
mov dl,ex1
int 21h
mov ah,02h
mov dl,ex2
int 21h
ret
我用于输入15,这将导致 “;”这是ascii中的59。 我需要帮助转换ascii;到十进制,当我输入更多 比2数字它说溢出分工。我该如何解决?提前致谢!
编辑:我最近添加了转换代码。它现在有点不错,但如果我在输入输入超过“20”输出错误。我用Alden的想法(非常感谢很多人!)修改答案并单独转换并打印它。我现在仍在处理这个问题,我还在抓头哈哈。这么多错误大声笑。
再次编辑:这太奇怪了。我的程序只能转换以5结尾的数字。它只能正确转换5,15,25和35.这太奇怪了,其他所有的输出都搞乱了。有人可以告诉我为什么会发生这种情况?
是辉煌的逻辑在那里!但我似乎无法理解如何去做。我知道你可以通过将它改为10来获得15,并获得它的余数来获得数字,然后打印它。但我无法理解如何做到这一点的方法。对不起,我真的是一个新手组装我还是不明白那些sp bp和push and pop意味着什么。现在我只是将答案分为10和得到了余数,并设法分离和打印数字..如果我输入15,结果是“;”我使用了mod和东西,并得到了“59”,这是正确的,但如果我去比20更高的错误 – user3110801