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

时间:2019-11-10 23:12:45

标签: assembly procedure masm irvine32 masm32

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

1 个答案:

答案 0 :(得分:0)

.if与您的错误无关,请查看错误所在的行。

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

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

请参见When using the MOV mnemonic to load/copy a string to a memory register in MASM, are the characters stored in reverse order? MASM对于多字符常量很奇怪,因此您需要在源代码中对它们进行逆向,而不是要存储到内存中的顺序。 (与NASM等出色的汇编程序不同,MASM在将它们放入立即数常量时从源中反转了字节。)