c++ - 括号中的g ++内联汇编不匹配
问题描述
g++ 向我抱怨以下代码中缺少括号:
1 2 3
v v v
__asm__ volatile("inb %1, %0" : : "=a" (result) : "Nd" (portnumber) );
^ ^ ^
1 2 3
如您所见,括号是匹配的,并且有三个左括号和三个右括号。
还有更多信息,我正在关注一个 youtube 教程
解决方案
:
你在 output 之前有一个额外的,所以你最终在输入部分得到了你的输出声明。 以及该错误的原因:编译器需要clobber列表的输入操作数声明。 clobber 列表只能包含字符串文字(寄存器名称"memory"
和/或"cc"
1),不能包含()
.
__asm__ volatile("inb %1, %0"
: "=a" (result) // output
: "Nd" (portnumber) // input
// : "memory" // optional, clobber list
);
您可能需要一个"memory"
clobber 列表来确保这是按 wrt 排序的。内存访问。或者不是,如果你确定它不需要。
脚注 1:x86 上的 asm 语句隐式破坏了条件代码,"cc"
. 如果您愿意,可以将其用于文档。但是您不希望它在这里,因为inb
它不会触及 EFLAGS。
推荐阅读
- javascript - return 语句是否返回匿名对象?
- java - 使用流和原始类型进行 Java 类型推断
- php - Symfony 自定义身份验证提供程序在请求重叠时注销
- javascript - 使用 Graphql 并做出反应,我无法从默认导出访问功能
- string - 你可以用字符串替换一些东西吗?
- scala - 队列的两种实现中速度差异的解释
- c - C链表removeLast使用指针
- javascript - 这是 url 编码的正确方法/此服务器是否正确处理解码?
- java - BufferedReader readLine 未使用 HttpURLConnection 到达流的末尾
- python - 从 csv 列中提取最常见的组合