在Visual C++中运用内联汇编C言语教程-C / C++-优质IT资源分享社区

admin
管理员
管理员
  • UID1
  • 粉丝27
  • 关注4
  • 发帖数581
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:155回复:0

  在Visual C++中运用内联汇编C言语教程

楼主#
更多 发布于:2016-06-02 20:20

由于在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伪指令界说(_EMIT伪指令阐明见下文)。

2.MASM表达式

内联汇编能够运用MASM中的表达式。比方: MOV EAX, 1。

3.数据指示符和操作符

虽然__asm块中答应运用C/C++的数据类型和目标,但它不能用MASM指示符和操作符界说数据目标。这儿特别指出,__asm块中不答应MASM中的界说指示符:

DB、DW、DD、DQ、DT和DF,也不答应DUP和THIS操作符。MASM构造和记载也不再有用,内联汇编不接受STRUC、RECORD、WIDTH或者MASK。

4.EVEN和ALIGN指示符

虽然内联汇编不支撑大多数MASM指示符,但它支撑EVEN和ALIGN,当需要的时分,这些指示符在汇编代码里边参加NOP(空操作)指令使标号对齐到特定鸿沟。这么能够使某些处理器取指令时具有更高的效率。

5.MASM宏指示符

内联汇编不是宏汇编,不能运用MASM宏指示符(MACRO、REPT、IRC、IRP和ENDM)和宏操作符(<>、!、&、%和.TYPE)。

6.段阐明

有必要运用寄存器来阐明段,跨过段有必要显式地阐明,如ES:[BX]。

7.类型和变量巨细

我们能够运用LENGTH来获得C/C++中的数组中的元素个数,假如不是一个数组,则结果为一。运用SIZE来获得C/C++中变量的巨细,一个变量的巨细是LENGTH和TYPE的乘积。TYPE用来获得一个变量的巨细,假如是一个数组,它得到的一个数组中的单个元素的巨细。

8.注释

能够运用C/C++的注释,但引荐用ASM的注释,即";"号。

9._EMIT伪指令

_EMIT伪指令相当于MASM中的DB,但一次只能界说一个字节,比方:

__asm

{

JMP _CodeOfAsm

_EMIT 0x00 ; 界说混合在代码段的数据

_EMIT 0x01

_CodeOfAsm:

; 这儿是代码

_EMIT 0x90 ; NOP指令

}

优质IT资源分享社区为你提供此文。

本站有大量优质C、C++教程视频,资料等资源,包含C,C++基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看。

C、C++教程视频

优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客