【发布时间】:2019-11-10 23:12:45
【问题描述】:
我正在尝试编写一个简单的程序,该程序将根据用户输入的等级将字母等级分配给字符串变量,该等级存储在名为“AGrade”的变量中。我写了这样的陈述:
LGrade proc AGrade;dword ; 1 Parameter
.if (AGrade > -1) && (AGrade<60)
mov letter, "F"
.EndIf
.if (AGrade > 66) && (AGrade<70)
mov letter, "D+" ;ERROR SHOWS HERE
.Endif
letter 被声明为letter byte " ", NULL
我得到错误:
error A2070: invalid instruction operands
我注意到,当我完全删除第二个 if 语句时,我可以毫无问题地构建。所以我的猜测是我嵌套不正确。是否需要“其他”?如果可能的话,有人可以告诉我嵌套这两个语句的正确方法吗?非常感谢!
【问题讨论】:
-
@zx485 感谢您的回复!您是说“AGrade”变量与“字母”冲突吗?对不起,我对此很陌生。我认为在每个之间有“.endif”可以解决这个问题
-
.if与你的错误无关,看它在哪一行。 (并尝试通过删除其他行来制作更小的minimal reproducible example)。"D+"不是一个字母;大概letter是一个db变量或数组,而"D+"有多个字符。 MASM 对多字符常量很奇怪;避免它。 -
你好@PeterCordes,我已经将“字母”初始化为“字母字节”,NULL“
-
@PeterCordes 谢谢!!!!如果我将“字母”初始化为单词而不是字节,它会按照我的方式工作吗?
-
是的,我认为
"D+"有word大小,但我不知道。不过,它的顺序是错误的。
标签: assembly procedure masm irvine32 masm32