我的 x86 8086 ASM 程序打印不好
My ASM Program for x86 8086 dont print well
我在带有 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
该程序假设从终端添加一个数字并在控制台打印。我希望我的代码是错误的,而不是我的环境。
感谢您的回答
mov al,1 <-- function number goes in AH
int 21h
add bl,al
当您要求输入第二个字符时,您犯了将功能编号存储在 AL
中的错误,而它应该是 AH
。虽然 DOS api 没有提到 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'
很好,而且有点短,但大多数人会这样解决:
mov ah, 01h
int 21h ; eg. input '3'
sub al, '0' ; '3' - '0' = 3
mov bl, al ; 3
mov ah, 01h
int 21h ; eg. input '5'
sub al, '0' ; '5' - '0' = 5
add bl, al ; 3 + 5 = 8
mov dl, bl
add dl, '0' ; 8 + '0' = '8'
mov ah, 02h
int 21h ; outputs '8'
但是 当且仅当 您输入了 2 个总和小于 10 的个位数时,以上所有方法都有效 。如果不是,则需要输出超过 1 个字符才能显示加法结果。
看看 here 看看你如何处理最多 99 的加法。
我在带有 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
该程序假设从终端添加一个数字并在控制台打印。我希望我的代码是错误的,而不是我的环境。
感谢您的回答
mov al,1 <-- function number goes in AH
int 21h
add bl,al
当您要求输入第二个字符时,您犯了将功能编号存储在 AL
中的错误,而它应该是 AH
。虽然 DOS api 没有提到 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'
很好,而且有点短,但大多数人会这样解决:
mov ah, 01h
int 21h ; eg. input '3'
sub al, '0' ; '3' - '0' = 3
mov bl, al ; 3
mov ah, 01h
int 21h ; eg. input '5'
sub al, '0' ; '5' - '0' = 5
add bl, al ; 3 + 5 = 8
mov dl, bl
add dl, '0' ; 8 + '0' = '8'
mov ah, 02h
int 21h ; outputs '8'
但是 当且仅当 您输入了 2 个总和小于 10 的个位数时,以上所有方法都有效 。如果不是,则需要输出超过 1 个字符才能显示加法结果。
看看 here 看看你如何处理最多 99 的加法。