现在的位置: 首页 > 综合 > 正文

C语言中嵌入汇编

2018年06月06日 ⁄ 综合 ⁄ 共 1153字 ⁄ 字号 评论关闭

在CSDN上的第一篇blog,有写不好的地方还请大家指出,咱们一起进步哈~

     c、c++、java等等这些语言想必大家再熟悉不过了,在这个信息爆炸的时代前人留给我们的资源是在太丰富,站在巨人的肩膀上的确是个不错的选择,但是如果仅仅只会使用前人留给我们的工具是无法超越他们的;汇编相对于其他语言亦如此,从面相过程到面相对象的确是个质的转变,但这并不意味着我们就不需要了解计算机的“底层”。

    那么汇编到底有什么好处呢?

 1.提高速度和效率。(不过这种情况很少了,现在C/C++编译器的优化很厉害了)
 2.实现某些C语言中不具备、但为不同的机器所特有的功能。(这是主要原因),
^/ p- b: a( z8 

 3.利用通用的汇编语言例程。(也常会遇到)

 那么接下来就让我们从最基本的开始——如何在c语言中嵌入一小段汇编程序:

以下代码均在vs2008中编译通过

#include <stdio.h>
#include<stdlib.h>

int main()
{
    int a=1,b=2,c=3;

    __asm
{
    push eax
    mov eax,a
    add eax,b
    add eax,c
    mov a,eax
    pop eax
}

    printf("%d",a);
    system("pause");
    return 0;
}

以上是一段极其简单的在c语言中嵌入汇编的小实例,实现的功能是    a=a+b+c;

    这段代码和c语言唯一的不同就是  将 a=a+b+c 换成的一段由__asm开头的代码,这就是最简单的c语言中嵌入汇编的方法具体格式

如下:

    格式一

                     __asm

                  {

                  汇编代码(每句末尾不需分号)

                   }

   格式一即实例中使用的格式(也是最常使用的格式),当然还有另外的格式

 

   格式二: 

                 __asm  汇编代码

                 __asm  汇编代码

     这种格式即在每句汇编代码前都加上 __asm

  本文只是最基本的在c语言中嵌入汇编代码的实例,但是在学习的过程中我也遇到一些小问题:以上代码在codeblock中却无法编译通过,总是会出现如下提示信息:

 error: expected '(' before '{' token
 error: 'push' undeclared (first use in this function)
 error: (Each undeclared identifier is reported only once
 error: for each function it appears in.)
 error: expected ';' before 'eax'

 

   另外在codeblock中__asm并不是关键字(貌似asm才是)

   因为本人也是初学所以如有哪位高手能解决此问题,小弟将不胜感激~!

            

抱歉!评论已关闭.