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

问题描述 投票:0回答:1

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

assembly procedure masm irvine32 masm32
1个回答
0
投票

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

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

您可能需要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在将它们放入立即数常量时从源中反转了字节。)

© www.soinside.com 2019 - 2024. All rights reserved.