我写了一个程序,询问你是否想要一杯啤酒(只有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 :(得分:1)
在CMP, AL, 18
中CMP后,您不需要逗号。而且你无论如何都不需要第二个CMP,因为条件跳转不会影响前一个CMP的标志。
您可能不应该使用其他条件跳转,但稍后您将了解到这一点。
<小时/> 至于你的第二个问题,你输入“END Welcome”而不是“END Welcom”,我猜这是设置程序从DATA部分开始在字符串开头“Hello”。 'e'是字符代码65(十六进制)。一般来说,使用非常相似的标签并不是一个好主意。也许使数据字符串标签为“greeting”,并为代码保留“Welcome”,在这种情况下,您可以保留END语句。