首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

1.2 单片机C语言与汇编语言

单片机系统开发时不论使用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语言编写的程序还具有良好的可读性,可维护性等特点。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180113G07IOB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券