我正在编写一段汇编代码,用于通过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
如果您需要更多信息,请与我们联系,谢谢!
答案 0 :(得分:1)
我相信你的错误是前一行。 你不能在x86中混用16位和8位寄存器,如:
ADD SI, AH
如果要将AH寄存器添加到SI而不是首先将AH复制(零延伸)AH到AX,例如:
MOVZX AX, AH
ADD SI, AX