Assembly 询问您是否想要啤酒的程序

Assembly 询问您是否想要啤酒的程序,assembly,x86,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,'$'

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

谢谢

您不想在
CMP,AL,18
中的CMP后面加逗号。而且您不需要第二个CMP,因为条件跳转不会影响前一个CMP的标志

您可能也不应该使用另一个条件跳转,但稍后您将了解到这一点



至于你的第二个问题,你把“END Welcom”改为“END Welcom”,我猜这会在数据部分的字符串“Hello”开头设置程序开始。“e”是字符代码65(十六进制)。一般来说,使用如此相似的标签不是一个好主意。可能会将数据字符串标记为“问候语”,并将代码保留为“欢迎”,在这种情况下,您可以保留结束语句的原样。

对不起,这里问的问题是什么?您的汇编程序报告了哪些问题?关于哪些代码行?如果你提供所有相关信息,你会得到更好的答案。哪个汇编程序?什么错误?即使bug已经修复,这个程序也只会打印“否”文本(你能告诉我为什么吗?)。攻击者(emu8086)执行代码,但当我运行它时,会显示消息“未知操作码跳过:65不是8086指令-还不支持。”跳转。谁是尚未得到支持的指令?