当前位置:首页 » 服务器技术
开发技术指南» 文章正文
    引言: 一、 优点 使用内联汇编可以在 C/C++ 代码中嵌入汇编语言指令,而且不需要额外的汇编和连接步骤。
 

 

 ·【mfc】doc    »显示摘要«
    摘要:doc_view结构中让窗口一开始就最大化探讨作者:enoloo 一般的做法是在 c**app::initinstance()中,修改成这样:{ //... m_pmainwnd->showwindow(sw_showmaximized); m_pmainwnd->updatewindow(); //...}或者,还在 cmainframe::precreatewindow(createstruct& cs)中,添加:{ //... ......
    摘要: 简单的hibernate数据库插入例子 刚刚开始学习,希望和大家一起进步吧。请大家不要笑我。 这是一个最简单的例子,该例子基本上是按照hibernate reference来做的。 做这个例子我选用的应用服务器是山东中创软件商用中间件有限公司的inforweb(这个应用服务器是商用的,如果你无法获得它,那么可以用tomcat代替),数据库我选用的是oracle,你可以选用小巧的mysql。 首先你需要hibernate2.0 相关运行环境,可......


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

一、 优点

    内联汇编代码可以使用 c/c++ 变量与函数,因此它能非常容易地整合到 c/c++ 代码中。它能做一些对于单独使用 c/c++ 来说非常笨重或不可能完成的任务。 【相关文章:学习XML:如何书写XML?

    使用内联汇编可以在 c/c++ 代码中嵌入汇编语言指令,而且不需要额外的汇编与连接步骤。在 visual c++ 中,内联汇编是内置的编译器,因此不需要配置诸如 masm 一类的独立汇编工具。这里,我们就以 visual studio .net 2003 为背景,介绍在 visual c++ 中使用内联汇的相关知识(如果是早期的版本,可能会有些许出入)。 【扩展阅读:VB打造超酷个性化菜单(六)

    * 使用汇编语言编写特定的函数; 【扩展信息:Eclipse插件开发系列(5):SWT

    内联汇编的用途包括:

    * 编写对速度要求非常较高的代码;

    * 在设备驱动程序中直接访问硬件;

    * 编写 naked 函数的初始化与结束代码。

二、 关键字

    使用内联汇编要用到 __asm 关键字,它可以出现在任何允许 c/c++ 语句出现的地方。我们来看一些例子:

    * 简单的 __asm 块:

        __asm

        {

            mov al, 2

            mov dx, 0xd007

            out al, dx

        }

    * 在每条汇编指令之前加 __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 块的“{}”不会影响 c/c++ 变量的作用范围。同时,__asm 块可以嵌套,而且嵌套也不会影响变量的作用范围。

    为了与低版本的 visual c++ 兼容,_asm 与 __asm 具有相同的意义。另外,visual c++ 支持标准 c++ 的 asm 关键字,但是它不会生成任何指令,它的作用仅限于使编译器不会出现编译错误。要使用内联汇编,必须使用 __asm 而不是 asm 关键字。

三、 汇编语言

1. 指令集

    内联汇编支持 intel pentium 4 与 amd athlon 的所有指令。更多其它处理器的指令可以通过 _emit 伪指令来创建(_emit 伪指令说明见下文)。

2. masm 表达式

    在内联汇编代码中,可以使用所有的 masm 表达式(masm 表达式是指用来计算一个数值或一个地址的操作符与操作数的组合)。

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. 段

    必须使用寄存器而不是名称来指明段(段名称“_text”是无效的)。并且,段跨越必须显式地说明,如 es:[ebx]。

7. 类型与变量大小

    在内联汇编中,可以用 length、size 与 type 来获取 c/c++ 变量与类型的大? ?

    * length 操作符用来取得 c/c++ 中数组的元素个数(如果不是一个数组,则结果为 1)。

    * size 操作符可以获取 c/c++ 变量的大小(一个变量的大小是 length 与 type 的乘积)。

    * type 操作符可以返回 c/c++ 类型与变量的大小(如果变量是一个数组,它得到的是数组中单个元素的大小)。

    例如,程序中定义了一个 8 维的整数型变量:

        int iarray[8];

    下面是 c 与汇编表达式中得到的 iarray 及其元素的相关值:


...   下一页
 ·大本计算机专业该怎么学习?    »显示摘要«
    摘要:最近几年,计算机专业的大本毕业以后找工作,越来越难,找个好工作越来越不容易,薪水也越来越低。虽然表面上我们学校的一次性就业率是本省最高的,其实里面含有不少水分,比如说在全省评估的时候把没有找到工作的人挂在关系不错的单位等。大家也知道,不好意思说而已。在校生的压里越来越大,学校压力也不小。于是,学校拼命给学生加课,大家都知道,计算机专业的课程本来就多一点,加课的结果是大学四年几乎没有时间来干点别的,除了上课,当然我说的情况是假设你想拿到学位证的话。然后就有很......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE