Variables 读取程序集中的两位数并将其存储在变量中
我需要在汇编中编写一个程序,从用户那里读取一个两位数的数字,将其存储在一个变量中,然后打印出来。 我试了很多次,但都没能通过。 这是我的代码Variables 读取程序集中的两位数并将其存储在变量中,variables,assembly,tasm,Variables,Assembly,Tasm,我需要在汇编中编写一个程序,从用户那里读取一个两位数的数字,将其存储在一个变量中,然后打印出来。 我试了很多次,但都没能通过。 这是我的代码 .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 d
.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添加到用户输入中。但你必须从中减去48
.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
sub al,48
mov num1,al
mov ah,01h
int 21h
sub al,48
mov num2,al
mov al,num1
mul ten
add al,num2
mov readNum,al
ret
endp
proc write
mov dx,offset msg2
mov ah,09h
int 21h
mov al,readNum
mov ah,00
div ten
mov dl,ah
mov t2,dl
mov dl,al
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
除了其他人指出的不将ASCII值转换为数字之外,我注意到您使用了太多不必要的变量。如果您只需要从用户那里获取一个数字并显示它,那么您只需要空间来存储该数字 您可能希望签出作为参考。
希望它能解决你的问题。你走上了正确的道路,但需要“早点开始”。当你从键盘获得输入时,它是一个字符。减去48(或30h或“0”)以转换为字符。。。在存储之前,在乘以10之前。从那时起,你几乎是对的(未经测试!)。你也许可以从那里找到答案。有调试器吗?那会有帮助的。输入和输出之间仍然有16的差距。好的。。。我上一条评论中的错误:减去“0”可转换为数字-此时它不是“字符”。很抱歉除此之外,您在调试器中看到了什么?