括号中的 g++ 内联汇编不匹配

g++ inline assembly mismatch in brackets

g++ 向我抱怨以下代码中缺少括号:

                                              1                   2 3
                                              v                   v v
__asm__ volatile("inb %1, %0" : : "=a" (result) : "Nd" (portnumber) );
                ^                      ^               ^
                1                      2               3

如您所见,括号是匹配的,并且有三个左括号和三个右括号。

另外,我正在关注 youtube 教程以获取更多信息

你在输出之前有一个额外的:,所以你在输入部分结束了你的输出声明。 以及该错误的原因:您的输入操作数声明,其中编译器需要 clobber 列表。 clobber 列表只能包含字符串文字(寄存器名称和 "memory" and/or "cc"1), 不是().

    __asm__ volatile("inb %1, %0" 
            : "=a" (result)       // output
            : "Nd" (portnumber)   // input
          //  : "memory"   // optional, clobber list
     );

您可能需要一个 "memory" 破坏列表来确保这是有序的。内存访问。或者不是,如果你确定它不需要。

脚注 1:x86 上的 asm 语句隐式破坏了条件代码,"cc"。如果愿意,您可以将其用于文档。但是你不希望它出现在这里,因为 inb 没有触及 EFLAGS。