簡體   English   中英

我的 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

我的預期輸出是一個數字,我得到了這個 ascii 字符

該程序假設從終端添加一個數字並在控制台中打印。 我希望我的代碼是錯誤的,而不是我的環境。

謝謝你的回答

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM