inline-assembly相关内容

错误 C2432 对 __asm 的“第二个操作数"中 16 位数据的非法引用

在 Visual Studio 中,当我用 C 编译我的 __asm 时出现此错误.有人知道这段代码有什么问题吗?我尝试了一切,但没有任何效果.我正在尝试在汇编中实现冒泡排序. unsigned short i = 0;无符号短 j = 0;unsigned short max = short(N-2);无符号短标签[5];标签 [0] = 54;标签 [1] = 123;选项卡[2] = 34 ..
发布时间:2021-11-26 14:17:59 其他开发

MASM 中 _emit 的等价物是什么

我正在尝试将一些用 Visual Studio 编写的内联汇编代码移植到 MASM64 中.原代码使用了_emit,这是一条伪指令,在当前文本段的当前位置定义一个字节. 在 x64 程序集 MASM 中我将如何做同样的事情? 解决方案 你可以只使用 db,如下所示: db 10h 您最常在数据段中执行此操作,除非在 64 位版本的 MASM 中发生变化,否则它也应该在代码段中工作 ..
发布时间:2021-11-25 07:15:36 C#

“自定义内在"x64 的函数而不是内联汇编可能吗?

我目前正在试验为我的库创建高度优化的、可重用的函数.例如,我用以下方式编写函数“是 2 的幂": template内联 bool is_power_of_two( const IntType x ){返回 (x != 0) &&((x & (x - 1)) == 0);} 这是一个作为内联 C++ 模板的可移植、低维护的实现.这段代码由VC++ 2008编译成以下带分支的代码: is_pow ..
发布时间:2021-11-25 06:43:35 C/C++开发

64 位应用程序和内联汇编

我正在使用 Visual C++ 2010 开发 32 位 Windows 应用程序.我真的很想使用内联汇编.但我刚刚意识到 Visual C++ 不支持 64 位应用程序中的内联汇编.所以未来移植到 64 位是个大问题. 我不知道 64 位应用程序与 32 位应用程序有何不同.未来 32 位应用程序是否有可能全部升级到 64 位?我听说 64 位 CPU 有更多的寄存器.由于我的应用程序不 ..
发布时间:2021-11-25 05:28:27 C/C++开发

Visual C++ x64 加进位

由于似乎没有 ADC 的内在函数,而且我不能使用 Visual C++ 对 x64 体系结构使用内联汇编器,如果我想使用带进位的加法编写函数但将其包含在一个C++ 命名空间? (不能使用比较运算符进行模拟.这个 256 兆位的增加对性能至关重要.) 解决方案 有现在是 MSVC 中 ADC 的内在:_addcarry_u64.以下代码 #include #include #incl ..
发布时间:2021-11-25 05:15:33 C/C++开发

32 位到 64 位内联汇编移植

我有一段 C++ 代码(在 GNU/Linux 环境下用 g++ 编译)加载一个函数指针(它是如何做的并不重要),用一些内联汇编将一些参数压入堆栈,然后调用那个函数,代码就像: unsigned long stack[] = { 1, 23, 33, 43 };/* 保存所有寄存器和堆栈指针 */无符号长 esp;asm __volatile__ ("pusha");asm __volatile ..
发布时间:2021-11-25 00:11:41 C/C++开发

错误 C2432 对 __asm 的“第二个操作数"中 16 位数据的非法引用

在 Visual Studio 中,当我用 C 编译我的 __asm 时出现此错误.有人知道这段代码有什么问题吗?我尝试了一切,但没有任何效果.我正在尝试在汇编中实现冒泡排序. unsigned short i = 0;无符号短 j = 0;unsigned short max = short(N-2);无符号短标签[5];标签 [0] = 54;标签 [1] = 123;选项卡[2] = 34 ..
发布时间:2021-11-24 23:02:57 C#

错误:在操作数 1 处无效使用向量寄存器

我正在 64 位 Aarch64 设备上的 ARM 下学习 GCC 内联汇编器.我看到一条我不太明白的错误消息.GCC 内联汇编器中的错误消息: $ gcc -DNDEBUG -g3 -O1 -march=armv8-a+crc+crypto test.cc -o test.exe/tmp/ccCHOWrn.s:汇编程序消息:/tmp/ccCHOWrn.s:19: 错误:在操作数 1 处无效使用 ..
发布时间:2021-11-17 22:47:39 其他开发

内联汇编中的内存偏移

在 A64 汇编程序中,有多种指定地址的方法. /*[base{,#0}] 简单寄存器(独占) - 立即偏移[base{,#imm}] 偏移 - 立即偏移[base,Xm{,LSL #imm}] 偏移量 - 寄存器偏移量[base,Wm,(S|U)XTW {#imm}] 偏移量 - 扩展寄存器偏移量[基地,#imm]!预索引 - 立即偏移[base],#imm 后索引 - 立即偏移标签 PC 相 ..
发布时间:2021-11-17 22:46:51 其他开发

ARMv8 浮点输出内联汇编

对于两个整数相加,我写: int sum;asm volatile("add %0, x3, x4" : "=r"(sum) : :); 我怎样才能用两个浮点数来做到这一点?我试过了: 浮点数;asm volatile("fadd %0, s3, s4" : "=r"(sum) : :); 但它给了我一个错误: 错误:操作数 1 应该是 SIMD 向量寄存器 -- `fadd x0, ..
发布时间:2021-11-17 22:44:41 其他开发

重写 GCC 内联程序集以不需要易失性或内存破坏

是否可以重写或改进此函数,使其内联汇编中不需要 volatile 或通用内存破坏? //对输入的 Foo 结构进行处理并将结果写入//输出 Bar 结构.静态内联 void MemFrob(const struct Foo* 输入,struct Bar* 输出) {注册 const Foo* r0 asm("r0") = 输入;寄存器 Bar* r1 asm("r1") = 输出;__asm__ ..
发布时间:2021-11-17 22:33:05 其他开发

重写 GCC 内联程序集以不需要易失性或内存破坏

是否可以重写或改进此函数,使其内联汇编中不需要 volatile 或通用内存破坏? //对输入的 Foo 结构进行处理并将结果写入//输出 Bar 结构.静态内联 void MemFrob(const struct Foo* 输入,struct Bar* 输出) {注册 const Foo* r0 asm("r0") = 输入;寄存器 Bar* r1 asm("r1") = 输出;__asm__ ..
发布时间:2021-11-17 22:31:51 其他开发

GCC内联汇编器“内存"Clobber 不会阻止重新排列 ARM 中的代码

我阅读了关于 GCC 内联汇编器的文章(http://www.ethernut.de/en/documents/arm-inline-asm.html). 在本文中,“内存"Clobber 强制编译器存储所有在执行汇编程序之前缓存值并在执行汇编程序后重新加载它们指示.并且必须保留顺序. 这是一个例子.下面的代码打算将 c 与 b 相乘,其中一个或两个可以被中断程序修改.之前禁用中断访问 ..
发布时间:2021-11-17 22:30:31 其他开发

为内联汇编创建常量池的正确方法是什么?

问题是在 C 函数内部我有一个内联程序集.类似的东西 ldr r7, =0xdeadbeef0 如果没有明确创建文字池(就是这种情况),汇编器在翻译单元的末尾创建一个.通常这很好,但如果结果证明翻译单元真的很大,这是行不通的,因为文字池离 ldr 指令太远了. 所以,我想知道处理这个问题的最佳方法是什么.最明显的方法是在内联程序集中手动创建文字池: ldr r7, =0xdeadb ..
发布时间:2021-11-17 22:26:30 其他开发

gcc 中的 arm 内联汇编

我在处理一些内联汇编代码时遇到了一些麻烦.我知道应该做什么,但我想念“如何做"! 我有这个“几乎"工作的校验和函数: static unsigned long cksum_unroll( unsigned short **w, int *mlen){内里;无符号短 *w0;无符号长总和=0;len = *mlen;w0 = * w;而(长度> = 8){asm 易变的 ("ldmia %[ ..
发布时间:2021-11-17 22:14:30 其他开发