询问您是否想要啤酒的计划

时间:2011-03-06 10:02:16

标签: assembly x86

我写了一个程序,询问你是否想要一杯啤酒(只有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

由于

1 个答案:

答案 0 :(得分:1)

CMP, AL, 18中CMP后,您不需要逗号。而且你无论如何都不需要第二个CMP,因为条件跳转不会影响前一个CMP的标志。

您可能不应该使用其他条件跳转,但稍后您将了解到这一点。

<小时/> 至于你的第二个问题,你输入“END Welcome”而不是“END Welcom”,我猜这是设置程序从DATA部分开始在字符串开头“Hello”。 'e'是字符代码65(十六进制)。一般来说,使用非常相似的标签并不是一个好主意。也许使数据字符串标签为“greeting”,并为代码保留“Welcome”,在这种情况下,您可以保留END语句。