我记得当时使用旧的borland DOS编译器,你可以做这样的事情:
asm {
mov ax,ex
etc etc...
}
现在有没有一种半平台独立的方式来做到这一点?我需要进行BIOS调用,所以如果有一种方法可以在不使用asm代码的情况下实现这一点,那么它对我也同样有用。
发布于 2008-09-14 14:05:31
发布于 2008-09-15 00:10:08
在GCC身上,还有更多的事情要做。在指令中,你必须告诉编译器发生了什么变化,这样它的优化器就不会搞砸了。我不是专家,但有时它看起来像这样:
asm ("lock; xaddl %0,%2" : "=r" (result) : "0" (1), "m" (*atom) : "memory");
用C语言编写一些示例代码,然后让GCC生成汇编清单,然后修改代码,这是一个好主意。
发布于 2008-09-14 13:57:56
阅读这篇讨论C/C++内联汇编的文章是一个很好的开始:
http://www.codeproject.com/KB/cpp/edujini_inline_asm.aspx
文章中的示例:
#include <stdio.h>
int main() {
/* Add 10 and 20 and store result into register %eax */
__asm__ ( "movl $10, %eax;"
"movl $20, %ebx;"
"addl %ebx, %eax;"
);
/* Subtract 20 from 10 and store result into register %eax */
__asm__ ( "movl $10, %eax;"
"movl $20, %ebx;"
"subl %ebx, %eax;"
);
/* Multiply 10 and 20 and store result into register %eax */
__asm__ ( "movl $10, %eax;"
"movl $20, %ebx;"
"imull %ebx, %eax;"
);
return 0 ;
}
https://stackoverflow.com/questions/61341
复制相似问题