首页 文章
  • 0 votes
     answers
     views

    将C代码转换为x86-64程序集

    我正在尝试将我的C代码转换为x86-64 . 我的目标是扭转链表 . 传入的两个参数是head ptr和偏移量,以获得指针字段的地址(即指向列表中下一个节点的指针) . 根据我的理解,head ptr通过rdi寄存器传入,偏移量通过rsi寄存器传入 . 当它到达“mov rcx,[rbx]”这一行时,我一直遇到分段错误 . 当它只是“mov rcx,rbx”并且后面的行从“mov [rbx],rd...
  • 0 votes
     answers
     views

    `vmovaps'的分段错误

    我编写了一个代码,用于在Xeon Phi intel协处理器上使用带有(512位长向量)的KNC指令添加两个数组 . 但是我在内联装配部分有分段部分 . 这是我的代码: int main(int argc, char* argv[]) { int i; const int length = 65536; const int AVXLength = length / 16; ...
  • 1 votes
     answers
     views

    恢复堆栈会导致访问冲突

    我使用ASM写的基本上相当于memset() . 我写的代码有效,除了当我尝试恢复堆栈时,它会因访问冲突而崩溃 . 我已使用内联汇编将代码放入MSVC,因此我可以对其进行调试 . 函数返回时发生此问题 . 但是,当我取出 add esp, 4 行时,代码正确执行,但在main()函数返回后,MSVC表示变量周围的堆栈已损坏 . 我不愿意继续没有 add esp, 4 因为我知道这会在以后引起问题 ...
  • 5 votes
     answers
     views

    在内联汇编的多个替代操作数约束之间进行选择时,GCC可以发出不同的指令助记符吗?

    我正在尝试为GCC编写内联x86-64程序集以有效地使用MULQ指令 . MULQ将64位寄存器RAX与另一个64位值相乘 . 另一个值可以是任何64位寄存器(甚至是RAX)或内存中的值 . MULQ将产品的高64位放入RDX,将低64位放入RAX . 现在,很容易表达一个正确的mulq作为内联汇编: #include <stdint.h> static inline void m...
  • 0 votes
     answers
     views

    大会,没有这样的指令popl?

    我在C中有一个代码,其中主要是用汇编语言编写的 . 程序的想法是例如当x = abc def,并且y = a时,它删除至少一个字母相同的单词并且写出没有相同字母的单词,因此它将写入def . 我有一个代码,但它给出了如下错误: prog.c:10:错误:没有这样的指令:`addl $ 112,%esp' prog.c:12:错误:没有这样的指令:`xorl%eax,%eax' prog...
  • 7 votes
     answers
     views

    在LLVM中调用fsincos指令比调用libc sin / cos函数要慢吗?

    我正在研究用LLVM编译的语言 . 只是为了好玩,我想做一些微基准测试 . 其中一个,我在一个循环中运行了一百万个sin / cos计算 . 在伪代码中,它看起来像这样: var x: Double = 0.0 for (i <- 0 to 100 000 000) x = sin(x)^2 + cos(x)^2 return x.toInteger 如果我使用以下形式使用LLVM I...
  • 1 votes
     answers
     views

    在XeonPhi上使用AVX内联汇编的矢量和

    我是新手使用XeonPhi Intel协处理器 . 我想使用AVX 512位指令为简单的矢量和编写代码 . 我使用k1om-mpss-linux-gcc作为编译器,并希望编写内联汇编 . 这是我的代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/time...
  • 4 votes
     answers
     views

    无效'asm':嵌套程序集方言替代方案

    我正在尝试使用 k1om-mpss-linux-gcc 编译器为Xeon Phi平台编写一些带有KNC指令的内联汇编代码 . 我想在我的代码中使用掩码寄存器来向量化我的计算 . 这是我的代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/time.h&gt...
  • 5 votes
     answers
     views

    掩码矢量Intel AVX-512指令的汇编语法

    出于测试目的,我正在使用Icc内联汇编程序为Intel的Xeon Phi编写简短的汇编代码段 . 现在我想使用屏蔽向量指令,但是我无法将它们提供给内联汇编程序 . 对于这样的代码: vmovapd -64(%%r14, %%r10), %%zmm0{%%k1} 我收到错误消息 /tmp/icpc5115IWas_.s: Assembler messages: /tmp/icpc5115IWas...
  • 0 votes
     answers
     views

    GCC使用asm块错误地内联函数

    在将代码从Watcom移植到GCC的过程中,我注意到错误生成的函数,并且无法弄清楚它为什么会发生 . 这是最小的例子: #include <stdio.h> bool InstallExceptionHandler(int exceptionNo, void (*handler)()) { bool result; asm volatile ( &qu...
  • 3 votes
     answers
     views

    在平面二进制文件中包含char数组的内容

    我使用平面二进制文件作为我的操作系统的外部程序 . 当我编译它们时,如下: gcc -Wall ctest.c -o ctest.bin -nostdlib -Wl,-Ttext=0x8000,-nostdlib -masm=intel objcopy -O binary -j .text ctest.bin ctest 但是这样做,字符数组的内容不会放在文件中 . 这是我的代码: static...
  • 6 votes
     answers
     views

    GNU内联汇编优化

    我正在尝试为高度优化的x86-64位操作代码编写一个小型库,并且正在摆弄内联asm . 在测试这个特殊情况时引起了我的注意: unsigned long test = 0; unsigned long bsr; // bit test and set 39th bit __asm__ ("btsq\t%1, %0 " : "+rm" (test) : &q...

热门问题