admin 管理员组

文章数量: 1087840


2024年12月30日发(作者:代码零九结局)

第 四 章 教 学 实 施 计 划

章节题目:汇编语言程序设计

课时安排

6

授课时间 6

教学目的、要求(分了解、理解、掌握 两个层次):

掌握伪指令

掌握顺序结构程序

掌握分支结构程序

掌握循环结构程序

掌握子程序编程方法

了解单片机应用系统开发方法

了解汇编语言的特点

了解汇编语言的编辑方法

理解散转程序

教学内容(包括基本内容、重点、难点):

基本内容:

4.1 汇编语言程序设计概述

4.2 伪指令

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

4.4 子程序

4.5 MCS-51单片机汇编语言程序设计举例

重点:顺序结构程序,掌握分支结构程序,掌握循环结构程序,掌握子程序编程方法

难点:散转程序

讨论、思考题、作业:

3、6、8、10

参考书目(含参考书、文献等)具体内容:

3

课 堂 教 学 实 施 计 划

第 8 课

教学过程设计: 复习 0 分钟;授新课 100 分钟

讨 论 0 分钟;其它 0 分钟

授课类型(请打√):理论课√ 讨论课□ 实验课□ 习题课□ 其它□

教学方式(请打√):讲授√ 讨论□ 示教□ 指导□ 其它□

教学手段(请打√):多媒体√ 模型□ 实物□ 挂图□ 音像□ 其它□

4.1 汇编语言程序设计概述

程序实际上是一系列计算机指令的有序集合。我们把利用计算机的指令系统来合理地编写

出解决某个问题的程序的过程,称为程序设计。

程序设计是单片机应用系统设计的重要组成部分,单片机的全部动作都是在程序的控制下

进行的。随着芯片技术的发展,很多标准的或功能型的硬件电路都集成到了芯片中,所以,软

件设计在单片机应用系统开发中占的比重越来越大。

一、汇编语言和高级语言

汇编语言:用助记符表示的指令称为汇编语言,用汇编语言编写的程序称为汇编语言源程序

汇编语言也是面向机器的,它仍是一种低级语言。汇编语言离不开具体计算机的硬件,与

硬件紧密相关。

高级语言:高级语言不受具体“硬件”的限制,具有通用性强,直观、易懂、易学,可读性好

等优点。

多数的51单片机用户使用C语言来进行程序设计。C语言已经成为人们公认的高级语言中

高效、简洁而又贴近51单片机硬件的编程语言。

二、汇编语言的特点

• 助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,

运行速度快,因此汇编语言能编写出最优化的程序。

• 使用汇编语言编程比使用高级语言困难,因为汇编语言是面向计算机的,汇编语言的程

序设计人员必须对计算机硬件有相当深入的了解。

• 汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能够直接管

理和控制硬件设备。

• 汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的

汇编语言之间不能通用。

三、汇编语言的语句格式

• 指令语句:每一条指令语句在汇编时都产生一个指令代码(也称机器代码),执行该指令

代码对应着机器的一种操作。

• 伪指令语句:伪指令语句是控制汇编(翻译)过程的一些控制命令。在汇编时没有机器

代码与之对应。

四、汇编语言程序框架

完成控制任务的汇编语言源程序基本上由主程序、子程序、中断服务子程序等组成。

程序的起始地址必须从0000H开始。

五、汇编语言的编辑和汇编

编写-----在一个编辑工具上进行

变成机器码-----通过汇编器完成

六、汇编语言程序设计方法

(1)任务分析(硬件、软件系统分析)

(2)确定算法和工作步骤

(3)制定程序流程图

(4)分配内存,确定程序与数据区存放地址

(5)编写源程序

(6)调试、修改,最终确定程序

4.2 伪指令

汇编时为了便于汇编器的操作,汇编程序提供了一些本身的操作命令,比如汇编器汇编时

需要知道汇编语言源程序中哪些是数据,数据的状态,程序的起始和终止等。这些汇编器本身

的操作指令可以出现在汇编语言源程序中,但它不控制单片机操作,而是控制汇编器的指令。

这些指令称为伪指令。

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

常用伪指令

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

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

例: ORG 0000H

ORG 0023H

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

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

3.EQU (EQUate) 赋值命令

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

例: TTY:EQU 1080H

LOOP1:EQU TTY

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

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

例: HERE:DB 80H

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

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

例: HERE:DW 1080H

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

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

例: HERE:DS 0100H

7.BIT 定义位命令

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

例: HERE:BIT 7FH

课 堂 教 学 实 施 计 划

第 9 课

教学过程设计: 复习 0 分钟;授新课 100 分钟

讨 论 0 分钟;其它 0 分钟

授课类型(请打√):理论课√ 讨论课□ 实验课□ 习题课□ 其它□

教学方式(请打√):讲授√ 讨论□ 示教□ 指导□ 其它□

教学手段(请打√):多媒体√ 模型□ 实物□ 挂图□ 音像□ 其它□

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

汇编语言程序设计一般采用模块化编程,基本程序结构有三种:顺序结构、分支结构和循

环结构。这三种结构组合起来,可以解决任何复杂问题。

1、汇编语言源程序由以下两种指令构成

汇编语句(指令语句)

伪指令(指示性语句)

2、汇编语句的格式:

标号: 操作码 操作数 ;注释

数据表示形式: 二进制(B)、十六进制(H)、十进制(D或省略)、ASCII码(以单引号标

识)

3、伪指令:控制汇编用的特殊指令,这些指令不属于指令系统,不产生机器代码。

一、顺序程序

顺序结构是最简单、最基本的程序结构,其特点是按指令的排列顺序一条一条地执行,直

到全部指令执行完毕为止。不管多么复杂的程序,总是由若干顺序程序段所组成的

[例] 三字节无符号数相加,其中被加数在内部RAM的50H、51H和52H单元中;加数在内部RAM

的53H、54H和55H单元中;要求把相加之和存放在50H、51H和52H单元中,进位存放在位寻

址区的00H位中。

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

MOVR1 , # 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 ;存高字节相加结果

MOV 00H ,C ;进位送00H位保存

更简单的编程是不通过R0,R1间接寻址,直接和内存单元之间求和,程序如下:

ORG 0000H

MOV A,52H

ADD A,55H ;低字节相加

MOV 52H,A ;存低字节相加结果

MOV A,51H

ADD A,54H ;中字节带进位相加

MOV 51H,A ;存中字节相加结果

MOV A,50H

ADD A,53H ;高字节带进位相加

MOV 50H,A ;存高字节相加结

MOV 00H,C ;进位送00H位保存

END

二、分支程序

在实际程序设计过程中,会有很多复杂状态和条件,需要根据这些条件进行不同的选择。

这时就必须对某一变量的状态进行判断,根据判断结果选择不同的程序流向,这就是分支程序。

分支程序有:单分支结构、双分支结构、多分支结构(散转)。

常用指令:JZ(JNZ)、CJNE、JC(JNC)及JB(JNB)等它们是分支结构程序设计的基础,

可以完成各种各样的条件判断,控制转移方向。

【例】两个无符号数比较(单分支)。内部RAM的30H 单元和40H 单元各存放了一个8 位无符

号数,请比较这两个数的大小。若(30 H)≥(40 H),则将地址为20H的内存单元置0;否则,

则将地址为20H的内存单元置1。

ORG 0000H

MOV A,30H ;被减数放入累加器中

CLR C

SUBB A,40H ;两数相减

JC L1 ;有进位(借位),则前小后大

MOV 20H,#00H

LJMP L2

L1: MOV 20H,#01H

L2: LJMP $

END

【例】变量X存放在UNIT1单元内,函数值Y存放在UNIT2单元中,试按下式的要求给Y赋值。

1

Y

0

1

ORG 0000H

X0

X0

X0

UNIT1 DATA 30H

UNIT2 DATA 31H

MOV A ,UNIT1 ;A ← X

JZ DONE ;若X=0,则转 DONE

JNB ACC.7,POSI;若X>0,则转POSI

MOV A ,# 0FFH ;若X<0,则Y=-1

LJMP DONE

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

DONE:MOV UNIT2,A ;存函数值

LJMP $

END

散转程序是一种并行分支程序,它可根据运算结果或输入数据将程序转入不同的分支。

散转指令:“JMP @A+DPTR”

特点:转移的目标地址不是在编程或汇编时预先确定的,而是在程序运行过程中动态地确

定的

三、循环程序

在程序设计过程中,经常会遇到需要重复执行某一段程序的情况,这时可以使用循环程序结构,

以便缩短程序存储空间,提高程序的质量。循环程序结构只是分支程序中的一个特殊形式

组成:

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

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

(3)循环修改,循环程序必须在一定条件下结束。

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

控制方法:

 循环次数已知,利用循环次数控制;

 循环次数未知,利用关键字控制。

【例】从BLOCK单元开始存放一组无符号数,一般称为一个数据块。数据块长度放在LEN单元,

编写一个求和程序,将和存入SUM单元,假设和不超过8位二进制数。

LEN DATA 20H

SUM DATA 21H

BLOCK DATA 22H

ORG 0000H

CLR A ;清累加器

MOV R2,LEN ;数据块长度送R2

MOV R1,# BLOCK;数据块首址送Rl

LOOP:ADD A,@R1 ;循环做加法

INC R1 ;修改地址指针

DJNZ R2,LOOP ;修改计数器并判断

MOV SUM,A ;存和

END

课 堂 教 学 实 施 计 划

第 10 课

教学过程设计: 复习 10 分钟;授新课 80 分钟

讨 论 10 分钟;其它 0 分钟

授课类型(请打√):理论课√ 讨论课□ 实验课□ 习题课□ 其它□

教学方式(请打√):讲授√ 讨论□ 示教□ 指导□ 其它□

教学手段(请打√):多媒体√ 模型□ 实物□ 挂图□ 音像□ 其它□

四、子程序

带通用性问题,可以把它设计成通用子程序以供调用。这样使程序紧凑,缩短程序长度,

调式方便。

1 子程序结构应具备

1)必须标明子程序入口地址,即名称

2)必须以返回指令RET结束子程序

2 子程序设计时注意事项

1)要能正确传递参数:

入口条件:子程序中要处理的数据如何给予。

出口条件:子程序处理结果如何存放(寄存器、存储器、堆栈方式)。

2)保护与恢复现场:

保护现场:压栈指令PUSH

恢复现场:弹出指令POP

3 子程序特性

1)通用性

2)可浮动性

3)可递归和重入性

【例】求平方和 c=a

2

+b

2

,设a,b是个位数,分别存于内部RAM的A1、A2两个单元,计算结

果存在内部RAM的A3单元中。

分析

考虑到a,b是个位数,我们可以设定一个个位数乘法的表格,可以利用MOVC A,@A+DPTR

语句,用查表的方法来计算a和b的平方。因为c是两个数的平方和,两次求平方可以采用子

程序,在子程序用累加器A来传递参数。

ORG 0000H

MOV A,A1 ;取a

LCALL SQR ;调用查表子程序

MOV R1,A ;a的平方暂存R1中

MOV A,A2 ;取b

LCALL SQR ;调用查表子程序

ADD A,R1 ;求出平方和暂存在A中

MOV A3,A ;结果存于A3中

LJMP $

SQR: MOV DPTR,#TAB ;子程序

MOVC A,@A+DPTR

RET

TAB: DB 0,1,4,9,16,25,36,49,64,81

END

【例】把内部RAM 某一单元中一个字节的十六进制数转换成两位ASCII 码,结果存放在内部RAM

的连续两个单元中。

ORG 0000H

MAIN:MOV SP, #30H

MOV Rl,#50H ;Rl为存结果的指针

MOV A,40H ;A 为需转换的十六进制数

SWAP A ;先转换高位半字

PUSH ACC ;压栈

LCALL HEASC ;调用将低半字节的内容转换

POP ACC

MOV @Rl,A ;存高半字节转换结果

INC Rl

MOV A,40H

PUSH ACC

LCALL HEASC

POP ACC

MOV @Rl,A ;存低半字节转换结果

LJMP $

HEASC:MOV R0,SP ;子程序

DEC R0

DEC R0 ;R0 指向十六进制数参数地址

XCH A,@R0 ;取被转换参数

ANL A,#0FH ;保留低半字节

ADD A,#02H ;修改A值,因为XCH A,@R0和RET指令;长度均为1个字节,合计2个字节

MOVC A,@A+PC ;查表

XCH A,@R0 ;结果送回堆栈

RET

TAB: DB 30H,31H,32H. …

END


本文标签: 程序 汇编语言 指令 结构 循环