将多字节字符常量存储到 MASM 字节数组中?

Store a multi-byte character constant into a MASM byte array?

我正在尝试编写一个简单的过程,该过程将根据用户输入的等级将字母等级分配给字符串变量,我将其存储在名为 "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 语句时,我可以毫无问题地构建。所以我的猜测是我嵌套不正确。是否需要 "else"?如果可能的话,有人可以告诉我嵌套这两个语句的正确方法吗?非常感谢!

.if跟你的错误没有关系,看看是在哪一行

"D+" 不是单个字节,但您的 letter 是一个 byte 数组,MASM 神奇地将其与字节操作数大小相关联。

您可能需要 mov word ptr letter, "+D" 来匹配您的 2 字节存储的操作数大小。

请参阅 MASM 对多字符常量很奇怪,因此您需要在源代码中将它们与您希望存储到内存中的顺序颠倒过来。 (与 NASM 等优秀的汇编器不同,MASM 在将字节放入立即常量时会从源中反转字节。)