
第4章MCS一51汇编语言程序设计 本章要点: 程序设计语言分类及特点 汇编语言程序编写方法 顺序结构程序的编写方法 分支结构程序的编写方法 循环结构程序的编写方法 子程序的编写方法
第4章MCS-51汇编语言程序设计 本章要点: 程序设计语言分类及特点 汇编语言程序编写方法 顺序结构程序的编写方法 分支结构程序的编写方法 循环结构程序的编写方法 子程序的编写方法

4.1汇编语言概述 了4.1.1程序设计语言的分类及特点 了能够完成一定功能的指令序列称为程序,用来设计计算机 程序的语言称为程序设计语言,按照语言的结构及功能程 序设计语言可分为:机器语言、汇编语言和高级语言。 了1.机器语言 了是计算机所能识别的唯一语言,由二进制代码0和1构成 指令和数据。其具有效率高、响应速度快的特点,但由于 机器语言编写的程序依赖于计算机的结构,可移植性差, 繁琐且难于记忆、识别和调试,通常编程时,不采用机器 语言
4.1 汇编语言概述 4.1.1 程序设计语言的分类及特点 能够完成一定功能的指令序列称为程序,用来设计计算机 程序的语言称为程序设计语言,按照语言的结构及功能程 序设计语言可分为:机器语言、汇编语言和高级语言。 1.机器语言 是计算机所能识别的唯一语言,由二进制代码0和1构成 指令和数据。其具有效率高、响应速度快的特点,但由于 机器语言编写的程序依赖于计算机的结构,可移植性差, 繁琐且难于记忆、识别和调试,通常编程时,不采用机器 语言

2.礼编语言 汇编语言是一种符号语言,指令由助记符表示。 与机器语言相比,汇编语言具有指令容易记忆、理解、 识别和可读性好的优点,但实质上由于汇编语言也是 面向机器的语言,是机器语言程序的符号表示,所以 用户必须熟悉机器的硬件结构和指令系统,掌握计算 机的工作过程才能熟练编程。汇编语言程序通常用于 实时控制领域,其所能完成的操作不是一般高级语言 所能实现的,而且源程序经汇编生成的可执行文件 般运行效率较高。 另外,汇编语言所编写的源程序与经过汇编所产 生的机器代码程序之间有明显的一一对应关系,所以 汇编语言编写的程序同样也存在通用性差,程序不能 移植的缺点
2.汇编语言 汇编语言是一种符号语言,指令由助记符表示。 与机器语言相比,汇编语言具有指令容易记忆、理解、 识别和可读性好的优点,但实质上由于汇编语言也是 面向机器的语言,是机器语言程序的符号表示,所以 用户必须熟悉机器的硬件结构和指令系统,掌握计算 机的工作过程才能熟练编程。汇编语言程序通常用于 实时控制领域,其所能完成的操作不是一般高级语言 所能实现的,而且源程序经汇编生成的可执行文件一 般运行效率较高。 另外,汇编语言所编写的源程序与经过汇编所产 生的机器代码程序之间有明显的一一对应关系,所以 汇编语言编写的程序同样也存在通用性差,程序不能 移植的缺点

3.高级语言 高级语言是接近于人的自然语言形式的计算机编程 语言的总称,例如C语言、BASIC语言等都是高级语 言。和汇编语言相比,高级语言指令简单易学,用户 容易掌握,且高级语言程序不依赖于具体的硬件结构 和指令系统,程序可移植性好,但是高级语言编写的 源程序必须经过编译或解释程序翻译成目标程序,机 器才能执行,而生成的目标程序需占用较多的存储单 元,执行时间较长,运行效率较低。 了 目前有些高级语言不具有直接处理接口和中断技术 的功能,因此高级语言一般很少应用于实时控制,但 随着语言的发展,这种情况将会有所改变
3.高级语言 高级语言是接近于人的自然语言形式的计算机编程 语言的总称,例如C语言、BASIC语言等都是高级语 言。和汇编语言相比,高级语言指令简单易学,用户 容易掌握,且高级语言程序不依赖于具体的硬件结构 和指令系统,程序可移植性好,但是高级语言编写的 源程序必须经过编译或解释程序翻译成目标程序,机 器才能执行,而生成的目标程序需占用较多的存储单 元,执行时间较长,运行效率较低。 目前有些高级语言不具有直接处理接口和中断技术 的功能,因此高级语言一般很少应用于实时控制,但 随着语言的发展,这种情况将会有所改变

4.1.2单片机汇编语言源程序的编辑和汇编 1.汇编语言的指令类型 用汇编语言编写的、具有特定功能的指令序列,称为汇编语言源程 序。源程序由两种类型的汇编语言语句(即指令)构成。语句是汇编语 言的基本组成单位,按性质不同分为两类:指令性语句(机器指令)和 指示性语句(伪指令)。 (1)机器指令 即指令系统中的全部指令,每条指令都有对应的机器代码,是机器真 正能够执行的指令。 (2)伪指令 为汇编程序在汇编过程中提供控制或指示信息,并不直接产生机器 代码,属于机器不能执行的指令类型。 2.汇编 计算机不能直接识别和执行源程序。因此源程序必须经过汇编程序 汇编产生机器码目标程序文件,程序才能执行。这种将汇编语言源程序 转换成机器语言程序的过程称为汇编。对于初学者来说,应注意汇编语 言源程序和汇编程序两个术语的区别,它们的功能示例如图4-1所示
4.1.2 单片机汇编语言源程序的编辑和汇编 1.汇编语言的指令类型 用汇编语言编写的、具有特定功能的指令序列,称为汇编语言源程 序。源程序由两种类型的汇编语言语句(即指令)构成。语句是汇编语 言的基本组成单位,按性质不同分为两类:指令性语句(机器指令)和 指示性语句(伪指令)。 (1)机器指令 即指令系统中的全部指令,每条指令都有对应的机器代码,是机器真 正能够执行的指令。 (2) 伪指令 为汇编程序在汇编过程中提供控制或指示信息,并不直接产生机器 代码,属于机器不能执行的指令类型。 2.汇编 计算机不能直接识别和执行源程序。因此源程序必须经过汇编程序 汇编产生机器码目标程序文件,程序才能执行。这种将汇编语言源程序 转换成机器语言程序的过程称为汇编。对于初学者来说,应注意汇编语 言源程序和汇编程序两个术语的区别,它们的功能示例如图4-1所示

图4-1汇编过程 经过 汇编语言 汇编后 汇编程序 目标文件和源程序列表 源程序
图4-1 汇编过程 汇编语言 源程序 汇编程序 目标文件和源程序列表 经过 汇编后

汇编语言源程序的汇编过程分为手工汇编和机器汇编。 所谓手工汇编,即采用人工查指令表的方法将汇编指令翻译成相应机器 代码。通常源程序的人工汇编需要两次才能完成,第一次汇编查找每条指令 的机器代码,第二次汇编完成地址偏移量的计算。由于手工汇编需要计算和 查找,繁琐而且容易出错,而且程序修改时可能会引起指令的地址变化,转 移指令的偏移量也随之改变,需要重新计算,所以手工汇编主要应用于设计 短小程序或调试程序的场合。 所谓机器汇编,即采用汇编程序对源程序进行自动汇编,由于单片机软 硬件资源的限制,该过程通常借助于P℃系统机实现,象这种借助于一种计算 机而为另一种计算机产生目标代码的汇编方式又称为交叉汇编。交叉汇编的 原理类似于手工汇编,在汇编程序中通常存入了两张表,即MCS-51单片机 的指令代码表和伪指令表。汇编程序通常通过两次扫描完成汇编,第一次扫 描查找源程序中每条指令的机器代码,第二次扫描完成地址偏移量的计算, 汇编后生成目标文件和列表文件。这是目前应用较广的汇编方法
汇编语言源程序的汇编过程分为手工汇编和机器汇编。 所谓手工汇编,即采用人工查指令表的方法将汇编指令翻译成相应机器 代码。通常源程序的人工汇编需要两次才能完成,第一次汇编查找每条指令 的机器代码,第二次汇编完成地址偏移量的计算。由于手工汇编需要计算和 查找,繁琐而且容易出错,而且程序修改时可能会引起指令的地址变化,转 移指令的偏移量也随之改变,需要重新计算,所以手工汇编主要应用于设计 短小程序或调试程序的场合。 所谓机器汇编,即采用汇编程序对源程序进行自动汇编,由于单片机软 硬件资源的限制,该过程通常借助于PC系统机实现,象这种借助于一种计算 机而为另一种计算机产生目标代码的汇编方式又称为交叉汇编。交叉汇编的 原理类似于手工汇编,在汇编程序中通常存入了两张表,即MCS-51单片机 的指令代码表和伪指令表。汇编程序通常通过两次扫描完成汇编,第一次扫 描查找源程序中每条指令的机器代码,第二次扫描完成地址偏移量的计算, 汇编后生成目标文件和列表文件。这是目前应用较广的汇编方法

汇编的主要功能为: (1)确定程序中每条汇编语言指令的指令机器码。 (2)确定每条指令在程序存储器中的存放地址。 (3)提供语法、编辑等方面的错误信息,但不能提供程序 的逻辑错误。 (4)产生目标执行文件(*OB]/*.HEX)和列表文件 (*LST)
汇编的主要功能为: (1)确定程序中每条汇编语言指令的指令机器码。 (2)确定每条指令在程序存储器中的存放地址。 (3)提供语法、编辑等方面的错误信息,但不能提供程序 的逻辑错误。 (4)产生目标执行文件(*.OBJ/*.HEX)和列表文件 (*.LST)

4.1.3MCS一51汇编语言的伪指令 所谓“伪”指令,即不是真正的可执行指令。如前所述,伪指令只能在对 源程序进行汇编时起控制作用,例如设置程序的起始地址,定义符号,给程序 分配一定的存储空间等。常用的伪指令共有8条,下面分别介绍。 1.ORG(Origin)一设置起始地址指令 用来设定程序或数据存储区的起始地址。指令格式为: ORG16位地址 例如,有程序段如下,则表示程序存放的起始地址为1000州。 指令地址机器码 源程序 ORG 1000H 1000H 78 20 MAIN:MOV RO,#20H 1002H E6 MOV A,@RO 。。 ·若省略ORG指令后的16位地址,则汇编后目标程序的起始地址默认为0000H。 O尺G指令在一个源程序中可以多次使用以指定不同程序段的起始地址,但是 指定的多个地址应从小到大,不能使程序段之间产生重叠
4.1.3 MCS-51汇编语言的伪指令 所谓“伪”指令,即不是真正的可执行指令。如前所述,伪指令只能在对 源程序进行汇编时起控制作用,例如设置程序的起始地址,定义符号,给程序 分配一定的存储空间等。常用的伪指令共有8条,下面分别介绍。 1.ORG(Origin)——设置起始地址指令 用来设定程序或数据存储区的起始地址。指令格式为: ORG 16位地址 例如,有程序段如下,则表示程序存放的起始地址为1000H。 指令地址 机器码 源程序 ORG 1000H 1000H 78 20 MAIN:MOV R0,#20H 1002H E6 MOV A,@R0 … •若省略ORG指令后的16位地址,则汇编后目标程序的起始地址默认为0000H。 ORG指令在一个源程序中可以多次使用以指定不同程序段的起始地址,但是 指定的多个地址应从小到大,不能使程序段之间产生重叠

2.DB(Define Byte)一定义字节型常数指令 指令的功能为从指定的存储单元开始,定义或存储一个或 多个字节数据。指令格式为: [标号:DB字节常数表 例如 ORG 1000H TAB:DB0A3H,18,‘AB 汇编结果为:(1000H)=A3H(1001H)=12H (1003H)=41H(1004H)=42H
2.DB(Define Byte) ——定义字节型常数指令 指令的功能为从指定的存储单元开始,定义或存储一个或 多个字节数据。指令格式为: [标号:]DB 字节常数表 例如 ORG 1000H TAB: DB 0A3H,18,‘AB’ 汇编结果为:(1000H)=A3H (1001H)=12H (1003H)=41H (1004H)=42H