[英]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
該程序假設從終端添加一個數字並在控制台中打印。 我希望我的代碼是錯誤的,而不是我的環境。
謝謝你的回答
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'
但是,當且僅當您輸入總和實際上小於 10 的 2 個單數數字時,上述所有內容都將起作用。如果不是,則您需要輸出 1 個以上的字符才能顯示加法的結果。
看看這里,看看如何處理高達 99 的添加。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.