106得票3回答
asm、asm volatile和clobbering memory的区别

在实现无锁数据结构和计时代码时,通常需要抑制编译器的优化。通常人们使用带有memory的asm volatile来做到这一点,但有时只会看到带有memory的asm volatile或只是一个简单的asm清除内存。 这些不同语句对代码生成有什么影响(特别是在GCC中,因为它不太可能是可移植的...

85得票5回答
有没有一种方法可以将汇编代码插入到 C 语言中?

我还记得早期使用旧版的Borland DOS编译器时,可以做出这样的操作: asm { mov ax,ex etc etc... } 现在有没有一种半平台独立的方法来做这件事?我需要调用BIOS,所以如果有一种不需要汇编代码就能实现的方法,对我来说同样有用。

84得票2回答
我可以使用Intel x86汇编语法与GCC一起使用吗?

我想编写一个小的低级程序,其中某些部分需要使用汇编语言,但其余代码将用C/C++编写。 所以,如果我要使用GCC将C/C++与汇编代码混合使用,我需要使用AT&T语法还是可以使用Intel语法?或者说有其他方式可以混合C/C++和asm(Intel语法)? 我意识到可能没有选择而必...

83得票4回答
为什么添加内联汇编注释会导致GCC生成的代码发生如此巨大的变化?

好的,我有这段代码:constexpr unsigned N = 1000; void f1(char* sum, char* a, char* b) { for(int i = 0; i < N; ++i) { sum[i] = a[i] + b[i]; ...

77得票7回答
C/C++函数定义不包含汇编

我一直以为像 printf() 这样的函数最后都是使用内联汇编定义的。在 stdio.h 的深处,会有一些 asm 代码告诉 CPU 要做什么。例如,在 dos 中,我记得它是通过先将字符串的开头 mov 到某个内存位置或寄存器,然后调用 interrupt 来实现的。 然而,自从 Visu...

68得票3回答
__asm__ __volatile__ 在 C 语言中的作用是什么?

我查看了来自http://www.mcs.anl.gov/~kazutomo/rdtsc.html的一些C代码。 他们使用了诸如__inline__,__asm__等内容,例如以下示例: 代码1:static __inline__ tick gettick (void) { unsig...

65得票7回答
高效的整数比较函数

compare函数是一个接受两个参数a和b,并返回描述它们顺序的整数的函数。如果a小于b,则结果为负整数。如果a大于b,则结果为正整数。否则,a和b相等,结果为零。 这个函数常用于标准库中的排序和搜索算法的参数化。 实现字符比较的compare函数非常容易;您只需对参数进行减法运算即可。 ...

57得票4回答
'asm'、'__asm'和'__asm__'有什么区别?

据我所知,__asm { ... }; 和 __asm__("..."); 的唯一区别是前者使用 mov eax, var,而后者使用 movl %0, %%eax,并在末尾加上 :"=r" (var)。除此之外还有哪些区别?asm 又如何呢?

55得票4回答
在Go代码中是否可以包含内联汇编?

在Go代码中是否可以包含内联汇编? 这篇博客文章展示了将Go编译为单独的.s文件并编辑它,但不支持像许多C编译器那样将内联汇编作为Go函数的一部分。

48得票2回答
GCC内联汇编中的标签

在我不断尝试GCC内联汇编的过程中,遇到了一个关于标签和内联代码的新问题。 考虑以下简单跳转: __asm__ ( "jmp out;" "out:;" : : ); 这段代码除了跳转到out标签外并没有做任何事情。虽然这段代码本身可以编译通过,但如果将...