C语言和汇编语言的优缺点分析

2018-09-14 07:37:00 来源:elecfans
标签:

本文主要是关于汇编C语言的相关介绍,并着重对汇编和C语言的不同及其编程技巧进行了详尽的阐述。

  

汇编和C语言

C语言和汇编语言的区别在于他们之间优缺点几乎是相反的。


C语言和汇编语言的优缺点:以c来举例

 

优点:

c的运行效率高;

c可以实现硬件的直接访问;

c代码的移植性好;

 

缺点:

c的代码复用性差;

c的代码维护性差;

c的扩展性差,即如果想增加新功能,需要修改较多的代码;

c语言的可读性差;

 

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言;尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

 

汇编语言:是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。

 

汇编和C语言相结合的51单片机编程技巧

c语言和汇编语言之间主要存在:相互调用、混合编程等关系,举例来说吧:

 

1、C语言调用汇编子程序

此时,汇编子程序需要申明为外部程序

#include《reg51.h》

extern void delay(void)

sbit pluse=P1^0;

main()

{

while(1)

{

pluse=0;

delay();

pluse=1;

delay();

}

}

汇编子程序:

汇编部分需要做如此处理。

PUBLIC DELAY

DELAY SEGMENT CODE

RSEG DELAY

DELAY:

MOV R2,#250

DJNZ R2,$

RET

END

 

2:C语言中嵌入汇编,这个比较简单用宏指令包含进来就可以实现。

void delay(void)

{

#pragma asm

mov r2,#250

djnz r2,$

#pragma endasm

}

 

浅谈如何用汇编编写模块化程序

一、主程序的书写

 

 

如上图就是结构化编程的截图,里面的.asm即是汇编文件的扩展名,C语言用的是.c 。在汇编语言中,头文件的扩展名是.inc,而在C语言中头文件的扩展名是.h。

 

仔细观察上图,汇编包含头文件的格式是$include(头文件完整名称),而在C语言中是#include“头文件完整名称”,二者有着非常相似之处。ORG 0000H ; LJMP MAIN应该不用我解释是有什么作用的吧?ORG指令就是指定其下面一条指令或数据的首字节按ORG后面的地址或标号存放到相应的存储单元。_MAIN_ASM SEGMENT CODE; RSEG _MAIN_ASM的作用上图已经标明了,也不用多讲,需要说明的是,_MAIN_ASM不一定要写成这样,你喜欢写什么符号都可以(如:MAINFUNC、_MAIN_FUNC、ZHUHANSHU,最后一个举例有点俗了),只要符合汇编语言变量或标号的命名规则即可。如果讲求规范,最好就按以上格式书写。还有一点就是,这段动态分配程序地址的代码可以省略,如果没有这段代码,编译器就不会动态分配程序地址了。主函数的功能大家肯定都能分析了,不然看这个教程也没什么意义了。

 

二、子程序的书写

 

 

下面讲的是子程序如何书写,子程序是要被调用的,你必须告诉编译器其他模块可以调用子程序模块中的哪些程序,如上所示,DELAY1MS即是可被调用的延时函数,公共变量及函数声明用关键字PUBLIC,后面跟函数名(标号名)。动态分配程序地址可以省略,在main.asm中已经讲到了。注意,子程序模块最后一行要写一个END,没有这一句,编译器不会报错,但会出现警告,容易出现问题,为了规范编程,大家还是别偷懒了。

 

 

最后一点就是头文件的作用了,这跟C语言的作用一样,可以对变量或函数进行声明,这个程序比较简单,可以直接放到主程序中声明,如下图:

 

 

结语

关于汇编和C语言的相关介绍就到这了,如有不足之处欢迎指正。

 
关注与非网微信 ( ee-focus )
限量版产业观察、行业动态、技术大餐每日推荐
享受快时代的精品慢阅读
 

 

继续阅读
51单片机超超声波测距的数码管程序

超声波原理简单测距准确,应用广泛下面贴一个自己写的数码管程序,显示部分需要改,写的是我使用的是慧净开发板,共阴数码管

一文读懂51单片机的RAM分区

51单片机RAM分为四个区域

51单片机时钟与周期之间的关系

单片机机中,有时钟周期,机器周期,指令周期,初学者往往不能弄清楚他们之间的关系,这里我就简单介绍一下.

如何开始上手学习单片机C语言

很多想学单片机的人问我的第一句话就是怎样才能学好单片机?对于这个问题我今天就我自己是如何开始学单片机,如何开始上手,如何开始熟练这个过程给大家讲讲。

51单片机的学习方法分享
51单片机的学习方法分享

学过51单片机的人,都知道这个学习的过程可能不是那么“美好”,所以,今天给大家介绍一些关于51单片机的学习方法。

更多资讯
电动汽车推动了SiC功率半导体市场,是否将迎来大爆发?
电动汽车推动了SiC功率半导体市场,是否将迎来大爆发?

随着电动汽车以及其他系统的增长,碳化硅(SiC)功率半导体市场正在经历需求的突然激增。

富士康正计划在珠海建一座新的半导体工厂,要自己做芯片?

富士康正计划在珠海建设一座新的半导体工厂,并试图通过这一举措,将自己由代工行业巨头转变为自有产品生产商,但随后立即有台湾媒体出来否认了这个说法,称富士康目前没有在珠海兴建半导体工厂的计划。资本市场总是变化莫测,顶层思路常常让人捉摸不透,正如马云早在2012年就宣布退休,现在他又想回乡村当老师,估计连大帅本人有时候也不知道接下来要做什么了。

高通苹果专利之争再次升级,指责苹果窃取其芯片机密并泄露给英特尔

高通公司向法院提出修改现有的对苹果公司的指控,指责苹果公司窃取了“大量”机密信息和商业机密,并泄露给高通竞争对手英特尔,以提高英特尔向苹果所提供芯片的性能。

科大讯飞的 “没有主动造假”与“没有造假”
科大讯飞的 “没有主动造假”与“没有造假”

9月25日,科大讯飞AI同传“造假”的爆料人、知乎网友“Bell Wang”发文称,已与科大讯飞方面进行了沟通。其表示对科大讯飞的解释能够接受,“可以认为讯飞没有主动造假的行为”。同日下午,科大讯飞发文称“没有造假”,科大讯飞技术既能转写也能翻译。

Cadence公布AI芯片Tensilica DNA 100,性能方面都有多大提升?
Cadence公布AI芯片Tensilica DNA 100,性能方面都有多大提升?

Cadence是一家AI行业参与者,他们的Tensilica IP产品仍然非常引人注目,并且出现在流行的SoC中,如HiSilicon的Kirin阵容或MediaTek的芯片组。随着业界试图将基于云的AI推理转移到边缘端设备本身,设备内神经网络推理的市场正在爆炸式增长,以实现更低的功率和更低的延迟。

Moore8直播课堂
电路方案