程序集 --> 操作码和操作数的无效组合

Assembly --> invalid combination of opcode and operands

我有一个名为 char 的变量,当我按下该键时,它应该将其值更改为键盘键。我访问了 How to change the value of a variable in assembly,它说让我使用 mov char, key_value。问题是我得到了 terminal.asm:126: error: invalid combination of opcode and operands 。在网上搜索解决方案,我看到有必要放置方括号 [ ]。我试过了,但出现了同样的错误。

这是我文件的一部分:

printChar:

    mov edx, char;

    loop5_terminal:
    mov al, [edx];
    mov byte [edi], al;
    inc edi;
    inc edi;
    inc edx;
    inc ebx
    call cursor_terminal
    cmp byte[edx],0;
    jne loop5_terminal;

    jne l2_terminal
l2_terminal:

    cmp al , 0x03      ; Checks for key 2 input

    mov char, [two]
    je printChar
    

谢谢。

您收到的错误很可能是由于行

mov char, [two]

其中包含两个内存操作数,即chartwo。这是不可能的,因为x86架构不支持一条指令中的两个内存操作数。

您必须将该“指令”拆分为两个单独的(有效)指令,例如

mov al, BYTE [two]
mov BYTE [char], al

如果您使用 BYTE 大小的指令。