首页 > 解决方案 > 为什么我的程序集输出在字母位置?(1+1=b)

问题描述

我正在使用 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

标签: assemblydosx86-16tasmdosbox

解决方案


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

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

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


推荐阅读