本文首要是关于汇编和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言语的相关介绍就到这了,如有不足之处欢迎纠正。
相关阅览引荐:c言语的使用领域有哪些
相关阅览引荐:从汇编、C言语到十年的FPGA开发规划,告知你生长的经历