错误:无效的“asm”:在 GCC 中使用内联汇编时,% 字母后缺少操作数编号

2023-11-25

我正在尝试将 MS 的简单汇编代码转换为与 gcc 一起使用,我尝试转换的 MS 汇编代码就在下面。我有两个int变量,number and _return:

mov eax, number
neg eax
return, eax

而且,我已经尝试过这个:

asm("movl %eax, %0" :: "g" ( number));
asm("neg %eax");
asm("movl %0, %%eax" : "=g" ( return ));

但是,编译器给了我这个错误:

main.c:17:9: 错误:'asm' 无效:% 字母后缺少操作数

错误在哪里,以及如何修复此错误? 谢谢


你不能这样做,因为你在不告诉编译器的情况下覆盖了寄存器。另外,%是一个特殊字符,类似于printf。

最好将所有说明放在一个中asm否则编译器might中间做一些意想不到的事情。

试试这个:

asm("movl %%eax, %1\n\t"
    "neg %%eax\n\t"
    "movl %0, %%eax" : "=g" ( _return )  : "g" ( number) : "eax");

不过,可能有更好的方法:

asm("neg %0": "=a" ( _return )  : "a" ( number));

我不知道为什么你不能这样做(用 C 语言):

_return = -number;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

错误:无效的“asm”:在 GCC 中使用内联汇编时,% 字母后缺少操作数编号 的相关文章

  • 在 x86 程序集中存储大量布尔值的最佳方法是什么?

    最近我一直在处理充满布尔值的大型数组 目前 我将它们存储在 bss部分有一个 space指令 它允许我创建字节数组 但是 由于我只需要存储布尔值 因此我希望从数组中逐位读取和写入数据 目前 我能想到的最好方法是有一个 space指令所需存储
  • 在 x86 汇编中将 64 位常量移至内存

    我正在使用 Intel x64 程序集 NASM 编译器 尝试将 0x4000000000000000 常量移至内存 该常量在 ieee 754 标准双精度中应等于 2 0 我正在使用的代码是 define two 0x4000000000
  • 为什么是 ”\?” C/C++ 中的转义序列?

    C C 中有四种特殊的非字母字符需要转义 单引号 双引号 反斜杠 和问号 显然是因为它们有特殊的含义 对于单身char 对于字符串文字 对于转义序列 但为什么是 其中之一 我今天读了教科书上的转义序列表 我意识到我已经never逃脱了 以前
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 为什么 Linux perf 使用事件 l1d.replacement 来处理 x86 上的“L1 dcache misses”?

    在英特尔 x86 上 Linux用途 https stackoverflow com a 52172985 149138事件l1d replacements来实施其L1 dcache load misses event 该事件定义如下 计数
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • gcc 与 clang:符号剥离

    gcc 和 AMD Open64 opencc 都有一个 s选项 剥离符号表和重定位信息 到目前为止我还没能在 Clang LLVM 中找到相同的选项 它存在吗 您可以使用stripbinutils 中的实用程序 实际上 llvm ld 有
  • 为什么 gcc 链接时没有 lpthread 标志?

    我当时正在做一个业余爱好项目 其中互斥体的行为很神秘 我将其归结为这个显然应该陷入僵局的测试用例 include
  • movzbl(%rdi, %rcx, 1), %ecx 在 x86-64 汇编中意味着什么?

    我想我明白 movzbl rdi rcx 1 ecx 意思是 将零扩展字节移至长整型 并表示将 ecx 扩展为 32 位 但我不完全确定语法 rdi rcx 1 指的是什么 我在某处看到该语法指的是 Base Index Scale 但我找
  • 链接器问题 - 未定义的引用

    我的编译器有问题 告诉我有一个 未定义的引用 我想在库中使用的函数 让我分享一些有关该问题的信息 我正在用 gcc 交叉编译 C 语言 我正在调用一个库函数 该函数通过包含的标头访问 其中包含另一个标头 其中包含原型 我已经使用 I 包含了
  • CISC 机器 - 它们不只是将复杂指令转换为 RISC 吗?

    也许我在架构上存在误解 但如果机器有 比如说 乘法指令 该指令是否未转换为更小的指令 或者过于复杂以至于最终与等效的 RISC 指令具有相同的速度 乘法是一个不好的例子 它在两种体系结构中都是一条指令 将上面的 乘法 替换为 CISC 中更
  • Core i3/5/7 CPU 是否提供测量 IPC 的机制?

    至少 过去十年中的所有英特尔 CPU 都包含一组对各种事件进行计数的性能监视器 最新的 Intel CPU Core i3 i5 和 i7 又名 Nehalem 是否提供了计算每时钟指令 IPC 的机制 如果有 它们是如何使用的 如果可能的
  • constexpr lambda / ‘x’ 不命名类型;您指的是“x”吗?

    我正在尝试使用 C 17 的 constexpr lambda 来获取编译时字符串 include
  • PAE(物理地址扩展)如何实现大于4GB的地址空间?

    维基百科文章的摘录物理地址扩展 http en wikipedia org wiki Physical Address Extension x86 处理器硬件架构通过用于选择附加内存的附加地址线进行了增强 因此物理地址大小从 32 位增加到
  • 如何使用 MSYS2 获取旧版本的软件包?

    我决定尝试 CLion for Windows 它推荐使用 MinGW 或 Cygwin 进行编译 我安装了MSYS2 http sourceforge net p msys2 wiki MSYS2 20installation 包管理器进
  • Windows 上 libcurl 的静态库[重复]

    这个问题在这里已经有答案了 如何将此库 libcurl 静态链接到 exe 我努力了 disable share enable static 没有帮助 我使用的是MingW32 有没有一种简单的方法来静态链接这个库 这样我的应用程序就不再有
  • 将 C 代码转换为 x86-64 汇编

    我正在尝试将 C 代码转换为 x86 64 我的目标是反转链表 传入的两个参数是 head ptr 和 offset to 以获取指针字段的地址 即指向列表中下一个节点的指针 据我了解 head ptr是通过rdi寄存器传入的 offset
  • IDA pro asm 指令更改

    我只是想知道我怎样才能 更改IDA视图A中的asm指令 如何编辑指令 对于 实例 jnz 到 jmp 如何插入新指令 call func1 调用 func2 插入到现有的 代码 我知道如何制作 diff 文件 我知道如何在我的 DLL 上应
  • 如何在WinMobile6上启用ARMv6非对齐访问?

    ARMv6 引入了一个很棒的功能 未对齐的内存访问 这使得代码中的某些事情变得更加简单和更快 但微软只在winCE6中提供了API 现在大多数 PDA 都基于 WinMobile6 基于 CE 5 x 默认情况下禁用未对齐访问 我尝试在 C

随机推荐

  • n 级可扩展列表视图

    如何显示n级可扩展列表视图android 我只得到3级可扩展的示例 参考这个 link 请指导或分享我在android中多级可扩展显示的合适示例 Thanks 根据这个example public View getChildView int
  • valgrind memcheck 是否支持检查 mmap

    我正在尝试 valgrind 来检测内存泄漏 它在堆泄漏 即从 malloc 或 new 分配内存 方面效果很好 但是 它支持检查 Linux 中的 mmap 泄漏吗 谢谢 张 不直接 很难调试 看看valgrind h VALGRIND
  • 更改为 Android SDK 26 后工具栏中的图标被压扁

    将我的应用程序从编译 定位 SDK v25 更改为 SDK v26 后 我的应用程序工具栏中的所有菜单图标现在都被压扁 压扁 拉伸 这是相关的布局代码
  • Postgres 会将 WHERE 子句下推到带有窗口函数(聚合)的 VIEW 中吗?

    的文档Pg的窗口函数说 窗口函数考虑的行是查询的 FROM 子句生成的 虚拟表 的行 并通过其 WHERE GROUP BY 和 HAVING 子句 如果有 进行过滤 例如 由于不满足 WHERE 条件而被删除的行不会被任何窗口函数看到 查
  • 如何在 Swift 中使用 MarqueeLabel?

    我想知道是否有一种方法可以启用文本的水平滚动 即选取框类型的文本 我用过这个库 https github com cbpowell MarqueeLabel并将 MarqueeLabel Swift 文件添加到我的应用程序中 但到目前为止
  • 无法在 Visual Studio 项目属性中选择 .NET Framework 4.6.1

    我使用以下网址安装了 NET Framework 4 6 1 http www microsoft com en us download details aspx id 49981 但是当我打开 Visual Studio 2015 项目时
  • 如何更改 MonthCalendar 控件中某些日期的颜色?

    如何更改 VB NET 中 MonthCalendar 控件中某些日期的颜色 例如 我需要将 1 月 21 日的颜色更改为红色 星期日更改为橙色等等 这不可能 没有内置的方法可以自定义各个日期或日期在屏幕上的显示方式MonthCalenda
  • 对于高度优化的矩阵乘法代码,MSVC 和 GCC 之间的性能差异

    我发现 Ivy Bridge 系统的 MSVC 在 Windows 上 和 GCC 在 Linux 上 编译的代码在性能上存在很大差异 该代码执行密集矩阵乘法 我在 GCC 中得到了 70 的峰值失败率 而在 MSVC 中只有 50 我想我
  • iOS Safari/Chrome 中的 Cookie 持久性

    当我关闭并重新打开 iOS Safari 和 Chrome 上的浏览器时 我的持久 cookie 将被删除 我使用的是 iOS 11 但也在 iOS10 9 上进行了测试 Cookie 在 Android 和桌面上正确保留 奇怪的是 它在
  • 使用 C# 的媒体基础

    媒体基金会是微软推荐的技术 它确实通过大量示例和解释来支持它 但全部都是本机代码 我发现了一个包装纸来源锻造让我能够将 Media Foundation 与 C 一起使用 但当我阅读人们谈论的内容时 并非所有事情都可以通过托管代码完成 我有
  • 网络参考和服务参考之间的区别?

    WCF 中的 Web 引用和服务引用有什么区别 WCF 中哪一个更可取 这里的低级答案是 Web 引用将创建一个客户端代理类 该类允许您的代码与通过 WSDL 描述的 Web 服务对话 并通过 SOAP 或 HTTP GET 进行通信 其他
  • Docker 更改活动容器上的已发布端口

    例如 我想更改活动容器上已发布的端口 docker run p 80 80 name nginx live nginx 然后稍后将其更改为另一个端口 例如 p 8080 80 Docker 没有一种机制可以在容器启动后更改其已发布的端口 当
  • 如何在 Objective-C 中将字符串中的英文数字转换为波斯语/阿拉伯语数字?

    我有一个英文字符串 可能有数字 也可能没有数字 但我希望这些数字作为波斯数字打印在屏幕上 例如如果NSString foo a string with numbers 1 2 3 那么输出应该是a string with numbers 我
  • 在加载数据之前显示 Ajax 加载器

    你好 朋友们 我想在数据加载之前显示 Ajax 加载器 特别是 div 但问题是数据是动态地出现在同一页面上 但我的脚本从另一个文件调用数据Script php请看下面我的代码 Script
  • GitHub for Mac 同步删除了我未提交的更改

    我在 Mac OS X 10 10 上使用 GitHub for Mac 版本 210 点击 同步 按钮删除了我未提交的更改 这种事应该时常发生吗 直到那时我才遇到过这个问题 尽管我主要使用 Windows 版的 Github 我认为如果我
  • PHP:Laravel 如何急切加载 find 方法

    我有一个模型Users其中有很多Pages 我想急切加载下面的方法 以便它只返回一个用户并立即加载所有页面 我该怎么做 user User find 1 pages user gt pages foreach pages as page v
  • “无法确定要运行哪个“make”命令。检查构建配置中的“make”步骤。” Qt创建者

    我安装了好几次 qt Creator 但它的花费从来没有像我现在的电脑那么高 首先 我使用了 Pendrive 上一直有的安装程序 Qt 5 8 的安装程序 告诉我无法下载某些存储库 我下载了同一安装程序的 5 9 版本 结果相同 在尝试安
  • 未找到 OpenCV 非托管 DLL asp.net

    我们正在构建一个 Web 应用程序 C NET 它使用 Emgu opencv 包装器形式的非托管库 我们强制构建为 32 位 x86 并且我们使用 Emgu 的 32 位版本 所有这些在本地构建上都运行良好 但是当发布到我们的网络服务器时
  • 使用 C++ 和 Windows API 以编程方式更改壁纸

    我一直在尝试使用 Qt 和 mingw32 编写一个应用程序来下载图像并将其设置为背景壁纸 我在网上阅读了几篇关于如何在 VB 和 C 中执行此操作的文章 以及在某种程度上如何在 C 中执行此操作 我目前正在致电SystemParamete
  • 错误:无效的“asm”:在 GCC 中使用内联汇编时,% 字母后缺少操作数编号

    我正在尝试将 MS 的简单汇编代码转换为与 gcc 一起使用 我尝试转换的 MS 汇编代码就在下面 我有两个int变量 number and return mov eax number neg eax return eax 而且 我已经尝试