C++中使用内联汇编..docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C中使用内联汇编.

很多的时候可以才用__asm{}的形式就可以汇编代码#include stdio.h int power2( int num, int power ); void main( void ) { printf( %d\n, power2(3,3)); } int power2( int num, int power ) { __asm { push eax mov eax, num ; Get first argument mov ecx, power ; Get second argument shl eax, cl ; EAX = EAX * ( 2 to the power of CL ) } /* Return with result in EAX */ } 还有这些资料: ??在???Visual???C++???中使用内联汇编????? ??????一、内联汇编的优缺点??? ????????????因为在Visual???C++中使用内联汇编不需要额外的编译器和联接器,且可以处理Visual???C++中不能处理的一些事情,而且可以使用在C/C++中的变量,所以非常方便。内联汇编主要用于如下场合:????? ????????????1.使用汇编语言写函数;??? ????????2.对速度要求非常高的代码;??? ????????3.设备驱动程序中直接访问硬件;??? ????????4.Naked???Call的初始化和结束代码。??? ????????????//(.Naked,理解了意思,但是不知道怎么翻译^_^,大概就是不需要C/C++的编译器(自作聪明)生成的函数初始化和收尾代码,请参看MSDN的Naked???Functions的说明)??? ????????????内联汇编代码不易于移植,如果你的程序打算在不同类型的机器(比如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块可以嵌套,嵌套也不会影响变量的作用范围。??? ??????三、在__asm块中使用汇编语言??? ????????????1.内联汇编指令集????? ????????内联汇编完全支持的Intel???486指令集,允许使用MMX指令。不支持的指令可以使用_EMIT伪指令定义(

文档评论(0)

dashewan + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档