在Visual C++中使用内联汇编

社区服务
高级搜索
猴岛论坛电脑百科在Visual C++中使用内联汇编
发帖 回复
倒序阅读 最近浏览的帖子最近浏览的版块
1个回复

在Visual C++中使用内联汇编

楼层直达
   故园情。

ZxID:13728535

等级: 禁止发言

举报 只看楼主 使用道具 楼主   发表于: 2011-05-13 0
在Visual C++中使用内联汇编
因为在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块可以嵌套,嵌套也不会影响变量的作用范围。
Mis微笑

ZxID:11193784

等级: 元帅
人活着就是围绕一个字:烦.什么时候不烦了,应该就快死了吧。。

举报 只看该作者 沙发   发表于: 2011-05-13 0
看不懂
« 返回列表
发帖 回复