21得票2回答
Swift中是否可能编写内联汇编?

我想知道你是否能在Swift中编写内联汇编。我知道在Objective-C中,你可以使用类似这样的语法:inline void assemblyFunc() { __asm__(/*Assembly*/); } 但在Swift中,似乎无法使用__asm__(/*Assembly*/)。...

21得票2回答
如何在GCC内联汇编中指定Intel x86_64寄存器r8到r15的寄存器约束?

这里是寄存器加载代码列表: a eax b ebx c ecx d edx S esi D edi I 常量值(0到31) q,r 动态分配的寄存器(见...

20得票9回答
带有连续rdtsc的负时钟周期测量?

我正在编写一个C代码,用于测量获取信号量所需的时钟周期数。我正在使用rdtsc,在对信号量进行测量之前,我连续调用了两次rdtsc,以测量开销。我在for循环中多次重复此操作,然后将平均值用作rdtsc开销。 首先,使用平均值是正确的吗? 尽管如此,这里的大问题是有时我会得到开销的负值(不...

19得票2回答
何时在扩展GCC内联汇编中使用earlyclobber约束?

我知道何时使用修补程序列表(例如,列出在汇编中被修改的寄存器,以便它不会被选为输入寄存器等),但我无法理解早期破坏约束&。如果您列出输出,那么输入难道不意味着不能使用所选寄存器(除了匹配数字限制之外)吗? 例如:asm( "movl $1, %0;" ...

18得票3回答
错误:此函数中未声明'asm'(第一次使用)

编译时我遇到了以下错误:error: ‘asm’ undeclared (first use in this function) EXCHANGE( s, *(a) ); ^ 在一个头文件中,宏被调用如下:EXCHANGE( s, *(a) ); 实际宏定义如下:#define EXCHA...

18得票7回答
x86汇编:INC和DEC指令以及溢出标志

在x86汇编中,当对有符号整数进行add或sub操作导致溢出时,会设置溢出标志位;当对无符号整数进行操作时,如果发生了溢出,则会设置进位标志。 然而,对于inc和dec指令,情况似乎有所不同。根据这个网站,inc指令根本不影响进位标志。 但是我找不到关于inc和dec如何影响溢出标志(如果...

18得票4回答
GNU汇编中的.byte汇编指令有什么用途?

在查看一些内嵌汇编的C代码时,我遇到了一个以点号开头的 .byte 指令。 通过在网上查找汇编参考文献,我发现它用于在内存中保留一个字节。 但是在代码中,该语句之前没有标签。所以我想知道未标记的 .byte 指令或任何其他数据存储指令的用途。 例如,如果我编写 .byte 0x0a,我该...

17得票3回答
如何使用Intel语法的内联汇编在GCC中设置变量?

为什么这段代码没有将temp设置为1?我应该怎么做才能实现这个目标?int temp; __asm__( ".intel_syntax;" "mov %0, eax;" "mov eax, %1;" ".att_syntax;" : : "r"(1), ...

17得票2回答
在C++内联汇编中使用基指针寄存器

我希望能够在内联汇编中使用基址指针寄存器 (%rbp)。一个玩具示例可以如下所示:void Foo(int &x) { asm volatile ("pushq %%rbp;" // 'prologue' "movq %%rs...

17得票2回答
在GNU C的inline asm中,针对单个操作数的xmm/ymm/zmm有哪些大小覆盖修饰符?

在尝试回答使用内嵌广播和汇编的嵌入式广播时,我尝试做类似于这样的事情: __m512 mul_bcast(__m512 a, float b) { asm( "vbroadcastss %k[scalar], %q[scalar]\n\t" // want vb...