当前位置:首页 >> 理学 >>

第3章 汇编语言程序设计福建专升本电子类复习资料


第3章 汇编语言程序设计
?三结构程序设计 ?伪指令 ?查表程序设计 ?子程序设计

要求:
? 掌握 MCS-51 单片机的寻址方式及各种寻 址方式可用的存贮空间。 ? 学会简单的单片机应用程序的设计方法。

?汇编语言程序的基本结构
一、顺序程序 二、分支程序 三、循环程序

一、顺序程序
n n

顺序程序是最简单的程序结构,即顺序结构。 程序按顺序一条一条地执行指令。

二、分支程序
n

程序分支是通过条件转移指令实现的,即根据条件对程序的

执行进行判断、满足条件则进行程序转移,不满足条件就顺
序执行程序。
n

分支程序又分为单分支和多分支结构。 多分支程序是首先把分支程序按序号排列,然后按序号值进 行转移。

n

二、分支程序
n

在MCS-51指令系统中,通过条件判断实现单分支程序转移

的指令有:JZ、JNZ、CJNE、DJNZ等。此外还有以位状态
作为条件进行程序分支的指令,如JC、JNC、JB、JNB、 JBC等。使用这些指令可以完成0、1、正、负,以及相等、 不相等作为各种条件判断依据的程序转移。

例: 128种分支转移程序。 功能:根据入口条件转移到128个目的地址。 入口:(R3)=转移目的地址的序号00H~7FH。 出口:转移到相应子程序入口。

JMP_128:MOV RL MOV JMP JMPTAB:AJMP AJMP ┇ AJMP

A,R3 A DPTR,#JMPTAB @A+DPTR ROUT00 ROUT01 ┇ ROUT7F

128个子程序首址

二、分支程序
n

说明:此程序要求128个转移目的地址(ROUT00 ~

ROUT7FH)必须驻留在与绝对转移指令AJMP相同的一个
2KB存储区内。
n

RL指令对变址部分乘以2,因为每条AJMP指令占两个字节。

分支程序结构 散转指令 K=0 K=1 ┅ ┅ K=n-1 K=n

转向0分支

转向1分支



转向n-1分支

转向n分支

三、循环程序
n

在程序运行时,有时需要连续重复执行某段程序, 可以使用循环程序。其结构包括四部分: 1、置循环初值 2、循环体(循环工作部分) 3、修改控制变量 4、循环控制部分

1、置循环初值
n

n

对于循环程序中所使用的工作单元,在循环开始时 应置初值。 例如,工作寄存器设置计数初值,累加器A清0,以 及设置地址指针、长度等。

2、循环体(循环工作部分)
n

n

重复执行的程序段部分,分为循环工作部分和循环 控制部分。 循环控制部分每循环一次,检查结束条件,当满足 条件时,就停止循环,往下继续执行其他程序

3、修改控制变量
n

n

n

在循环程序中,不许给出循环结束条件。 常见的是计数循环,当循环了一定的次数后,就停 止循环。 在单片机中,一般用一个工作寄存器Rn作为计数器, 对该计数器赋初值作为循环次数。每循环一次,计 数器的值减1,即修改循环控制变量,当计数器的置 件为0时,就停止循环。

4、循环控制部分
n

根据循环结束条件,判断是否结束循环。

n

89C51可采用DJNZ指令来自动修改控制变量并能结 束循环。

置初值
循环体

置初值


循环控制 退出循环

循环修改

未完
循环体

未完
循环控制


退出循环

循环修改

(a)

(b)

循环组织方式流程图

?伪指令
n

伪指令不是真正的指令,无对应的机器码,在汇编 时不产生目标程序,只是用来对汇编过程进行某种 控制。

ORG 汇编起始命令
格式:ORG 16位地址 n 功能:规定该伪指令后面程序的汇编地址,即汇编后生成目 标程序存放的起始地址。例如: ORG 2000H START:MOV A,#64H ┇ n 规定了START的地址是2000H,又规定了汇编后的第一条指 令码从2000H开始存放。
n

END 汇编结束指令
n

格式:END

n

功能:通知汇编程序结束汇编。在END之后所有的 汇编指令均不予以处理。

EQU 赋值命令
n n n

格式:字符名称 EQU 项(数或汇编符号)

功能:把“项”赋给“字符名称”。
注意:字符名称不等于标号(其后没有冒号);其中的项, 可以是数,也可以是汇编符号。EQU赋值过的符号名可以用 作数据、代码地址、位地址或一个立即数。可以是8位的, 也可以是16位的。但是一般情况下这里定义的“符号名称” 不能在表达式中运算。如MOV A,A10+1是错误的。

n

例如:

EQU 赋值命令
例1: AA EQU R1 MOV A,AA;AA代表工作寄存器R1 例2: A10 EQU 10 DELY EQU 07EBH MOV A,A10;A10作为片内的一个直接地址 LCALL DELY;DELY作为一个16位子程序的入口地 址

DATA 数据地址赋值命令
n n n

格式:字符名称

DATA

表达式

功能:与EQU类似,但有以下差别:
1、EQU定义的字符名必须先定义后使用,而DATA定义的 字符名可以后定义先使用,且DATA只能用来定义8位的数据 或地址。 2、用EQU伪指令可以把一个汇编符号赋给一个名字,而 DATA只能把数据赋给字符名。

n

n

3、DATA语句可以把一个表达式的值赋给字符名称,其中的 表达式应是可求值的。DATA伪指令在程序中用来定义数据 地址

DB 定义字节命令
n

格式:DB(项或项表)

n

功能:通知汇编程序从当前ROM地址开始,保留一 个字或字节串的存储单元,并存入DB后的数据。
注意:项或项表可以是一个字节,用逗号隔开的字 节串或括在单引号中的ASCII字符串。 例如:

n

n

DB 定义字节命令
ORG 2000H DB 0A3H LIST:DB 26H,03H STR:DB ‘ABC’

┇ 经汇编后(2000H)=A3H, (2001H)=26H, (2002H)=03H, (2003H)=41H, (2004H)=42H, (2005H)=43H,(41H,42H,43H分别为A,B, C的ASCII码)

DW 定义字命令
n

格式:DW

16位数据项或项表

n

功能:把DW后的16位数据项或项表从当前地址连 续存放。每项数值为16位二进制数,高8位先放, 低8位后存放。DW用于定义一个地址表。
例如:

n

DW 定义字命令
ORG 1500H TABLE:DW 7234H,8AH,10H ┇ 经汇编后(1500H)=72H, (1501H)=34H, (1502H)=00H, (1503H)=8AH, (1504H)=00H, (1505H)=10H,

DS 定义存储空间命令
n n

格式:DS 表达式

功能:在汇编时,从指定地址开始保留DS之后表达式的值所 规定的存储单元以备后用。
例如: 08H 30H,8AH

n

ORG 1000H
DS DB

汇编后,从1000H保留8个单元,然后从1008H按DB命令给内 存赋值,即(1008H)=30H
(1009H)=8AH

BIT 位地址符号命令
n

格式:字符名 BIT 位地址

n

功能:把BIT后的位地址值赋给字符名。其中字符名不是标
号,其后没有冒号,但字符名是必须的。 例如: A1 A2 BIT BIT P1.0 02H

n

n

n

n

汇编后,P1口第0位的位地址90H就赋给了A1,而A2的值则
为02H。

【例】已知内RAM 20H单元中有一个二进制数 ,请编程把它转换为三位BCD码数,把百位BCD码 数送入FIRST单元的低四位,十位和个位BCD数放 在SECOND单元,十位BCD数在SECOND单元中的高四 位。 提示:把20H单元中内容除以100(64H),得到 的商就是百位BCD数,然后把余数除以10(0AH), 便可得到十位和个位BCD数。

解:程序如下: FIRST EQU 30H SECOND EQU 31H ORG 0000H AJMP MAIN ORG 0030H MAIN: MOV A,20H MOV B,#64H DIV AB MOV FIRST,A MOV A,B MOV B,#0AH DIV AB SWAP A ORL A,B MOV SECOND,A SJMP $ END

;被除数送A ;A/B=A……B ;余数送A

;十位BCD送高四位 ;完成十位和个位BCD数装配 ;存入SECOND单元

【例】已知内RAM的VAR单元内有一自变量X,请按如下 条件编出求函数值Y并将它存放于FUNC单元的程序。

解:这是一个三分支归一的条件转移问题,通常可分为 “先分支后赋值”和“先赋值后分支”两种办法。 (1)先分支后赋值:X是一个带符号数,故可采用累加器 判零条件转移和位控制条件转移指令来做。 (2)先赋值后分支。 其流程图如图所示。

(1)先分支后赋值。 程序如下: VAR EQU 30H FUNC EQU 31H ORG 0000H AJMP MAIN ORG 0030H MAIN: MOV A,VAR ;X→A JZ DONE ;若(X)=0,转DONE JNB ACC.7,POSI ;若(X)>0,转POSI MOV A,#OFFH ;若(X)<0,则-1→A SJMP DONE POSI: MOV A,#01H ;1→A DONE: MOV FUNC,A ;存Y值 SJMP $ END

(2) 先赋值后分支。程序如下: VAR EQU 30H FUNC EQU 31H ORG 0000H AJMP MAIN ORG 0030H MAIN: MOV A,VAR JZ DONE MOV R0,#0FFH JB ACC.7,NEG MOV R0,#01H NEG: MOV A,R0 DONE: MOV FUNC,A SJMP $ END

;X→A ;若(X)=0,转DONE ;若(X)≠0,-1→R0 ;若(X)<0,转NEG ;若(X)>0,1→R0 ;R0→A ;存Y值

【例】将内部RAM 30H单元开始的内容依次 传送到外部RAM 0100H单元开始的区域,直 到遇到传送的内容是0为止。 提示:数据块的传送和不同存储区域之间的 数据传送。前者采用循环程序结构,以条件 控制结束;后者采用间接寻址方式,以累加 器A作为中间变量实现数据传输。程序流程图 如图所示。

开始

地址指针 R0赋 初值 地址指针 DPTR赋初值

(R0)→A A→(DPTR) Y

A=0 N 地址指针增 1

结束

解:程序如下: ORG 0000H AJMP MAIN ORG 0030H MAIN: MOV R0,#30H ;R0指向内部RAM数据区首地址 MOV DPTR,#0100H;DPTR指向外部RAM数据区首地址 TRANS: MOV A,@R0 ;A←(R0) MOVX @DPTR,A ;(DPTR)←A CJNE A,#00H,NEXT SJMP FINISH ;A=0,传送完成 NEXT: INC R0 ;修改地址指针 INC DPTR AJMP TRANS ;继续传送 FINISH: SJMP $ END

?查表程序
通过查表解决运算才能得出结果的问题,这 将很大程度上提高执行程序执行效率,还可以缩短 程序长度。

方法:利用两条指令:
①MOVC A,@A+DPTR

②MOVC A,@A+PC
前者以DPTR为始址,只要获得此基

址,再把查表的项数送A,便可得到结果,是较简单
的过程。

后者操作有所不同,分为三步: (1) 送查表项数于A (2) 使 用 ADD A,#data 指 令 对 A 进 行 修 正 , data 值 由 下 列 确 定 。 PC+data=数据表始址DTAB,其中PC是查表指令②的下一条指令码 的地址(即PC当前值),data即等于查表指令和数据表格之间的字节 数。 (3) 利用指令②完成查表

应用范围:主要用于代码转换、代码显示、实 时值查表计算和按命令号实现转移等场合。

?子程序
所谓子程序是指完成确定任务并能为其它程 序反复调用的程序段,在结构上具有通用性和独立 性。使用时注意以下问题:

· 子程序的第一条指令地址称为子程序的始
址或入口地址

· 子程序有调用和返回
· 断点地址可以由调用和返回分别保护和恢

复,但是涉及到其它寄存器和存储单元的值要保护
和恢复的话,就要进行出入栈操作。

· 传送子程序参数的方法: ①利用寄存器或片内RAM传送参数。可以把入口参数存放 到寄存器或片内RAM中传送给子程序,也可以把出口参数存 放到寄存器或片内RAM中传送给主程序。 ②利用寄存器传送参数的地址。把存放入口参数的地址 通过寄存器传送给子程序,子程序根据寄存器中存放入口 参数的地址便可找到入口参数并对它们进行相应操作;出 口参数的地址也可通过寄存器传送给主程序。

③利用堆栈传送参数。可以用压栈指令PUSH把入口参数 压入堆栈传送给子程序,也可以使用压栈指令PUSH把出口 参数压入堆栈传送给主程序。

【例】设内RAM的MDA和MDB两单元内有两数a和b,请编出求 c=a*a+b*b,并把c送入内RAM的MD单元C的程序,设a、b 为小于10的整数。 提示:利用查表和子程序设计。

解:程序如下: MDA MDB MDC ORG AJMP ORG MAIN: MOV ACALL MOV MOV ACALL ADD MOV SJMP SQR: ADD MOVC RET SQRTAB: DB END

EQU EQU EQU 0000H MAIN 0030H A,MDA SQR R1,A A,MDB SQR A,R1 MDC,A $ A,#01H A,@A+PC

30H 31H 32H

;入口参数送A

0,1,4,9,16,25,36,49,64,81


相关文章:
8086汇编语言程序设计实验指导书
8086汇编语言程序设计实验指导书_电子/电路_工程科技_专业资料。《汇编语言程序设计》上机实验指导书 汇编语言上机实验指导书 一、概述 上机实验总学时为 16 学时,...
第3章 MCS-51单片机汇编语言程序设计
百度文库 专业资料 工程科技 电子/电路上传文档支持以下设备:扫二维码下载 Android...第3 章 MCS-51 单片机汇编语言程序设计 3.1 MCS-51 单片机指令系统 3.1.1 基...
实验一基础汇编语言程序设计
实验一基础汇编语言程序设计_电子/电路_工程科技_专业资料。实验一 基础汇编语言...TEC-XP 十六位机的指令系统; 3.学习简单的 TEC-XP 十六位机汇编程序设计。 ...
微机原理与汇编语言程序设计课程设计报告
课程设计报告 名题院班学 称:微机原理与汇编语言程序设计课程设计 目: 汇编语言编程实践及电子钟设计 系: 级: 号: 计算机系 学生姓名: 指导教师: 设计周数: ...
汇编语言及编程实例(电子教案)
汇编语言及编程实例(电子教案)_工学_高等教育_教育专区。(电子教案)汇编语言及编程实例汇编语言程序设计 2005 第四章 汇编语言程序设计 回顾:8086 的内部结构、寄存...
实验一汇编语言程序设计
实验一汇编语言程序设计_电子/电路_工程科技_专业资料。学生实验报告 学 院: ...无错时继续第 3 步。 3.连接目标程序,产生可执行程序。 4.DEBUG 调试可执行...
专升本《汇编语言程序设计》_试卷_答案
专升本汇编语言程序设计》_试卷_答案_教育学_高等教育_教育专区。专升本汇编语言程序设计》 一、 (共 75 题,共 150 分) 1. 下列说法错误的是___。 (2 ...
第三章 8088汇编语言程序设计 微机原理 第2版 课后答案
百度文库 专业资料 工程科技 电子/电路1/2 专题推荐 北师大二附理科学霸高中.....第三章 3.1 重点与难点 8088 汇编语言程序设计 本章的主要内容是汇编语言语句...
《汇编语言程序设计》试卷 福建农林大学
汇编语言程序设计》试卷 福建农林大学_理学_高等教育...小题 12 分,第 2 小题 13 分,第 3 小题 15...西安:西安电子科技大学出版社,2003 [3] 李珍香等....
《汇编语言程序设计》学习笔记系列(一)
百度文库 专业资料 工程科技 电子/电路上传文档支持以下设备:扫二维码下载 Android...汇编语言程序设计学习笔记(一) 主内题: 第一章 容: 第一章 概述 基础知识(...
更多相关标签: