c++ - GCC 扩展内联汇编 - “mov 的指令后缀无效”
问题描述
我试图了解 GCC 中的扩展内联汇编是如何工作的。但是当我尝试运行一个简单的测试程序时,我收到错误:“mov 的指令后缀无效”
示例程序:
unsigned char destination;
unsigned char ret;
unsigned int somevalue;
asm ("movb %1, %%al\n\t"
"push %1\n\t"
"pop edx\n\t"
"not %%al\n\t"
"movb %%al, %0"
: "=r" (destination), "=r"(somevalue)
: "r" (ret));
destination
应加载到al
. 之后somevalue
被推入堆栈。之后,它会在edx
寄存器中弹出。not
应执行al
包含 值的指令destination
。之后将结果发送给ret
。没有限制使用哪些寄存器来执行这个程序(我猜这意味着所有寄存器都是clobbers?)。
解决方案
推荐阅读
- c# - 有没有办法以编程方式使用任何 google 站点 api 在 google 站点中添加站点通知一次性消息?
- node.js - 保护后端 API 端点(MERN 应用程序)
- paypal - PayPal 根据使用情况向用户收费
- tcp - TCPDUMP BPF 原语和端口排除
- python - 如何将新实例初始化为*现有实例?
- sql-server - 使用 ASP 页从 SQL Server 存储过程返回数据
- python - 此代码是否会更改列表中每个元素的值?
- amazon-web-services - 在 terraform 中使用其他 tf 文件的输出
- tesseract - 训练后的tesseract结果仍然很差
- javascript - 表单提交在 django 项目(python)中不起作用