inline-assembly

    0热度

    3回答

    我在Ç程序中定义的以下宏: #define ISE1 "cust_add" #define ISE2 "cust_sub" #define ise_inst(inst, a, b, c) \ asm volatile ( " " inst " %1, %2, %0 \n\t" \ : "=r" (c) \ : "r" (a), "r" (b) \ : "%g0" \ ) 在

    1热度

    3回答

    我有一个asm循环,保证不会超过128次迭代,我希望通过PC相对跳转来展开。这个想法是以相反的顺序展开每个迭代,然后跳转到需要的循环中。代码看起来像这样: #define __mul(i) \ "movq -"#i"(%3,%5,8),%%rax;" \ "mulq "#i"(%4,%6,8);" \ "addq %%rax,%0;" \ "adcq %%r

    2热度

    2回答

    这是原来的代码进行编译: #define CPU_PREFETCH(cache_line) \ { int* address = (int*) (cache_line); \ _asm mov edx, address \ _asm prefetcht0[edx] \ } #define CPU_GET_CYCLES(low) \ {

    4热度

    2回答

    我一直在浏览这里和互联网上的问题一段时间了,我似乎无法找出是否有可能在内联使用GCC以外的东西组装GCC。我试图找出是否可以避免使用GAS的AT & T语法(尽管我知道如何在GAS中使用英特尔语法)但扩展的asm格式。虽然这不是一个项目或任何非我自己的好奇心,但我真的很感激我能得到的任何帮助(这实际上是我的第一个问题,因为我找不到有关它的答案)!另外,如果这有什么不同,我目前在Windows上使用

    0热度

    1回答

    这是我在VC++项目中插入的一个简单的asm代码。 return_addr是堆栈帧的返回地址。我有一个StackWalk函数(不是我写的codeproject.com/KB/threads/StackWalker.aspx),它使用StackWalk64()来提取帧。这个细节不相关。使用返回地址,我从当前正在检查的堆栈中的函数代码中提取一个字节。 __asm{ push eax

    3热度

    1回答

    大家好 我正在试图构建一个代码来演示如何在汇编中进行AES加密。 Intel最新手册有 AESENC xmm1中,XMM2/m128中-Perform AES加密流的一个圆轮密钥 从第二源操作数,从第一 源操作数上的128位数据(状态)下操作,并将结果存储在目标操作数中。 AESENCLAST xmm1中,XMM2/AES加密流 的循环密钥 从第二源操作数,从第一 源操作数上的128位数据(状态)

    0热度

    1回答

    它在我看来的功能工作正常。我正在尝试为多线程应用程序实现一个计数器。由于计数器值可能超出整数范围,因此我使用了64位。我不太清楚线程安全性,因为在这里我们正在处理64位数字。 UINT64 get_and_increment(volatile UINT64* dest) { UINT64 old_value, new_value; bool result = false;

    3热度

    2回答

    我一直在关注此: (http://www.codeproject.com/KB/tips/boot-loader.aspx) 但不知道接下来要做什么以及如何做。 如何加载自编写的内核?或者如何创造比单一细分市场更多的地方? 如何处理二进制文件?我必须将bootloader复制到第一个扇区,好的,但是内核等等,只是放在软盘/光盘上?

    1热度

    1回答

    我试图使用内联汇编器在代码段中嵌入指向字符串的指针。但是gcc在符号名称的开头添加了一个$,导致链接错误。 这里是一个小例子, static const char str[] = "bar"; int main() { __asm__ __volatile__ ( "jmp 0f\n\t" ".long %0\n\t" "0:"

    2热度

    3回答

    我必须编写内联汇编代码来执行我已集成到我的硬件中的定制指令。 根据在实际芯片上找到什么硬件,指令的行为会有所不同。我的装配如下所示: asm volatile ( " instr_generic %1, %2, %0 \n\t" : "=r" (c) : "r" (a), "r" (b) : "%g0" );