内联asm:'in'的操作数类型不匹配

时间:2014-11-23 18:50:25

标签: c assembly x86 att

错误:“in”

的操作数类型不匹配

生成此行的行是: inb %% eax,%% edx

我试过这个: inb %% eax,$ 0x00000064 和 inb %% eax,$ 0x64

没有改变输出。我也试过'in'而不是'inb'但是我现在正在黑暗中拍摄。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

"在的 B'/强>"表示您执行助记符命令""在大小字节(8位)的操作数上。 inw用于字(16位),inl用于长字(32位),inq用于quad(在64位机器上)。 %eax寄存器为32位,由%ax(16位)组成。 %ax寄存器又由高8位(%ah)和低8位(%al)组成。因此,如果你要使用" inb",你应该使用%al或%ah,例如,

inb %%al, %%dl # from source %%al 8-bit to destination %%dl 8-bit.

使用""使用%eax,您需要附加" l"命令(或省略字母,因为一些编译器可以推断出类型)。也就是说,

inl %%eax, %%edx

应该没问题。