1

我正在编写一段汇编代码,旨在使用 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

如果您需要更多信息,请告诉我,谢谢!

4

1 回答 1

1

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

ADD SI, AH

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

MOVZX AX, AH
ADD   SI, AX
于 2012-06-11T16:33:00.527 回答