77范文网 - 专业文章范例文档资料分享平台

第四章 汇编语言程序设计(DOC)

来源:网络收集 时间:2019-01-10 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

第四章 汇编语言程序设计

本章的汇编语言程序设计的主要内容有:汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。

(一个单片机应用系统和其它计算机系统一样,在完成一项具体工作的时候,它要按照一定的次序,去执行操作,这些操作实际上就是由设计人员,以单片机能够接受的指令编制的程序,那么无论计算机也好,单片机也好,实际上编制程序的过程,就是用计算机来反映设计者的编程思想,那么这一章中,我们将向大家介绍怎样使用单片机指令系统来编制一些应用程序。在介绍之前,我们还是来学习汇编语言的一些基础知识)

4.1 汇编语言程序设计概述

1、计算机的汇编语言

以助记符表示的指令,每一条指令就是汇编语言的一条语句。 (汇编语言程序设计实际上就是使用汇编指令来编写计算机程序。汇编语言的语句有严格的格式要求)

2、汇编语言的语句格式

MCS-51汇编语言的语句格式表示如下:

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

标号:指令的符号地址,有了标号,程序中的其它语句才能访问该语句。

①标号是由1~8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。

②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。

(同一个标号在程序中只能定义一次,不能重复定义;一条语句可以有标号,也可以没有标号,所以是否有标号,取决于程序中是否需要访问该语句。)

操作码:规定语句执行的操作内容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。

操作数:给指令的操作提供数据或地址。 注释:是对语句或程序段的解释说明。

(在单片机中,这四个部分怎么加以区分呢?使用分界符) 分界符(分隔符):用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。

冒号(:)用于标号之后

空格( )用于操作码和操作数之间

逗号(,)用于操作数之间,分割两个以上的操作数 分号(;)用于注释之前。

(注释部分汇编语言不对它们进行编译的。而是将标号,操作码,操作数部分加以翻译成机器码。看一个例子)

(表面是延时子程序的第一条语句,故加上标号,便于访问。上面的语句如何编译的呢?)

ORG 3000H 3000H E8H DELY: MOV A, R0 ; 这是延时子程序

(在这条指令前,加一个伪指令,定义程序首地址,我们把这一段语句定义为从3000H

开始,经过编译以后,那么这一条语句的标号部分,DELY这时候就转化为实际的地址值3000H,指令操作码和操作数部分编译后为E8H,这就是汇编语言与机器代码之间的关系。这个转化工作是由编译程序来完成的。)

4.2 单片机汇编语言程序的结构形式

(一般有三种形式)

顺序结构;分支结构;循环结构 (下面我们来依次介绍一下这些结构) 1、顺序结构程序设计 顺序程序是最简单的程序结构,在顺序程序中既无分支、循环,也不调用子程序,程序执行时一条一条地按顺序执行指令。

(下面来看一个例子,该部分程序完成一个3字节无符号数的加法)

例4.1:三字节无符号数相加,被加数在内部RAM的50H、51H和52H单元中,加数在内部RAM的53H、54H和55H单元中,其中被加数单元和加数单元的高位地址存放的为最低位字节;要求把相加之和存放在50H、51H和52H单元中。进位位存放在位寻址区的00H位中。

(我们来看编制的程序)

ADDU: MOV R0, #52H ;被加数的低字节地址 MOV R1, #55H ; 加数的低字节地址 MOV A, @R0 ;取被加数的最低位数据 ADD A, @R1 ;与加数的最低字节相加(第一次相加,不考虑进位位)

MOV @R0, A ;存低字节相加结果 DEC R0 ;地址减1 DEC R1 ; MOV A, @R0 ADDC A, @R1 ;中间字节带进位相加 MOV @R0, A ;存中间字节相加结果 DEC R0 ;地址减1 DEC R1 MOV A, @R0 ADDC A, @R1 ;高位字节带进位相加 MOV @R0, A ;存高字节相加结果 CLR A ;进位送00H位保存。(对A清零) ADDC A, #00H ;(把进位位移到A的最低位) MOV 20H, A ;进位位送入位地址00H(相当于把A的最低位放到20H的最低位)

RET

2、分支结构程序设计

程序分支是通过转移指令实现的,为清除起见,把分支程序分为以下几种情况。

单分支程序

单分支使用条件转移指令实现,即根据条件对程序的执行进行判断,满足条件则进行程序转移,否则程序顺序执行。

多分支程序

⑴使用多条CJNE指令,通过连续比较,实现多分支程序转移。 ⑵使用查地址表方法实现多分支程序转移。

⑶使用查转移指令表的方法实现多分支程序转移。 ⑷通过堆栈操作实现多分支程序转移。

(我们就下面的例子来看看利用多条CJNE,如何实现多分支程序转移的。) 例4.2:有一温度控制系统,现场采集的温度值(Ta)放在累加器A中。此外,在内部RAM 54H单元存放控制温度下限值(T54),在55H单元存放控制温度上限值(T55)。若Ta> T55,则程序转向JW(降温处理程序);若Ta< T54,则程序转向SW(升温处理程序);若T55≥Ta≥T54,则程序转向FH(返回主程序)。

(下面是简单的程序段) 有关程序段如下: CJNE A, 55H, LOOP1 ; AJMP FH LOOP1: JNC JW CJNE A, 54H, LOOP2 AJMP FH LOOP2: JC SW FH: RET JW: : : SW: : :

(CJNE 对两数做相减,但不把减的结果写回去,仅用来改变标志位C)

3、循环程序 循环是为了重复执行一个程序段,MCS-51汇编语言中虽然没有专用的循环指令,但可以使用条件转移指令通过条件判断来控制循环是否结束。

4.3 MCS-51汇编语言的伪指令

伪指令是程序员发给汇编程序的命令,也称为汇编命令或汇编程序控制指令。 (一般在51单片机中用到的伪指令有以下几个) ORG 汇编起始地址命令 命令格式: [<标号:>] ORG <地址>

其中[<标号:>]是选择项,根据需要选用。 <地址>项,通常为16位绝对地址,但也可以使用标号或表达式表示。

(这个伪指令一般出现在程序的起始位置,用来规定目标程序的起始地址,例如:) 例如:

ORG 8000H

8000H 74H START: MOV A, #00H 8001H 00H

END 汇编终止命令 命令格式: [<标号:>] END [<表达式>] END是汇编语言源程序的结束标志。

(因此,汇编语言源程序只能有一条该伪指令,编译系统在编译过程中,遇到该伪指令就会停止编译,即只对END之前的程序编译,后面的程序不再编译。)

EQU (EQUate) 赋值命令

命令格式:

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

DATA1 EQU 40H (用DATA1来表示40H单元,以后程序中出现DATA1就代表40H单元,但如何区分它是代表数据还是地址呢?这主要看程序中的指令形式,如果是数据,则应加“#”即 #DATA1,

否则为地址。)

执行: MOV A, DATA1 ;DATA1为片内的40H单元 执行: MOV A, #DATA1 ;DATA1为数据40H

DB 定义字节命令 命令格式:

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

(主要用于在程序区定义一些常数表格) 例如: 存放七段数码管(共阳极)显示的十六进制数的字型码,可使用多条DB命令定义: ORG 8100H

LED_TAB: DB C0H, F9H, A4H, B0H DB 99H, 92H, 82H, F8H DB 80H, 90H, 88H, 83H DB C6H, A1H, 86H, 84H

(这些数据依次存放在8100H为起始地址的程序存储区中,它们是共阳极七段数码管的字型数据,把它们组成常数表格放在程序存储区)

DW 定义数据字命令 命令格式:

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

(在本讲中我们介绍了汇编语言的格式,几种基本的程序结构格式,伪指令等,希望大家在课后的练习加以熟悉掌握。)

(从这一讲开始,我们来讲授单片机汇编语言程序设计,它有两部分构成:一部分是与硬件电路密切相关的程序,我们将在介绍硬件的过程中加以介绍,另一个部分就是类似于数值运算,数值转换等这样一类程序。这一章中,我们主要向大家介绍后一类的程序。)

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

(一个单片机的应用系统程序,根据系统应用的范围、复杂程度的不同,程序的复杂程度也是不同的,但作为单片机的应用系统程序应该包括) 1、主程序: 顺序执行的无限循环的程序,运行过程处于全封闭状态。 例如: 带显示及键盘输入的某单片机系统的主程序框图结构为:

(上电、复位后对相关的寄存器进行初始化,调用显示子程序,显示初始状态,调用键盘扫描子程序的功能就是在那里等待你的键盘输入,当有键按下,就调用相应的键的识别子程序,来识别到底是哪个键被按下,不同键有不同的处理程序,当键值识别子程序完成后回到显示子程序,构成一个封闭的环,连续不断地运行下去。下面我们再来看什么是子程序)

2、子程序: 完成某种特定功能的一个程序段,也称为一个程序模块。

(子程序是供其它程序反复使用的,完成某种特定功能的程序段,采用子程序结构,可以简化程序的逻辑结构,缩短程序的长度。)

(提供给其它程序使用的子程序要与其它程序进行信息交换,必须要告知其它程序,我这个子程序调用的条件是什么,即有什么样的入口参数,同时也要告知处理的结果放在哪儿,即子程序也要有出口参数,完成子程序与其它程序之间完成数据传递,因此) 作为子程序,要有以下约定: 子程序功能: 程序入口: 程序出口: 程序影响:

(程序影响指影响哪些寄存器,在这里仍以前面介绍过的三字节无符号数的加法为例)

子程序功能: 完成三字节无符号数的加法。 程序入口: 50H、51H、52H为被加数,数据结构是50H为最高位 55H、54H、53H为加数,数据结构是53H为最高位 程序出口: 50H、51H、52H为和值。数据结构是50H为最高位,位地址00H为进位位。 程序影响: R0、 R1、 R7、 A

(下面是这一段程序)

ADDU: MOV R0, #52H ;被加数的低字节地址 MOV R1, #55H ; 加数的低字节地址 MOV R7, #3 ;三字节加法,循环次数为三次

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库第四章 汇编语言程序设计(DOC)在线全文阅读。

第四章 汇编语言程序设计(DOC).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/415910.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: