C语言中嵌入汇编

在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才是)

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

            



  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值