括号中的 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。
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。