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单片机的内部内部资源和最小系统解读

STC89C52:8KFLASH、512字节RAM、32个IO口、3个定时器、1个UART、8个中断源

给大家讲讲单片机C语言学习架构

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

51单片机编程的10个不可不知的技巧

定义的变量不要太多。低128位为用户定义变量的存放区域(默认时),也可以把变量放在高128位,但容易出错,尽量少放,最好不放。通过M51可以查看内存变量的存放,最好不要超过110个字节,否则程序无法运行或出错。

C语言嵌入式系统编程

模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了>相对论), C语言模块化程序设计需理解如下概念

基于51单片机嵌入式软件及硬件的同步仿真

本文介绍一种嵌入式系统仿真方法,通过一种特殊设计的指令集仿真器ISS将软件调试器软件Keil uVision2和硬件语言仿真器软件Modelsim连接起来,实现了软件和硬件的同步仿真。

更多资讯
涉足代工的三星,来势汹汹?

三星是全球存储器老大,去年仰仗价格大幅上扬,它的销售额已经超过英特尔居首位,如今要涉足代工,而且来势汹汹,不可否认全球半导体业呈三足鼎立,英特尔、台积电及及三星,它们各有所长,竞争会十分激烈。

一场贸易战,让苹果供应链疯狂撤离中国?

苹果组装大厂和硕在11月8日的财报会上透露,正计划将大陆的产线撤回台湾或转移到东南亚进行生产,以此规避中美贸易战影响。另外同为苹果供应链的台厂仁宝、纬创、台郡、美律、可成等也都有将产线撤出大陆的计划。

7纳米竞赛,产业链尖端的游戏,华为、高通、三星谁能更胜一筹?
7纳米竞赛,产业链尖端的游戏,华为、高通、三星谁能更胜一筹?

全球三大晶园厂(做芯片加工生意的工厂)是中国台湾的台积电、韩国三星电子、美国的Intel。Intel主要是自给自足,生产自家的芯片产品,主要是电脑和服务器上用的因特尔CPU,现在也给苹果设计、生产基带芯片(手机上用的调制解调器)产品。

Google推出Fuchsia——融合了Android和ChromeOS的跨设备操作系统
Google推出Fuchsia——融合了Android和ChromeOS的跨设备操作系统

今年年初,市场调查公司Gartner发布了一份调查报告,报告结果显示当前的移动操作市场中,Android的市场占比为85.9%,iOS系统的占比为14%,而两者合计占据市场高达99.9%的份额。反观其他移动操作系统累计仅有0.1%的占比,毫无疑问,这意味着其他小众的操作系统在当前的大环境之下,几乎没有生存空间。

AMD下一代GPU核心“Navi 12”曝光,性能如何?
AMD下一代GPU核心“Navi 12”曝光,性能如何?

根据AMD的GPU路线图,7nm Vega之后便是7nm Navi。时间来到2018年末,Wccftech获悉,AMD至少完成“Navi 12”核心的研制,其配置40个计算单元,按照现行GCU架构便是2560个流处理器,最终的成卡定位将是甜品至主流级别,比如“RX 600”系列。

电路方案