in - gcc 内联汇编的操作数类型不匹配

Operand type mismatch for in - gcc inline assembly

我有一些 C 代码在内联汇编中使用了 inb 指令。我听说 inb 接受大小为 8 位的操作数。 AL 和 DL 是 8 位,为什么这行不通?

__asm__ __volatile__("inb %al, %dl");

它说 "Operand type mismatch for in"。如果重要的话,我在顶部有“.code16gcc”。 感谢所有帮助。

两件事:在 AT&T 风格的汇编中,目标操作数在最后,即使数据是 8 位,端口号也是 16 位。所以:

    inb %dx, %al