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单片机片内 RAM和片外 RAM该如何区分?

前边介绍单片机资源的时候,我们提到过 STC89C52 共有 512 字节的 RAM,是用来保存数据的,比如我们定义的变量都是直接存在 RAM 里边的。但是单片机的这 512 字节的 RAM在地位上并不都是平等的,而是分块的,块与块之间在物理结构和用法上都是有区别的,因此我们在使用的时候,也要注意一些问题。

51单片机智能温控器C语言源程序

这是一款51单片机智能温控器C语言源程序,程序功能:速成有时钟显示,使用DS18B20进行温度检测,控制温度可通过按键进行设置,输出通过继电器械驱动加热器进行加热。是一款功能较为完善的温度控制板,适合单片机爱好者进行温度控制的电子制作实作项目。电路简单,容易制作,调试容易。

51单片机的CAN通讯设计

#include sbit int0 = P3^2;

如何控制51单片机液晶实现计时器的功能?

要想实现人机交互,显示装置是不可缺少的。前面讲到了如何利用单片机控制数码管的显示,这篇文章主要关于如何控制液晶显示,并在此基础上加上定时器的功能,把原来已用数码管显示的定时器搬到液晶屏上来。

51单片机设定串口的工作方式:设定SCON寄存器

用计算机来控制单片机,进而控制继电器等其他外设,感觉不错啊,怎么实现呢?一步步来吧。

更多资讯
晶圆代工龙头厂台积电公布2018年第4季财报,营收情况如何?

晶圆代工龙头厂台积电公布2018年第4季财报,营收2987.7亿元新台币(单位下同),税后纯益999.8亿元,每股税后纯益3.86元。其中法人关心的单季毛利率,则为47.7%,略高于法人预期的47.5%,营业利益率37%,税后纯益率34.5%。全年每股盈余13.54元。

瑞萨电子荣幸成为E-Prix马拉喀什站获胜车队马恒达的官方技术合作伙伴

全球领先的半导体解决方案供应商瑞萨电子株式会社(TSE:6723)宣布,对马恒达(Mahindra)车队上周六在摩洛哥赛道 2018/19 年度ABB FIA 电动方程式(Formula E)锦标赛第二轮中的出色表现表示祝贺。

世强拓展国产电容产品线 成为祥泰电子唯一授权分销商

近日,世强与国产电容压敏热敏电阻厂商——祥泰电子(深圳)有限公司(以下简称祥泰电子)签署代理协议,代理其全线产品。由此,世强成为祥泰电子唯一授权分销商。

状况下行的手机存储芯片市场,中国能否突破重围?
状况下行的手机存储芯片市场,中国能否突破重围?

手机已经成为了人类日常生活的一部分,进入21世纪以来“低头族”也是成规模的增加。作为全球最大的手机制造国,在全世界手机领域中智能手机的出货量排到前10的,我国就占了7个席位。

意法半导体智能天线控制器节省电路板空间、降低物料成本 和电池负载

意法半导体的STHVDAC-253C7数字电容控制器用于控制可调电容,例如,意法半导体的STPTIC系列可调电容,这款产品的优点是可以缩小天线调谐电路的尺寸、降低物料清单(BoM)成本和功耗,稳定智能手机的射频性能。

电路方案