assembly - 为什么我的程序集输出在字母位置?(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
解决方案
您的输入数字是 ASCII 字符,例如,“1”实际上是 31h。因此,当您计算 1+1 时,您将得到 31h+31h=62h,即 ASCII 字符“b”。
要将输入数字转换为等效的整数值,您需要减去“0”(30h)。
相反,要将整数数字输出为 ASCII 字符,则需要添加“0”。
推荐阅读
- reactjs - 将添加到日历 HOC 与自定义设计/材质 UI 相结合
- html - 如何在 URL 中隐藏父文件夹名称?
- android - 从 java 文件访问 AAR 文件的内容
- django - 具有非唯一名称的 Django 模型
- php - 如何在此代码中写入删除函数以删除其中的目录和文件?
- blazor - 如何通过 Blazor WebAssembly 写入浏览器控制台?
- scikit-learn - 如何在 scikit-learn 中为多类逻辑回归准备单热编码?
- flutter - 未处理的异常:类型 '_InternalLinkedHashMap
' 不是类型 'Iterable 的子类型 ' - ssl - 不使用 nginx 配置加载子域
- javascript - 如何在反应循环中创建元素之间的关系?