簡體   English   中英

英特爾8086,無限循環

[英]Intel 8086, infinite loop

我正在嘗試編寫一個小應用程序,其中使用系統時鍾生成1-5之間的隨機數,並且用戶必須猜測該數字,如果猜測正確,則會顯示一條消息。

到目前為止,這是我的代碼:

org 0x100


;Guess:
        MOV AH,2CH  ;DOS CALL TO GET SYSTEM CLOCK
        INT 21H     ;EXECUTE INTERRUPT 21H
        MOV AL,DL   ;RESULT RETURNED IN DL
        MOV AH,0    ;CLEAR THE HIGH BYTE
        MOV CL,20   ;GET DIVISOR
        DIV CL      ;DIVIDE VALUE IN AX BY VALUE IN CL
        MOV BL,AL   ;MOVE RESULT OF DIVISION INTO BL
        INC BL      ;INCREMENT BL TO GET NO BETWEEN 1-5

;Prompt:
        JMP START
        MSG DB "Enter a number between 1-5:$"

        START:  

        MOV DX, OFFSET MSG
        MOV AH, 09h 
        INT 21h

;User input:

        MOV AH, 1h  ;GET INPUT FROM THE KEYBOARD 
        INT 21h     ;THE CHARACTER INPUT IS STORED IN AL

;The Comparison: 

        ;MOV AX,AL   ;LOAD VALUE OF AL (USER INPUT)
        CMP AL,BL   ;COMPARE WITH BL

        JE Equal    ;IF EQUAL JUMP TO Equal
        JNE Not_Equal;IF NOT EQUAL JUMP TO Not_Equal        

        Equal:

        ABC DB "Your guess was correct!$"
        MOV DX, OFFSET ABC
        MOV AH, 09h 
        INT 21h        


        Not_Equal:

        DEF DB "Your guess was incorrect!$"
        MOV DX, OFFSET DEF
        MOV AH, 09h 
        INT 21h

我的問題是,它只是陷入無限循環。

您的代碼中存在一些其他問題:

您不能這樣混合代碼和數據:

    ABC DB "Your guess was correct!$"
    MOV DX, OFFSET ABC

CPU無法分辨代碼和數據之間的區別,它將嘗試執行遇到的任何內容。 將結果字符串移到MSG字符串的位置。


您正在將數值與其對應的ASCII字符進行比較:

    MOV AH, 1h  ;GET INPUT FROM THE KEYBOARD 
    INT 21h     ;THE CHARACTER INPUT IS STORED IN AL

如果在終端中輸入數字2 ,則會在AL獲得字符'2' (等於50)。 要成功將其與BL進行比較,您必須從AL減去'0'


您將始終打印“您的猜測不正確”字符串。 在打印出“您的猜測是正確的”字符串的代碼之后,沒有跳轉可以跳過下一個打印:

    ABC DB "Your guess was correct!$"
    MOV DX, OFFSET ABC
    MOV AH, 09h 
    INT 21h        

    ; Execution will simply continue here since there's nothing that changes the
    ; flow of execution.

    Not_Equal:

您沒有正確終止程序。 在程序結束時,您應該添加以下內容:

MOV AX,4C00h
INT 21h    ; Terminate with exit code 00h

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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