Assembly 为什么我的程序集输出处于字母位置?(1&x2B;1=b)

Assembly 为什么我的程序集输出处于字母位置?(1&x2B;1=b),assembly,dos,x86-16,tasm,dosbox,Assembly,Dos,X86 16,Tasm,Dosbox,我在用tasm。这是一个简单的程序,读取用户的输入并将两个数字相加。但是,我的输出是根据字母的位置显示字母 例如,3+5=h(8) 我希望它以整数显示 .model small .stack 100h .data input db 13,10,"Enter a number : ","$" output db 13,10,"The sum is ","$" .code main proc mo

我在用tasm。这是一个简单的程序,读取用户的输入并将两个数字相加。但是,我的输出是根据字母的位置显示字母

例如,3+5=h(8) 我希望它以整数显示

.model small 
.stack 100h
.data 
input   db  13,10,"Enter a number : ","$"
output  db  13,10,"The sum is ","$"

.code
main    proc

mov ax,@data
mov ds,ax

;INPUT 1
mov ah,9
mov dx, offset input 
int 21h
mov ah,1
int 21h
mov bl,al

;INPUT 2
mov ah,9
mov dx, offset input
int 21h
mov ah,1
int 21h
add bl,al

;OUTPUT DISPLAY
mov ah,9
mov dx,offset output
int 21h

mov ah,2
mov dl,bl
int 21h

;END
mov ax,4c00h
int 21h
main    endp
end main

您的输入数字是ASCII字符,因此“1”实际上是31h,例如。因此,当计算1+1时,得到的是31h+31h=62h,这是ASCII字符“b”

要将输入数字转换为其等效整数值,需要减去“0”(30h)


相反,要将整数数字输出为ASCII字符,则需要添加“0”。

AH tht有意义!那么我就加上sub-al,30小时?我编辑了我的帖子,你看可以吗?但我的输出现在给了我一个奇怪的符号。(dosbox中的一个心形)重读我上面的答案-你需要从输入的数字中减去30小时,然后在你想要输出结果时再加上30小时。请不要更改问题中的代码-这会使人们的答案无效,并使问题对未来的读者不再有用。我已经回滚了edit.Related:有一些示例代码,特别是
sub al,'0'
将ASCII数字转换为整数(假设它实际上是一个数字)