2
我在組裝新的打印0到99中,我使用emu8086 問題: 用戶將輸入之間99到0的數,讓它是88 我有打印88爲零。寫一個循環中遞減順序(組裝)
要做到這一點,我是想這種技術:
呼叫
AH,1
兩次MSB和LSB副本MSB TO BH和LSB到BL
每個BH
- >檢查,如果BH是0
- >真,則檢查BL槽update_it如果是0
->true,then goto exit (because number is 00) ->false,then decrement msb and add 9 to lsb (make 80 to 79) and goto loop 2 to print it
- >假然後執行正常LSB遞減(77至76)
但我總是得到錯誤的輸出結合許多字符,請提到我的錯誤。提前致謝 。
這裏是我的代碼
.MODEL SMALL
.STACK 100H
.DATA
.CODE
MAIN PROC
;INITIALIZE DS
MOV AX,@DATA
MOV DS,AX
MOV AH,1 ;SCAN MSB
INT 21H ;MSB IS NOW AT AH
MOV BH,AL ;SAVE IT TO BH
;SCAN LSB
MOV AH,1 ;LSB IS NOW AT AL
INT 21H ;SAVE IT TO BL
MOV BL,AL
MOV AH,2 ;SINGLE CHAR PRINT
MOV DL,0DH ;CARRIAGE RETURN
INT 21H ;AL = 0DH
MOV DL,0AH ;LINE FEED
INT 21H ;AL = 0AH
;PRINT THE FIRST NUMBER
MOV DL,BH ;MSB
INT 21H ;
MOV DL,BL ;LSB
INT 21H ;
LOOP1:
CMP BL,0 ;LET 70
;SO UPDATE O TO 9
;AND 7 TO 6
JE UPDATE_IT ;IF TRUE
JMP LOOP2 ;IF FASLE
LOOP2:
MOV DL,' ' ;SPACE
INT 21H
MOV DL,BH ;MSB
INT 21H
MOV DL,BL ;LSB
INT 21H
DEC BL ;DECREMENT LSB
JMP LOOP1
UPDATE_IT:
CMP BH,0 ;BOTH MSB
;AND LSB ARE ZERO
JE EXIT_ ;IF TRUE EXIT = 00
DEC BH ;IF FALSE
;DEC MSB
ADD BL,9 ;TURN LSB O TO 9
;EXAMPLE 80 TO 79
JMP LOOP2 ;DO NORMAL DECREMENT
;DOS EXIT
EXIT_:
MOV AH,4CH ;DOS EXIT FUNCTION
INT 21H ;EXECUTE
MAIN ENDP
END MAIN
我想到的第一個問題是:確保保存BL和BH(在調用int 021之前使用'push bx',並在之後恢復它們'pop BX'。 int21可能會破壞BX(不在家atm,所以我不能檢查它) – Tommylee2k
請記住,'0'不是0.用戶輸入的字符不是數字,當你按下鍵* 0 *時,你在* AL * 。 –
也0和ASCII'0'不相等...你必須檢查'0'來確定循環的結束,而不是0 – Tommylee2k