51汇编语言程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第四章MCS-51汇编语言程序设计

重点及难点:

单片机汇编语言程序设计的基本概念、伪指令、单片机汇编语言程序的三种基本结构形式、常用汇编语言程序设计。

教学基本要求:

1、掌握汇编语言程序设计的基本概念;

2、掌握伪指令的格式、功能和使用方法;

3、掌握顺序结构、分支结构和循环结构程序设计的步骤和方法;

4、掌握常用汇编语言程序设计步骤和方法。

教学内容

§4.1汇编语言程序设计概述

一、汇编语言的特点

(1)助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序。

(2)使用汇编语言编程比使用高级语言困难,因为汇编语言是面向计算机的,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。

(3)汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能够直接管理和控制硬件设备。

(4)汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用;但是掌握了一种计算机系统的汇编语言后,学习其他的汇编语言就不太困难了。

二、汇编语言的语句格式

[<标号>]:<操作码> [<操作数>];[<注释>]

三、汇编语言程序设计的步骤与特点

(1)建立数学模型

(2)确定算法

(3)制定程序流程图

(4)确定数据结构

(5)写出源程序

(6)上机调试程序

§4.2伪指令

伪指令是程序员发给汇编程序的命令,也称为汇编命令或汇编程序控制指令。

MCS- 51常见汇编语言程序中常用的伪指令:

第四章MCS-51汇编语言程序设计91

1.ORG (ORiGin)汇编起始地址命令

[<标号:>] ORG <地址>

2.END (END of assembly)汇编终止命令

[<标号:>] END [<表达式>]

3.EQU (EQUate)赋值命令

<字符名称> EQU <赋值项>

4.DB (Define Byte)定义字节命令

[<标号:>] DB <8位数表>

5.DW (Define Word)定义数据字命令

[<标号:>] DW <16位数表>

6.DS (Define Stonage )定义存储区命令

[<标号:>] DW <16位数表>

7.BIT位定义命令

<字符名称> BIT <位地址>

8.DA TA数据地址赋值命令

<字符名称> DATA <表达式>

§4.3单片机汇编语言程序的基本结构形式

一、顺序程序

[例4-1]三字节无符号数相加,其中被加数在内部RAM的50H、51H和52H单元中;加数在内部RAM的53H、5414和55H单元中;要求把相加之和存放在50H、51H和52H单元中,进位存放在位寻址区的00H位中。

MOV R0 ,# 52H ;被加数的低字节地址

MOV R1 ,# 55H ;加数的低字节地址

MOV A ,@ R0

ADD A ,@ R1 ;低字节相加

MOV @ R0 , A ;存低字节相加结果

DEC R0

DEC R1

MOV A ,@ R0

ADDC A ,@ R1 ;中间字节带进位相加

MOV @ R0 , A ;存中间字节相加结果

DEC R0

DEC R1

MOV A ,@ R0

ADDC A ,@ R1 ;高字节带进位相加

MOV @ R0 , A ;存高字节相加结果

CLR A

ADDC A , # 00H ;存放进位的单元地址 MOV @ R0 , A

;进位送00H 位保存

二、分支程序

1.单分支程序

[例4-2] 变量X 存放在V AR 单元内,函数值Y 存放在FUNC 单元中,试按下式的要求给Y 赋值。

⎪⎩

⎪⎨⎧<-=>=0

100

01X X X Y 本题的程序流程见图4-1(a )。 参考程序: ORG 1000H

V AR DA TA 30H FUNC DA TA 31H

MOV A , V AR ;A ← X

JZ DONE

;若X=0,则转DONE JNB ACC.7 , POSI ;若X>0,则转POSI MOV A , # 0FFH ;若X<0,则Y=-1 SJMP DONE

POSI : MOV A , # 01H ;若X>0,则Y = 1 DONE : MOVE FUNC , A ;存函数值 SJMP $ END

图4-1 例4-2的分支流程图

第四章MCS-51汇编语言程序设计93

这个程序的特征是先比较判断,然后按比较结果赋值,这实际是三分支而归一的流程图,因此,至少要用两个转移指令。初学者很容易犯的一个错误是:漏掉了其中的SJMP DONE 语句,因为流程图中没有明显的转移痕迹。

这个程序也可以按图4-1(b)的流程图来编写,其特征是先赋值,后比较判断,然后修改赋值并结束。

参考程序:

ORG 1000H

V AR DA TA 30H

FUNC DA TA 31H

MOV A ,V AR ;A ←X

JZ DONE ;若X=0,则转DONE

MOV R0 ,# 0FFH ;先设X<0,R0 = FFH

JNB ACC.7 ,NEG ;若X<0,则转NEG

MOV R0 ,# 01H ;若X>0,R0 = 1 NEG:MOV A ,# 01H ;若X>0,则Y = 1

DONE:MOV FUNC , A ;存函数值

SJMP $

END

2.多分支程序

图4-2 多分支程序转移

三、循环程序

循环程序一般由4部分组成:

(1)置循环初值,即确立循环开始时的状态。

(2)循环体(工作部分),要求重复执行的部分。

(3)循环修改,循环程序必须在一定条件下结束,否则就要变成死循环。

(4)循环控制部分,根据循环结束条件,判断是否结束循环。

以上4个部分可以有两种组织方式。

[例4-3]从BLOCK单元开始存放一组无符号数,一般称为一个数据块。数据块长度放在LEN单元,编写一个求和程序,将和存入SUM单元,假设和不超过8位二进制数。

在置初值时,将数据块长度置入一个工作寄存器,将数据块首地址送入另一个工作寄存器,一般称它为数据块地址指针。每做一次加法之后,修改地址指针,以便取出下一个数来相加,并且使计数器减1。到计数器减到0时,求和结束,把和存入SUM即可。

相关文档
最新文档