我记得当初使用旧的borland DOS编译器时,您可以执行以下操作:
| 12
 3
 4
 
 | asm {mov ax,ex
 etc etc...
 }
 | 
现在是否有一种半平台独立的方式来执行此操作?我需要进行BIOS调用,因此,如果有一种方法可以在没有asm代码的情况下进行此操作,那对我同样有用。
使用GCC 
| 12
 3
 4
 
 | __asm__("movl %edx, %eax\\\t"
 "addl $2, %eax\
 \\t");
 | 
使用VC 
| 12
 3
 4
 
 | __asm {mov eax, edx
 add eax, 2
 }
 | 
在海湾合作委员会,还有更多的东西。在指令中,您必须告诉编译器进行了哪些更改,以便其优化程序不会出错。我不是专家,但有时看起来像这样:
| 1
 |     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 
文章示例:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 
 | #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 ;
 }
 | 
对于Microsoft编译器,仅x86支持内联汇编。对于其他目标,您必须在单独的汇编源文件中定义整个函数,然后将其传递给汇编器并链接生成的对象模块。
您极不可能在保护模式操作系统下调用BIOS,并且应使用该系统上可用的任何功能。即使您处于内核模式,也可能不安全-如果这样做,BIOS可能无法正确地相对于操作系统状态进行同步。