【发布时间】:2013-06-07 15:28:34
【问题描述】:
我需要一个汇编程序从用户那里读取一个两位数,将它存储在一个变量中,然后打印它。 我已经尝试了很多,但无法通过。 这是我的编码。
.model small
.stack 100h
.data
msg db "Enter a number: $"
msg2 db "You have entered: $"
num1 db 0
num2 db 0
temp db 0
ten db 10
readNum db 0
t2 db 0
t1 db 0
.code
mov ax,@data
mov ds,ax
call read
call endL
call write
proc endL
mov dl,0ah
mov ah,02h
int 21h
ret
endp
proc read
mov dx,offset msg
mov ah,09h
int 21h
mov ah,01h
int 21h
mov num1,al
mul ten
mov temp,al
mov dl,temp
add dl,48
mov ah,02h
int 21h
mov ah,01h
int 21h
mov num2,al
mov dl,num2
add dl,temp
mov readNum,dl
ret
endp
proc write
mov dx,offset msg2
mov ah,09h
int 21h
mov al,readNum
mov ah,00
div ten
mov t1,ah
mov t2,al
mov dl,t1
add dl,48
mov ah,02h
int 21h
mov dl,t2
add dl,48
mov ah,02h
int 21h
endp
mov ax,4c00h
int 21h
end
根据上面的程序,如果我输入 42,它会给我输入的数字为 85。 我在我的程序中找不到错误。谁能帮帮我。
【问题讨论】:
-
你在正确的轨道上,但需要“早点开始”。当您从键盘获得输入时,它是一个字符。减去 48(或 30h 或“0”)以转换为字符......在存储之前,然后乘以 10。从那里开始,您大致正确(未经测试!)。你可能可以从那里解决它。有调试器吗?这会有所帮助。
-
输入和打印输出之间仍然有 16 的差距。
-
好的...我之前的评论中的错误:减去“0”以转换为数字 - 此时它不是“字符”。对不起。除此之外,您在调试器中看到了什么?