inline-assembly相关内容
在 Visual Studio 中,当我用 C 编译我的 __asm 时出现此错误.有人知道这段代码有什么问题吗?我尝试了一切,但没有任何效果.我正在尝试在汇编中实现冒泡排序. unsigned short i = 0;无符号短 j = 0;unsigned short max = short(N-2);无符号短标签[5];标签 [0] = 54;标签 [1] = 123;选项卡[2] = 34
..
我正在尝试将一些用 Visual Studio 编写的内联汇编代码移植到 MASM64 中.原代码使用了_emit,这是一条伪指令,在当前文本段的当前位置定义一个字节. 在 x64 程序集 MASM 中我将如何做同样的事情? 解决方案 你可以只使用 db,如下所示: db 10h 您最常在数据段中执行此操作,除非在 64 位版本的 MASM 中发生变化,否则它也应该在代码段中工作
..
我目前正在试验为我的库创建高度优化的、可重用的函数.例如,我用以下方式编写函数“是 2 的幂": template内联 bool is_power_of_two( const IntType x ){返回 (x != 0) &&((x & (x - 1)) == 0);} 这是一个作为内联 C++ 模板的可移植、低维护的实现.这段代码由VC++ 2008编译成以下带分支的代码: is_pow
..
以下代码在 32 位 Visual Studio C++ 中是可能的.由于 64 位版本的 Visual Studio C++ 不支持内联 ASM,因此是否有使用内在函数的 64 位等效项? FORCEINLINE bool bAtomicCAS8(volatile UINT8 *dest, UINT8 oldval, UINT8 newval){布尔结果=假;__asm{mov al,oldv
..
我正在使用 Visual C++ 2010 开发 32 位 Windows 应用程序.我真的很想使用内联汇编.但我刚刚意识到 Visual C++ 不支持 64 位应用程序中的内联汇编.所以未来移植到 64 位是个大问题. 我不知道 64 位应用程序与 32 位应用程序有何不同.未来 32 位应用程序是否有可能全部升级到 64 位?我听说 64 位 CPU 有更多的寄存器.由于我的应用程序不
..
由于似乎没有 ADC 的内在函数,而且我不能使用 Visual C++ 对 x64 体系结构使用内联汇编器,如果我想使用带进位的加法编写函数但将其包含在一个C++ 命名空间? (不能使用比较运算符进行模拟.这个 256 兆位的增加对性能至关重要.) 解决方案 有现在是 MSVC 中 ADC 的内在:_addcarry_u64.以下代码 #include #include #incl
..
我有一段 C++ 代码(在 GNU/Linux 环境下用 g++ 编译)加载一个函数指针(它是如何做的并不重要),用一些内联汇编将一些参数压入堆栈,然后调用那个函数,代码就像: unsigned long stack[] = { 1, 23, 33, 43 };/* 保存所有寄存器和堆栈指针 */无符号长 esp;asm __volatile__ ("pusha");asm __volatile
..
在 Visual Studio 中,当我用 C 编译我的 __asm 时出现此错误.有人知道这段代码有什么问题吗?我尝试了一切,但没有任何效果.我正在尝试在汇编中实现冒泡排序. unsigned short i = 0;无符号短 j = 0;unsigned short max = short(N-2);无符号短标签[5];标签 [0] = 54;标签 [1] = 123;选项卡[2] = 34
..
我正在尝试从 Android Studio 3.4.2 为 aarch64 运行一些内联汇编代码,但出现编译错误 错误:尚不知道如何处理约束 'r' 的间接寄存器输入. 我的代码片段如下 std::string system_file = "/system/bin/sh";std::int64_t file_descriptor = -1;#ifdef __aarch64____asm
..
我正在 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 处无效使用
..
在 A64 汇编程序中,有多种指定地址的方法. /*[base{,#0}] 简单寄存器(独占) - 立即偏移[base{,#imm}] 偏移 - 立即偏移[base,Xm{,LSL #imm}] 偏移量 - 寄存器偏移量[base,Wm,(S|U)XTW {#imm}] 偏移量 - 扩展寄存器偏移量[基地,#imm]!预索引 - 立即偏移[base],#imm 后索引 - 立即偏移标签 PC 相
..
对于两个整数相加,我写: int sum;asm volatile("add %0, x3, x4" : "=r"(sum) : :); 我怎样才能用两个浮点数来做到这一点?我试过了: 浮点数;asm volatile("fadd %0, s3, s4" : "=r"(sum) : :); 但它给了我一个错误: 错误:操作数 1 应该是 SIMD 向量寄存器 -- `fadd x0,
..
我有这个 C 驱动程序 #include #include extern void subs( char *string, char this_c, char that_cr ) ;int main(int argc, char *argv[] ){字符 this_c = 'e' ;char that_c = 'X' ;char orgstr[] = "Sir sid 很容易逗弄晕船的海豹";s
..
我有这个 C 驱动程序 #include #include extern void subs( char *string, char this_c, char that_cr ) ;int main(int argc, char *argv[] ){字符 this_c = 'e' ;char that_c = 'X' ;char orgstr[] = "Sir sid 很容易逗弄晕船的海豹";s
..
是否可以重写或改进此函数,使其内联汇编中不需要 volatile 或通用内存破坏? //对输入的 Foo 结构进行处理并将结果写入//输出 Bar 结构.静态内联 void MemFrob(const struct Foo* 输入,struct Bar* 输出) {注册 const Foo* r0 asm("r0") = 输入;寄存器 Bar* r1 asm("r1") = 输出;__asm__
..
是否可以重写或改进此函数,使其内联汇编中不需要 volatile 或通用内存破坏? //对输入的 Foo 结构进行处理并将结果写入//输出 Bar 结构.静态内联 void MemFrob(const struct Foo* 输入,struct Bar* 输出) {注册 const Foo* r0 asm("r0") = 输入;寄存器 Bar* r1 asm("r1") = 输出;__asm__
..
我阅读了关于 GCC 内联汇编器的文章(http://www.ethernut.de/en/documents/arm-inline-asm.html). 在本文中,“内存"Clobber 强制编译器存储所有在执行汇编程序之前缓存值并在执行汇编程序后重新加载它们指示.并且必须保留顺序. 这是一个例子.下面的代码打算将 c 与 b 相乘,其中一个或两个可以被中断程序修改.之前禁用中断访问
..
问题是在 C 函数内部我有一个内联程序集.类似的东西 ldr r7, =0xdeadbeef0 如果没有明确创建文字池(就是这种情况),汇编器在翻译单元的末尾创建一个.通常这很好,但如果结果证明翻译单元真的很大,这是行不通的,因为文字池离 ldr 指令太远了. 所以,我想知道处理这个问题的最佳方法是什么.最明显的方法是在内联程序集中手动创建文字池: ldr r7, =0xdeadb
..
我在处理一些内联汇编代码时遇到了一些麻烦.我知道应该做什么,但我想念“如何做"! 我有这个“几乎"工作的校验和函数: static unsigned long cksum_unroll( unsigned short **w, int *mlen){内里;无符号短 *w0;无符号长总和=0;len = *mlen;w0 = * w;而(长度> = 8){asm 易变的 ("ldmia %[
..
我正在研究内联汇编.我想在 Xcode 4 LLVM 3.0 Compiler 下的 iPhone 中编写一个简单的例程.我成功地编写了基本的内联汇编代码. 示例: int sub(int a, int b){国际 c;asm ("sub %0, %1, %2" : "=r" (c) : "r" (a), "r" (b));返回 c;} 我在 stackoverflow.com 上找到了
..