2011-03-06 46 views
0

我寫了一個程序,詢問你是否想要啤酒(只有大於或等於18歲)。 我的彙編器報告了一些問題。我是8086大會的初學者。程序詢問你是否想要啤酒

.MODEL SMALL 
    .STACK 100h 
    .DATA 

    Welcome DB 'Hello man, How old are you?',13,10,'$'          
    beer DB 'Did you want to drink a beer?(y/n)',13,10,'$' 
    old DB 'You cant drink becuste are you young',13,10,'$' 
    yes DB 'Ok thanks, pay 5$ in cash',13,10,'$' 
    no DB 'Ok, so **** you off!',13,10,'$' 


    .CODE 

    Welcom: 

     MOV AX, @DATA    
     MOV DS, AX     
     MOV AH, 9     
     MOV DX, OFFSET Welcome  
     INT 21h      

     MOV AL, 1 
     INT 21h  

     CMP AL, 18 
     JB older 
     CMP, AL, 18 
     JAE drink 

     MOV AX, 1 
     INT 21h 
     CMP AL, 'y' 
     JE ye 
     CMP AL, 'n' 
     JE n 

     older: 


      MOV DX, OFFSET old 


     drink: 


      MOV DX, OFFSET beer 



     ye: 


      MOV DX, OFFSET yes 


     n: 

      MOV DX, OFFSET no 

    xx: 

     MOV AX, 4ch 
     INT 21h  
     END Welcome 

感謝

+0

對不起,這裏提問的是什麼? – CarneyCode 2011-03-06 10:05:56

+2

你的彙編器報告有什麼問題?關於哪些代碼行?如果您提供所有相關信息,您會得到更好的答案。 – 2011-03-06 10:07:47

+2

哪個彙編程序?什麼錯誤?即使錯誤被修復,這個程序也只會打印'不'文本(你能說出原因嗎?)。 – 2011-03-06 10:08:35

回答

1

你不想在CMP, AL, 18的CMP後一個逗號。無論如何,您不需要第二個CMP,因爲條件跳轉不會影響先前CMP的標誌。

您可能不應該使用其他條件跳轉,但稍後您會了解。至於你的第二個問題,你把「END歡迎」,而不是「END歡迎」,我猜設置程序開始在數據部分的字符串開始「你好」。 'e'是字符碼65(十六進制)。一般來說,使用非常相似的標籤並不是一個好主意。也許使數據字符串標籤「問候」,併爲代碼留下「歡迎」,在這種情況下,您可以保留END語句原樣。

+0

assambler(emu8086)執行代碼,但是當我將它的消息「未知操作碼跳過:65 而不是8086指令 - 尚未支持。 」跳轉。 誰不支持的指令? – TheBlackSheep 2011-03-06 10:20:09

+0

看到我修改後的答案。 – 2011-03-06 17:17:24