单片机系统开发时不论使用C语言还是汇编语言编写的源程序,最终都要需要生成单片机所能直接识别执行的机器语言。使用C语言编写的源程序经过C编译器编译为汇编语言,再由汇编程序将其翻译为机器语言。
1.2.1 汇编语言概述
汇编语言(Assembly Language)是面向机器的程序设计语言。用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言也称为符号语言。
使用汇编语言编写的程序,机器并不能直接识别,需要一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编语言把汇编程序翻译成机器语言的过程称为汇编。
1.2.2 汇编语言特点
汇编语言比机器语言易于读写、调试和修改,同时也具有机器语言执行速度快,占内存空间少等优点,但在编写复杂程序时具有明显的局限性。汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植。它的特点主要体现在以下几个方面:
面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。
保持了机器语言的优点,具有直接和简捷的特点。
可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。
目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。
经常与高级语言配合使用,应用十分广泛。
1.2.3 指令系统
一台计算机所能执行的各种不同类型指令的总和称为指令系统,即一台计算机所能执行的全部操作。不同计算机的指令系统包含的指令种类和数目也不同。一般包含算术运算型、逻辑运算型、数据传送型、判定和控制型、输入和输出型等指令。指令系统是表征一台计算机性能的重要因素。它的格式与功能不仅直接影响到机器的硬件结构,而且也直接影响到系统软件,影响到机器的适用范围。
1.2.4 C51语言与汇编语言的比较
汇编语言是一种过渡语言,较接近于机器语言。C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存地址,进行位(bit)操作。此外,C语言还具有效率高,可移植性强等特点。下面从编程方式和编程效率比较其优劣。
1.两种语言的编程方式比较
在汇编语言中,程序的实现要通过一条条指令组合来实现,无论是算术运算还是逻辑运算。使用这些指令的同时就要求程序员必须熟悉硬件的结构,才能编制出有效的程序。而在C语言中,数据的运算只需要通过运算符来操作,而不需要考虑数据的存储方式以及寻址方式。
例1:求两个数的和。如果用汇编语言,需要先将两个数赋值给两个寄存器,然后再做相加。指令如下:
MOV A , #1 ;将立即数1赋值给寄存器A。
MOV B , #2 ;将立即数2赋值给寄存器B。
ADD A , B ;寄存器A中的内容和寄存器B中的内容相加,然后将结果保存于A中。
其中,A、B为寄存器,把1和2分别保存于这两个寄存器中,然后相加,并将结果保存在A寄存器中。而用C语言,则不需要考虑把数据保存在哪个寄存器中或内存中的哪个数据块中,只需定义一个变量,然后用运算符来操作数据。语句如下:
int a ; //定义一个整型数据变量a。
a = 1+2 ; //将1+2的结果保存在变量a中。
其中,a是一个整型变量,它是系统在内存开辟的一个空间,而并没有具体指定在内存的什么位置,因而不需要程序员来考虑。
2.两种语言的编程效率的比较
汇编语言的指令系统决定了它和硬件的关系。汇编语言依赖于硬件,它的每一条指令都直接控制硬件的动作。这种方式编写的程序执行效率高。但用汇编语言编写一些复杂的功能,就会觉得不容易实现,即便简单的输入输出也需要多行指令来实现。而在C语言中,包含了许多系统函数,程序员可以直接调用系统函数来实现常用功能。
例2:通过AT89S51单片机串口输出一个字符串“hello world”。用汇编语言实现如下:
ORG 0000H
LJMP L043FH
L0003H:
MOV A, 17H
ADD A, #0BH
MOV R0, A
L0008H:
MOV A, @R0
INC 17H
L000BH:
RET
L000CH:
MOV R0, #08H
L000EH:
DB 30H
INC @R1
L0010H:
LJMP 780BH
L0013H:
CLR A
L0014H:
MOV B, #01H
LCALL L03B7H
LJMP L035FH
JB 00H, L000BH
MOV R7, #2EH
SETB 00H
SJMP L003EH
MOV A, R7
L0027H:
ANL A, #0FH
ADD A, #90H
DA A
ADDC A, #40H
DA A
L002FH:
MOV R7, A
JNB 04H, L003EH
MOV A, R7
ADD A, #0BFH
CJNE A, #1AH, L0039H
L0039H:
JNC L003EH
ADD A, #61H
MOV R7, A
……………………………………
本程序省略的几百行汇编代码
……………………………………
END
用C语言实现其代码如下:
#include "reg51.h"
#include "stdio.h"
void main(void)
{
SCON=0x50;
TMOD=0x20;
TCON=0x40;
TH1=0xE8;
TL1=0XE8;
TI=1;
TR1=1;
printf("Hello world !\n");
}
通过上述实例可知,使用C语言编写的程序要比汇编语言编写的要简洁的多。而且在结构上比汇编语言要清晰明了。另外用C语言编写的程序还具有良好的可读性,可维护性等特点。
领取专属 10元无门槛券
私享最新 技术干货