在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才是)
因为本人也是初学所以如有哪位高手能解决此问题,小弟将不胜感激~!