来源:http://msdn.microsoft.com/zh-cn/library/45yd4tzz.aspx

Microsoft 专用

__asm 关键字调用一个内联汇编,并且可以显示,每当 c. 或 C++ 语句合法。 它不能单独出现。 必须由程序集指令执行它,请在大括号中的命令的一组,或者,至少, null 对大括号。 该术语 “__asm 块是”此处称为命令的说明或组,在大括号。

说明

Visual C++ 对标准 C++ asm 关键字支持仅限于该条件编译器在关键字不会生成错误。 但是, asm 块不会生成任何有意义的代码。 使用 __asm而不是 asm。

语法:

__asm 程序集命令 [;]

__asm {} 程序集指令列表 [;]

__asm assembly-instruction ; opt

__asm { assembly-instruction-list }; opt

程序集指令列表:

assembly-instruction ; opt

assembly-instruction ; assembly-instruction-list ; opt

如果使用,而不用大括号, __asm 关键字表示此行的其余部分是一个汇编语言的语句。 如果使用与大括号,这意味着在大括号之间的每一行都是一个汇编语言的语句。 对于与以前版本的兼容, _asm 是 __asm的同义词。

因为 __asm 关键字是语句分隔符,则在同一行中放置程序集指令。

在 Visual C++ 2005 版之前,命令

__asm int 3

没有导致本机代码,便会产生编译 /clr;编译器将该命令对 CLR 中断命令。

__asm int 3 现在导致该函数的本机代码生成。 如果希望功能生成断点在代码中,并且,如果您希望函数编译为 MSIL,使用 __debugbreak

示例


下面的代码片段是简单的 __asm 块对大括号:

 
 
__asm {
mov al, 2
mov dx, 0xD007
out dx, al
}

或者,可以放置在每个程序集指令前面的 __asm :

 
 
__asm mov al, 2   __asm mov dx, 0xD007   __asm out dx, al

由于 __asm 关键字是语句分隔符,则在同一行中放置程序集指令:

 
 
__asm mov al, 2
__asm mov dx, 0xD007
__asm out dx, al

所有三个示例生成相同的代码,不过,第一个样式 (将 __asm 块括在大括号中) 有一些优点。 从 C 或 C++ 代码的大括号明显不同的代码和避免 __asm 关键字不必要的重复。 大括号也会阻止多义性。 如果在同一 __asm 块的行要将 c. 或 C++ 语句,可以在大括号必须将块。 不带大括号,编译器无法告诉程序集代码位置停止,并且 C 或 C++ 语句开始。 最后,因为,在大括号的文本与普通 MASM 文本的格式,您可以轻松地剪切和粘贴文本从现有 MASM 源文件。

不同于 C 和 C++ 的大括号,将 __asm 的大括号块不会影响变量的范围。 您也可以嵌套 __asm 块;嵌套不影响变量的范围。

特定于 Microsoft 的结尾

__asm的更多相关文章

  1. 异常处理第一讲(SEH),筛选器异常,以及__asm的扩展,寄存器注入简介

    异常处理第一讲(SSH),筛选器异常,以及__asm的扩展 博客园IBinary原创  博客连接:http://www.cnblogs.com/iBinary/ 转载请注明出处,谢谢 一丶__Asm的 ...

  2. SYSTEM\sys\sys.c:33:7: error: expected '(' before 'void' __ASM void MSR_MSP(u32 addr)

    在STM32中的sys.c文件编译报出这个错误时: __ASM void MSR_MSP(u32 addr){ MSR MSP, r0 //set Main Stack value BX r14} 如 ...

  3. 类似register uint32_t __regPriMask __ASM("primask");的代码分析

    代码: #define __ASM __asm /*!< asm keyword for ARM Compiler */ #define __INLINE __inline /*!< in ...

  4. 让Visual Studio x64 支持 __asm内联汇编

    目录 让Visual Studio x64 支持 __asm内联汇编 Intel Parallel Studio XE 2016安装 设置Interl C++ Compiler 使VS x64支持内联 ...

  5. 《Note --- Unreal --- MemPro (CONTINUE... ...)》

    Mem pro 是一个主要集成内存泄露检测的工具,其具有自身的源码和GUI,在GUI中利用"Launch" button进行加载自己待检测的application,目前支持的平台为 ...

  6. 逆向工程学习第二天--动手开发自己的第一个shellcode

    一个简单的c语言添加windows管理员账号的小程序,之前在渗透的时候经常用到,现在拿它来做自己的第一个shellcode. C代码: #pragma comment(lib, "netap ...

  7. CPUID指令简单调用

    关于CPUID指令,可以看维基百科的相关介绍 https://en.wikipedia.org/wiki/CPUID 在windows下可以调用__cpuid和__cpuidex这两个函数,__cpu ...

  8. AliSQL的编译使用

    1.下载源码 git clone https://github.com/alibaba/AliSQL.git Linux下编译 2.编译 编译前需要安装好gcc cmake bison等.(如果缺少其 ...

  9. 【逆向篇】分析一段简单的ShellCode——从TEB到函数地址获取

    其实分在逆向篇不太合适,因为并没有逆向什么程序. 在http://www.exploit-db.com/exploits/28996/上看到这么一段最简单的ShellCode,其中的技术也是比较常见的 ...

随机推荐

  1. composer Failed to decode zlib stream 无法解码zlib流

    Win7 中安装 Composer (PHP) 国内有些网络不能访问美国的Composer官网,可访问 Composer 中文网 学习. 目标 可以在任何目录下的项目中执行 PHP composer. ...

  2. sql语句添加一列标示,然后进行分页。

    ,) , sum(Score) as Score ,Student_NO,Student_Name into #a2_tab from ksy_stu_ScoreInfo GROUP BY Stude ...

  3. php debug/phpstorm调试

    apache+phpstorm调试php代码,修改php.ini配置文件开启调试,没有以下代码加上即可, [XDebug]zend_extension="C:\php\php-7.0.12- ...

  4. 最新版Kubernetes常用命令大全

    #查看所有namespace的pods运行情况 kubectl get pods --all-namespaces #查看具体pods,记得后边跟namespace名字哦 kubectl get po ...

  5. 微信小程序之多行文本省略号

    最近在捣鼓小程序,期间遇到的问题,踩过的坑,也是在网上各种搜.这里也说下我解决的问题,方便大家. 在小程序首页显示文本列表的时候,为了美观,不希望把所有的文本都显示出来,希望是显示前几行(比如前3行, ...

  6. 微信小程序组件解读和分析:十三、radio单选项目

    radio单选项目组件说明: radio:单选项目. radio-group: 单项选择器,内部由多个<radio/>组成. radio单选项目示例代码运行效果如下: 下面是WXML代码: ...

  7. 【C++】异常简述(二):C++的异常处理机制

    上文简述了在C语言中异常的处理机制,本文主要讲解C++中的异常处理. 一.异常的语法格式 在C++中,异常的抛出和处理主要使用了以下三个关键字:try. throw . catch.其格式如下: 当我 ...

  8. MongoDB入门解析

    刚开始学习mongodb,对笔记做了一个整理.是基于nodejs来学习的. 1.mongodb介绍 mongodb 是C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添 ...

  9. 一些常用的meta标签及其作用

    声明文档使用的字符编码  <meta charset='utf-8'>优先使用 IE 最新版本和 Chrome  <meta http-equiv="X-UA-Compat ...

  10. 使用Win7 64位旗舰版光盘映像安装Windows Home basic 64位操作系统

    工作当中需要安装Windows home basic 64位操作系统,苦于手头没有该版本的安装光盘,也没时间下载其安装映像.因此,在现有资源“cn_windows_7_ultimate_with_sp ...