在Visual C++中使用内联汇编
2010-01-10 09:37:22 来源:WEB开发网一、内联汇编的优缺点
因为在Visual C++中使用内联汇编不需要额外的编译器和联接器,且可以处理Visual C++中不能处理的一些事情,而且可以使用在C/C++中的变量,所以非常方便。内联汇编主要用于如下场合:
1.使用汇编语言写函数;
2.对速度要求非常高的代码;
3.设备驱动程序中直接访问硬件;
4."Naked" Call的初始化和结束代码。
//(。"Naked",理解了意思,但是不知道怎么翻译,大概就是不需要C/C++的编译器(自作聪明)生成的函数初始化和收尾代码,请参看MSDN的"Naked <I>function</I>s"的说明)
内联汇编代码不易于移植,如果你的程序打算在不同类型的机器(比如x86和Alpha)上运行,应当尽量避免使用内联汇编。这时候你可以使用MASM,因为MASM支持更方便的的宏指令和数据指示符。
二、内联汇编关键字
在Visual C++使用内联汇编用到的是__asm关键字,这个关键字有两种使用方法:
1.简单__asm块
__asm
{
MOV AL, 2
MOV DX, 0xD007
OUT AL, DX
}
2.在每条汇编指令之前加__asm关键字
__asm MOV AL, 2
__asm MOV DX, 0xD007
__asm OUT AL, DX
因为__asm关键字是语句分隔符,因此你可以把汇编指令放在同一行:
__asm MOV AL, 2
__asm MOV DX, 0XD007
__asm OUT AL, DX
显然,第一种方法和C/C++的风格很一致,并且有很多其它优点,因此推荐使用第一种方法。
不象在C/C++中的"{}",__asm块的"{}"不会影响C/C++变量的作用范围。同时,__asm块可以嵌套,嵌套也不会影响变量的作用范围。
更多精彩
赞助商链接