我在具有DOSBox虚拟化功能的asm x86中具有以下代码:
.model small
.stack 100h
.data
.code
main proc
mov ah,1
int 21h
mov bl,al
mov al,1
int 21h
add bl,al
sub bl,'0'
mov dl,bl
mov ah,2
int 21h
mov ah,4ch
int 21h
main endp
end main
My expected output was a number and i get this ascii character
该程序假设从终端添加一个号码并在控制台中打印。我希望我的代码是错误的,而不是我的环境。
谢谢您的答案
答案 0 :(得分:1)
mov al,1 <-- function number goes in AH
int 21h
add bl,al
当您要求输入第二个字符时,您将函数号存储在应该AL
的{{1}}中时出错。尽管DOS api并未提到AH
会因该功能而改变,但您不能相信这是真的。
AH
您使用该单个mov ah, 1
int 21h
mov bl, al
mov ah, 1
int 21h
add bl, al ; This now contains 2 times '0'
sub bl, '0' ; Here you correctly subtract 1 of those
mov dl, bl
mov ah, 2
int 21h
的方式很好并且更短,但是大多数人会这样解决:
sub bl, '0'
但是上述所有操作均有效,并且仅当您输入两个总和实际上小于10的数字时,如果不是,您将为了显示加法的结果,需要输出1个以上的字符。
看看here,了解如何处理多达99个的添加项。