Tag: 内联汇编

我可以在GCC上使用x86汇编语言吗?

我想写一个小的低级程序。 对于它的某些部分,我将需要使用汇编语言,但其余的代码将写在C / C + +。 因此,如果我将使用GCC将C / C ++与汇编代码混合,是否需要使用AT&T语法,还是可以使用Intel语法? 或者你如何以其他方式混合使用C / C ++和asm(intel语法)? 我意识到,也许我没有select,必须使用AT&T的语法,但我想确定.. 如果没有select,我可以在哪里find有关AT&T语法的完整/官方文档? 谢谢!

有没有办法将汇编代码插入到C?

我记得在旧的borland DOS编译器的一天,你可以做这样的事情: asm { mov ax,ex etc etc… } 现在有没有半平台独立的方式来做到这一点? 我有一个需要进行BIOS调用,所以如果有一种方法来做到这一点没有ASM代码,这对我来说同样有用。

高效的整数比较function

compare函数是一个函数,它接受两个参数a和b并返回一个描述其顺序的整数。 如果a小于b ,结果是一些负整数。 如果a大于b ,结果是一些正整数。 否则, a和b相等,结果为零。 这个函数经常被用来参数化从标准库中sorting和searchalgorithm。 实现字符的comparefunction非常简单, 你简单地减去参数: int compare_char(char a, char b) { return a – b; } 这是有效的,因为两个字符之间的差异通常被假定为适合一个整数。 (注意,这个假设对于sizeof(char) == sizeof(int) )的系统来说并不适用。 这个技巧不能用来比较整数,因为两个整数之间的差别通常不适合整数。 例如, INT_MAX – (-1) = INT_MIN表明INT_MAX小于-1 (从技术上说,溢出会导致未定义的行为,但假设模运算)。 那么我们怎样才能有效地实现比较函数的整数? 这是我第一次尝试: int compare_int(int a, int b) { int temp; int result; __asm__ __volatile__ ( "cmp %3, %2 \n\t" "mov $0, […]