我记得当天用旧的borland DOS编译器你可以做这样的事情:
asm { mov ax,ex etc etc... }
现在是否有半平台独立的方式来做到这一点?我需要进行BIOS调用,所以如果有一种方法可以在没有asm代码的情况下执行此操作,那对我来说同样有用.
使用GCC
__asm__("movl %edx, %eax\n\t" "addl $2, %eax\n\t");
使用VC++
__asm { mov eax, edx add eax, 2 }
在海湾合作委员会中,还有更多内容.在指令中,你必须告诉编译器改变了什么,以便它的优化器不会搞砸.我不是专家,但有时它看起来像这样:
asm ("lock; xaddl %0,%2" : "=r" (result) : "0" (1), "m" (*atom) : "memory");
在C中编写一些示例代码是个好主意,然后让GCC生成一个汇编列表,然后修改该代码.
一个好的开始是阅读本文,讨论C/C++中的内联汇编:
http://www.codeproject.com/KB/cpp/edujini_inline_asm.aspx
文章的例子:
#includeint 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 ; }