inline-assembly相关内容

为什么我们需要在内联汇编中删除寄存器列表?

我的导游手册上写着: 在内联汇编中,已清除的寄存器列表用于告知 我们正在使用的寄存器的编译器(这样它就可以在 那个)。 我完全不明白,为什么编译器要知道这个?让这些登记簿保持原样有什么问题?他们是否打算在汇编代码后备份和还原它们。 希望有人能提供一个例子,因为我花了几个小时阅读有关损坏的寄存器列表,但没有明确的答案。 推荐答案 未能告知编译器您所修改的寄存器的问题与您 ..
发布时间:2022-06-23 17:35:04 其他开发

标签地址 (MSVC)

我们正在为高级编译语言编写字节码,经过一些分析和优化,很明显当前最大的性能开销是我们用来跳转到字节的 switch 语句-代码案例. 我们调查了提取每个案例标签的地址并将其存储在字节码流本身中,而不是我们通常打开的指令 ID.如果这样做,我们可以跳过跳转表,直接跳转到当前执行指令的代码位置.这在 GCC 中非常有效,但是,MSVC 似乎不支持这样的功能. 我们尝试使用内联汇编来获取标签 ..
发布时间:2022-01-25 22:07:17 C/C++开发

gcc,内联汇编 - 缺少 pushad/popad?

有什么方法可以避免将 pushad/poppad 指令体复制粘贴到我的代码中? 因为 gcc (current flags: -Wall -m32) 抱怨 __asm__("pushad;"); 错误:没有这样的指令:`pushad' __asm__("poppad;"); 错误:没有这样的指令:`poppad' 解决方案 GCC 使用 AT/T 汇编语法,而 pushad/ ..
发布时间:2022-01-22 12:40:56 其他开发

在 GNU 的 C++ 代码中使用 C 头文件.包括内联汇编的错误:“asm"中的不可能约束

我有一个奇怪的.我正在使用供应商的头文件开发嵌入式系统.我正在使用 GCC 4.6.3 编译文件.我想在我的代码中使用 C++,我有错误我无法弄清楚.我正在运行一个供应商示例程序,我所做的只是将 main.c 文件的名称更改为 main.cpp.因此,我假设 C++ 编译器正在解释头文件.其中之一包含以下几行: __attribute__((naked)) 静态 return_type 签名 \ ..
发布时间:2022-01-17 14:19:17 C/C++开发

ARM inline asm:退出系统调用并从内存中读取值

问题 我想在 Linux Android 设备上使用内联汇编在 ARM 中执行退出系统调用,并且我希望从内存中的某个位置读取退出值. 示例 如果不提供这个额外的参数,调用的宏如下所示: #define ASM_EXIT() __asm__("mov %r0, #1\n\t"\“mov %r7, #1\n\t"\“swi #0") 这很好用.为了接受一个论点,我将其调整为: ..
发布时间:2022-01-17 14:14:59 服务器开发

ARM 程序集:重新加载“asm"时在“GENERAL_REGS"类中找不到寄存器

我正在尝试在 ARM Cortex-a8 上的 ARM 程序集中实现一个将 32 位操作数与 256 位操作数相乘的函数.问题是我的寄存器用完了,我不知道如何减少这里使用的寄存器的数量.这是我的功能: typedef struct UN_256fe{uint32_t uint32[8];}UN_256fe;typedef 结构 UN_288bite{uint32_t uint32[9];}UN_ ..
发布时间:2022-01-17 14:13:44 其他开发

ARM 内联汇编中的指令 mrc p15 有什么作用?

ARM 汇编中的这一行是做什么的? mrc p15, 0, %0, c9, c13, 0":: “r"(柜台) 什么是p15?通常寄存器以 r 为前缀,例如 r15. 符号::是什么,角色或c9,c1是什么? 解决方案 虽然 MRC 是通用协处理器互操作指令,但 cp15 是 控制处理器 - 所有现代 ARM CPU 都有,ARM 已经使用它来扩展片上单元的指令集,例如缓存、MM ..
发布时间:2022-01-17 13:55:32 其他开发

ARM和NEON可以并行工作吗?

这是参考问题:内部 Neon 的校验和代码实现 打开链接中列出的子问题作为单独的问题.由于多个问题不能作为单线程的一部分提出. 不管怎样,问题来了: ARM 和 NEON(就 arm cortex-a8 架构而言)真的可以并行工作吗?我怎样才能做到这一点? 有人可以指点我或分享一些示例实现(伪代码/算法/代码,而不是理论实现论文或演讲),它们一起使用了 ARM-NEON 的 ..
发布时间:2022-01-17 13:38:24 其他开发

通过将 float 放入 int 变量进行内联 ASM 舍入的优点

我继承了一段非常有趣的代码: inline int round(float a){国际我;__asm {一个拳头我}返回我;} 我的第一个冲动是丢弃它并用 (int)std::round 替换调用(在 C++11 之前,将使用 std::lround 如果它发生在今天),但过了一段时间我开始怀疑它到底是否有一些优点...... 此函数的用例都是 [-100, 100] 中的所有值,因此即 ..
发布时间:2022-01-07 11:41:37 其他开发

这个汇编函数调用安全/完整吗?

我没有组装经验,但这是我一直在研究的.如果我缺少传递参数和通过汇编中的指针调用函数的任何基本方面,我想要输入. 例如我想知道我是否应该恢复ecx、edx、esi、edi.我读到它们是通用寄存器,但我找不到它们是否需要恢复?打电话后我应该做些什么清理工作? 这是我现在拥有的代码,它确实有效: #include "stdio.h"void foo(int a, int b, int c, ..
发布时间:2022-01-06 13:08:39 其他开发

如何从程序访问控制寄存器 cr0,cr2,cr3?获取分段错误

我编写了一个程序,试图读取和写入控制寄存器. 程序编译正常,但是当内联汇编即将执行时,它产生了一个分段错误. 代码: void 指令(int val){国际我;整数值;for(i = 0; i 我使用 GDB 并通过每条装配线,在 mov %cr0,%eax 上发生了分段错误. 谁知道哪里出了问题? 解决方案 引用自 英特尔® 64 和 IA-32 架构软件开发人员 ..
发布时间:2022-01-06 13:01:43 其他开发

破坏红色区域的内联程序集

我正在编写一个加密程序,核心(一个宽乘法例程)是用 x86-64 汇编编写的,既是为了速度,也是因为它广泛使用了像 adc 这样不容易的指令可以从 C 访问.我不想内联这个函数,因为它很大并且在内循环中被调用了几次. 理想情况下,我还想为此函数定义自定义调用约定,因为它在内部使用所有寄存器(rsp 除外),不会破坏其参数,并在寄存器中返回.目前,它已适应 C 调用约定,但这当然会使其变慢(大 ..
发布时间:2022-01-06 12:54:36 其他开发

在内联 GNU 汇编器中获取字符串长度

我正在重新学习我在非常旧的 MS-DOS 机器上使用的汇编程序!!! 这是我对这个函数应该是什么样子的理解.当尝试将 0xffffffff 放入 ecx 时,它编译但因 SIGSEGV 而崩溃. 代码在具有 32 位 Debian 9 的 VM 中运行.任何帮助将不胜感激. int getStringLength(const char *pStr){int len = 0;字符 * ..
发布时间:2022-01-06 12:50:15 服务器开发

__asm{} 吗?返回 eax 的值?

简单的问题.C 中的函数 asm 用于在代码中进行内联汇编.但它返回什么?是传统的eax,如果不是,它返回什么? 解决方案 __asm__ 本身不返回值.C 标准没有定义 __asm__ 应该如何处理返回值,因此编译器之间的行为可能不同.您声明 Visual Studio 示例有效,但 Visual Studio 使用 __asm.__asm__ 至少被 GCC 使用. 视觉工作室 ..
发布时间:2021-12-22 18:55:26 其他开发

带有字符串变量指令的 C/C++ 内联汇编器

正如您在 C 和 C++ 中所知道的,如果使用 Visual-C,您可以使用内嵌汇编指令,例如: int main() {printf("你好\n");__asm int 3printf("这不会被打印出来.\n");返回0;} 这将在可执行文件中创建一个断点.所以我的问题是,是否有某种函数可以使用诸如 char 数组之类的变量来调用 __asm .我在想这样的事情: char 指令[100 ..
发布时间:2021-12-22 18:36:39 C/C++开发