【发布时间】:2014-03-12 18:15:06
【问题描述】:
几天前我刚开始学习组装,似乎我碰上了一堵坚固的墙。我有这个问题,我必须在汇编中制作一个接受整数输入(摄氏度)并将其转换为华氏度的程序。
这是我的代码:
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”,输出就会出错。我使用了奥尔登的想法(非常感谢!)修改答案并单独转换和打印它。我现在还在做这个,我还在摸不着头脑哈哈。这么多错误哈哈。
再次编辑:这太奇怪了。我的程序只能转换以 5 结尾的数字。它只能正确转换 5 、 15 、 25 和 35 。这太奇怪了,其他所有的输出都搞砸了。谁能告诉我为什么会这样?
【问题讨论】:
标签: assembly ascii converter division multiplication