添加两个寄存器时,操作码和操作数的组合无效

时间:2012-06-11 16:12:08

标签: assembly x86 nasm

我正在编写一段汇编代码,用于通过BIOS中断获取键盘输入,然后使用另一个BIOS中断将其打印到屏幕上。我正在为x86系统使用NASM编译器。在我的代码的第19行(标有星号(*),我得到“操作码和操作数的无效组合”错误。我知道这通常代表任何数量的语法错误,但在我的技能水平,我不能对不起任何具体细节,对不起。这是我的代码块:


; ---------------------------------------------
; Get input (hangs on input and loops forever)
; ---------------------------------------------
GetInput:

XOR AH, AH ;AH = 0 for interrupt 16.0 INT 0x16 ;Fetch the next key pressed. MOV SI, keymap ;Set SI to the head pointer of the keymap ADD SI, AH ;Increase the pointer by the key number. *MOV AL, [SI] ;Load the returned key for printing. CALL PrintCharacter ;Print the key CALL GetInput ;Wait on the next key. RET

如果您需要更多信息,请与我们联系,谢谢!

1 个答案:

答案 0 :(得分:1)

我相信你的错误是前一行。 你不能在x86中混用16位和8位寄存器,如:

ADD SI, AH

如果要将AH寄存器添加到SI而不是首先将AH复制(零延伸)AH到AX,例如:

MOVZX AX, AH
ADD   SI, AX