【大学课件】汇编语言程序设计(1)_第1页
【大学课件】汇编语言程序设计(1)_第2页
【大学课件】汇编语言程序设计(1)_第3页
【大学课件】汇编语言程序设计(1)_第4页
【大学课件】汇编语言程序设计(1)_第5页
已阅读5页,还剩223页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、4.1 概述概述 4.2 顺序结构程序顺序结构程序 4.3 分支结构程序分支结构程序 4.4 循环结构程序循环结构程序 4.5 子程序结构子程序结构 4.6 综合程序举例综合程序举例 4.7 本章小节本章小节 4.8 思考与练习题思考与练习题 第四章汇编语言程序设计第四章汇编语言程序设计 主要内容:本章从程序结构和实用角度出发主要内容:本章从程序结构和实用角度出发, ,通过典型的应用实例介绍汇编语言程序的根本结构及模块化程序设计通过典型的应用实例介绍汇编语言程序的根本结构及模块化程序设计, ,使学生进一步理解和掌握使学生进一步理解和掌握5151系列系列 单片机的指令系统单片机的指令系统, ,并

2、掌握汇编语言程序设计的根本语言和技巧。并掌握汇编语言程序设计的根本语言和技巧。 要求:要求: 1 1、熟练运用指令系统、熟练运用指令系统, ,掌握循环程序、分支程序和搜索程序的设计方法;掌握循环程序、分支程序和搜索程序的设计方法; 2 2、熟练运用指令系统,掌握根本的运算程序设计方法;、熟练运用指令系统,掌握根本的运算程序设计方法; 第四章汇编语言程序设计第四章汇编语言程序设计 3 3、熟练运用指令系统,掌握数制和码制转换程序、熟练运用指令系统,掌握数制和码制转换程序 的设计方法;的设计方法; 4 4、熟练掌握子程序结构,实现模块化程序设计;、熟练掌握子程序结构,实现模块化程序设计; 5 5、

3、深刻理解软件、硬件的相互作用,不断提高实、深刻理解软件、硬件的相互作用,不断提高实 际问题处理程序编写能力。际问题处理程序编写能力。 4.1 4.1 概述概述 4.1 4.1 概述概述 程序设计:为了解决某一个问题,将所设计应用程序设计:为了解决某一个问题,将所设计应用 系统系统( (单片机类型单片机类型) )的指令按一定顺序组合在一起。即的指令按一定顺序组合在一起。即 用计算机所能接受的语言把解决问题的步骤描述出来。用计算机所能接受的语言把解决问题的步骤描述出来。 单片机汇编源程序结构与通用微机汇编源程序结单片机汇编源程序结构与通用微机汇编源程序结 构略有不同,构略有不同,原因原因是:是:

4、1 1、一般没有可以直接利用的监控程序,所有程一般没有可以直接利用的监控程序,所有程 序均要自己编写。序均要自己编写。 4.1 4.1 概述概述 2、没有像、没有像X86汇编语言程序那样,可直接汇编语言程序那样,可直接 调用系统提供的中断功能调用系统提供的中断功能(如:如:BIOS中断、中断、 DOS中断中断)或或Windows的的API函数完成特定操函数完成特定操 作,即所有子程序作,即所有子程序(如键盘监控子程序、显示如键盘监控子程序、显示 驱动程序、中断效劳程序等驱动程序、中断效劳程序等)均需要自己编写。均需要自己编写。 汇编语言语句三种根本类型:指令语句、伪汇编语言语句三种根本类型:指

5、令语句、伪 指令语句、宏指令语句。指令语句、宏指令语句。 4.1 4.1 概述概述 一、汇编语言伪指令一、汇编语言伪指令 伪指令伪指令 汇编程序某些指令在汇编时并不产生目标代码,汇编程序某些指令在汇编时并不产生目标代码, 不影响程序的执行,不是不影响程序的执行,不是CPUCPU能执行的指令,只提供一能执行的指令,只提供一 些汇编控制信息的指令。些汇编控制信息的指令。 常用的伪指令:常用的伪指令: (1) (1)设置起始地址设置起始地址ORG ORG 格式:格式:ORG ORG nnnn 1 1、ORGORG:说明为后续源程序经汇编后的目标程序:说明为后续源程序经汇编后的目标程序 安排存放位置,

6、安排存放位置,nnnn那么给出了存放的起始地址值那么给出了存放的起始地址值; ; 4.1 4.1 概述概述 2 2、ORGORG总是出现在每段源程序或数据块的开始总是出现在每段源程序或数据块的开始; ; 3 3、在一个源程序中,可以屡次使用、在一个源程序中,可以屡次使用ORGORG规定不同程序段的起始位置,规定不同程序段的起始位置, 但定义的地址顺序应从小到大,且不能重叠但定义的地址顺序应从小到大,且不能重叠; ; 4 4、假设不用、假设不用ORGORG,那么汇编将从,那么汇编将从0000H0000H单元开始存放目标程序单元开始存放目标程序; ; 例例 ORG 3000HORG 3000H;表

7、示后续的目标程序代码从;表示后续的目标程序代码从3000H3000H单元开始存放。单元开始存放。 MOV AMOV A,30H30H 4.1 4.1 概述概述 (2)(2)定义字节定义字节DBDB 格式:标号:格式:标号:DBDB字节数据项表字节数据项表 1 1、标号区段可有可无,项表指中间用逗号分开的、标号区段可有可无,项表指中间用逗号分开的 字节、数、字符串或用引号括起来的字节、数、字符串或用引号括起来的ASCASC码字符串码字符串 ( (一个字符用一个字符用ASCASC码表示,就相当于一个字节码表示,就相当于一个字节) )。 2 2、功能:功能:把项表的数据存入从标号开始的连续单把项表的

8、数据存入从标号开始的连续单 元中。元中。 例例 ORG 2000HORG 2000H SEG1SEG1:DB 35HDB 35H,78H78H 4.1 4.1 概述概述 SEG2:DB DAY END 那么那么 (2000H)=35H,(2001H)=78H,(2002H)=44H, (2003H)=41H,(2004H)=59H 注意:项表中假设为数值,其取值范围应为注意:项表中假设为数值,其取值范围应为00H FFH,假设为字符串,其长度应限制在,假设为字符串,其长度应限制在80个字符内。个字符内。 (3)定义字定义字DW 格式:标号:格式:标号:DW字节数据项表字节数据项表 DW的根本含

9、义与的根本含义与DB相同,不同的是相同,不同的是DW定义定义16位位 数据,常用来建立地址表。存放时一个字需两个单元,数据,常用来建立地址表。存放时一个字需两个单元, 高高8位先存放,低位先存放,低8位后存放。位后存放。 4.1 4.1 概述概述 例例 ORG 8000HORG 8000H HETABHETAB:DW 7234H,8AH,10 DW 7234H,8AH,10 汇编后:汇编后:(8000H)=72H(8000H)=72H,(8001H)=34H(8001H)=34H, (8002H)=00H(8002H)=00H,(8003H)=8AH(8003H)=8AH,(8004H)=00

10、H(8004H)=00H, (8005H)=0AH(8005H)=0AH (4)(4)数据地址赋值数据地址赋值DATADATA 格式为:格式为: 字符名称字符名称 DATA DATA 数据或表达式数据或表达式 把数据地址或代码地址赋予字符名称。常用于定把数据地址或代码地址赋予字符名称。常用于定 义数据地址,它可以先使用后定义义数据地址,它可以先使用后定义( (因为因为DATADATA定义的字定义的字 符名称作为标号登记在符号表中,而符名称作为标号登记在符号表中,而EQUEQU没定义没定义) ),这,这 点与点与EQUEQU不同。表达式应是可求值的。不同。表达式应是可求值的。 4.1 4.1 概

11、述概述 例例ORGORG8000H8000H INDEXJ INDEXJDATADATA 8096H8096H LJMP LJMP INDEXJINDEXJ END END 等价于等价于ORGORG8000H8000H LJMPLJMP 8096H8096H ENDEND 4.1 4.1 概述概述 (5)(5)赋值赋值( (等值等值)EQU)EQU 格式:标号格式:标号 EQU EQU 项或表达式项或表达式 功能:功能:将语句操作数的值赋于本语句的标号,用将语句操作数的值赋于本语句的标号,用EQUEQU 赋过值的标号名可以用作数据地址、代码地址、位地址赋过值的标号名可以用作数据地址、代码地址、

12、位地址 或是一个立即数,它可以是或是一个立即数,它可以是8 8位、也可以是位、也可以是1616位。位。 注意:注意: 1 1、在同一程序中,用、在同一程序中,用EQUEQU伪指令对标号赋值后,该伪指令对标号赋值后,该 标号的值在整个程序中不能再改变;标号的值在整个程序中不能再改变; 2 2、用、用EQUEQU定义的字符须先定义后使用。定义的字符须先定义后使用。 4.1 4.1 概述概述 例例 ORGORG8000H8000H AAAAEQUEQUR6R6;AAAA与与R6R6等值等值 MOV A,AAMOV A,AA ;(R6)(R6)的值送入的值送入A A中中 (6)(6)位地址符号命令位地

13、址符号命令BITBIT 格式:格式: 字符名称字符名称 BIT BIT 位地址位地址 功能功能:给一个可位寻址的位单元起一个名字。用:给一个可位寻址的位单元起一个名字。用 BITBIT定义过的位单元可用名字使用定义过的位单元可用名字使用。 注意:名字必须是以字母开头的字母数字串,它注意:名字必须是以字母开头的字母数字串,它 必须是事先未定义过的。必须是事先未定义过的。 4.1 4.1 概述概述 例例4.6 4.6 A1A1BITBITP1.0P1.0 A2A2BITBIT02H 02H (7)(7)源程序结束源程序结束ENDEND 格式:标号:格式:标号:END END 表达式表达式 1 1、

14、标号和表达式是可有可无的。、标号和表达式是可有可无的。 2 2、ENDEND是一个结束标志,在一个程序中只允许出是一个结束标志,在一个程序中只允许出 现一个现一个ENDEND语句,而且它必须放在整个程序的最后面。语句,而且它必须放在整个程序的最后面。 (8)(8)定义存储空间定义存储空间DSDS 格式:格式: 标号:标号:DS DS 表达式表达式 1 1、由标号指定单元开始,定义一个存储区,以备、由标号指定单元开始,定义一个存储区,以备 源程序使用。源程序使用。 4.1 4.1 概述概述 2 2、存储区内预留的存储单元数由数据或字符表达式、存储区内预留的存储单元数由数据或字符表达式 的值决定。

15、的值决定。 例例 ORG 8000HORG 8000H TEMPTEMP:DS 08HDS 08H DB 30H,8AHDB 30H,8AH 即即8000H8000H8007H8007H单元保存备用,单元保存备用,(8008H)=30H(8008H)=30H, (8009H)=8AH(8009H)=8AH。 二、汇编语言程序设计的根本步骤二、汇编语言程序设计的根本步骤 1 1、分析问题、分析问题( (调研调研) ),确定方案和计算方法,确定方案和计算方法 目的:对需要解决的问题进行分析,以求对问题有目的:对需要解决的问题进行分析,以求对问题有 正确的理解。正确的理解。 4.1 4.1 概述概述

16、 2 2、了解应用系统的硬件配置、性能指标。、了解应用系统的硬件配置、性能指标。 3 3、建立系统数学模型,确定控制算法和操作步骤。、建立系统数学模型,确定控制算法和操作步骤。 4 4、编制说明要解决问题的程序框图。、编制说明要解决问题的程序框图。 画程序框图:用各种图形、符号、指向线等来说明画程序框图:用各种图形、符号、指向线等来说明 程序设计的过程。框图步骤写得越细致,编程时也就越程序设计的过程。框图步骤写得越细致,编程时也就越 方便。方便。 目的:把具有一定功能的各个局部有机地联系起来,目的:把具有一定功能的各个局部有机地联系起来, 可以使人们抓住程序的根本线索,对全局有完整的了解。可以

17、使人们抓住程序的根本线索,对全局有完整的了解。 4.1 4.1 概述概述 好处:好处: (1)(1)容易发现设计思想上的错误和矛盾,便于找出解容易发现设计思想上的错误和矛盾,便于找出解 决问题的途径。决问题的途径。 (2)(2)便于把较大的程序分成假设干个模块,从而分头便于把较大的程序分成假设干个模块,从而分头 进行设计,最后合在一起联调。进行设计,最后合在一起联调。 5 5、按所使用计算机的指令系统,依据框图写出汇编语言、按所使用计算机的指令系统,依据框图写出汇编语言 程序。程序。 编程的三个原那么:尽可能的节省数据存储单元;编程的三个原那么:尽可能的节省数据存储单元; 缩短程序长度;减少执

18、行时间。缩短程序长度;减少执行时间。 4.1 4.1 概述概述 . .合理分配存储器单元和了解合理分配存储器单元和了解I/OI/O接口地址。接口地址。 . .按功能设计程序,明确各程序之间的相互关系。按功能设计程序,明确各程序之间的相互关系。 . .用注释行说明程序,便于阅读、调试和修改。用注释行说明程序,便于阅读、调试和修改。 6 6、上机调试程序,直至完成预定功能。、上机调试程序,直至完成预定功能。 MCS-51 MCS-51 程序总体组成程序总体组成 MCS-51MCS-51汇编语言源程序一般由程序头、主程序、完汇编语言源程序一般由程序头、主程序、完 成特定操作的子程序成特定操作的子程序

19、( (可能不止一个可能不止一个) )及相应功能的中断及相应功能的中断 效劳程序等局部组成。效劳程序等局部组成。 结构如下:结构如下: 4.1 4.1 概述概述 - - 程序头程序头( ( 即定义变量和等值符号即定义变量和等值符号)- )- SCL BIT P1.2 SCL BIT P1.2 ;定义;定义SCLSCL位变量位变量 SDA BIT P1.3 SDA BIT P1.3 ;定义;定义SDASDA位变量位变量 ByteCon DATA 30H ByteCon DATA 30H ;定义字节变量;定义字节变量ByteConByteCon ORG nnnnORG nnnn ;CPUCPU复位后

20、,第一指令机器码存放复位后,第一指令机器码存放 单元地址,具体值由单元地址,具体值由CPUCPU类型决定。类型决定。 例例4.8 4.8 在在5151系列中,复位后系列中,复位后PC=0000PC=0000,因此在,因此在5151系系 列中,第一条指令存放在列中,第一条指令存放在ROMROM的的0000H0000H单元中,即单元中,即nnnnnnnn 为为“0000H“0000H。 4.1 4.1 概述概述 LJMP Main LJMP Main ;一般第一条指令是跳转指令,跳到主程序入口地址,;一般第一条指令是跳转指令,跳到主程序入口地址, 其中其中“Main“Main是主程序入口地址标号。

21、是主程序入口地址标号。 主程序不能直接存放在复位后主程序不能直接存放在复位后PCPC指向的存储单元,原因是这一区域往往是指向的存储单元,原因是这一区域往往是 中断效劳程序的入口地址,不能覆盖,否那么不能使用相应的中断功能。中断效劳程序的入口地址,不能覆盖,否那么不能使用相应的中断功能。 例例 在在5151系列中,外部中断系列中,外部中断0 0的入口地址为的入口地址为 0003H 0003H,显然只有,显然只有0000H0000H、 0001H0001H和和0002H0002H三个单元,刚好可以存放一条长跳转指令的机器码。三个单元,刚好可以存放一条长跳转指令的机器码。 4.1 4.1 概述概述

22、- - 主程序主程序 - - ORG yyyy ORG yyyy ;其中;其中yyyyyyyy就是主程序代码存放区的就是主程序代码存放区的 首地址,如首地址,如0100H0100H Main Main: MOV SP,#5FH MOV SP,#5FH ;初始化有关存放器,如设;初始化有关存放器,如设 置置SPSP、选择工作存放器组。、选择工作存放器组。 ;初始化中断控制存放器等;初始化中断控制存放器等 ;主程序实体,具体指令由程序功能决定;主程序实体,具体指令由程序功能决定 LCALL SUB1 LCALL SUB1 ;调用子程序;调用子程序1 1 ,其中,其中SUB1SUB1为子程序名为子程

23、序名 ; END END 4.1 4.1 概述概述 - - 子程序结构子程序结构 - - ORG zzzz ORG zzzz ;其中;其中zzzzzzzz就是子程序代码存放区的首就是子程序代码存放区的首 地址,可以不用地址,可以不用ORGORG指令,直接将子程序存放主程序后。指令,直接将子程序存放主程序后。 SUB1 SUB1:PUSH PSWPUSH PSW PUSH Acc PUSH Acc;通过;通过PUSHPUSH指令保护子程序中用到的有指令保护子程序中用到的有 关存放器,如关存放器,如AccAcc、PSW PSW 等,即保护现场等,即保护现场 ;子程序实体,具体指令由程序功能决定;子

24、程序实体,具体指令由程序功能决定 POP AccPOP Acc POP PSW POP PSW ;恢复现场;恢复现场 RET RET ;子程序最后一条指令,使子程序指令运行结;子程序最后一条指令,使子程序指令运行结 束后,返回主程序断点。束后,返回主程序断点。 4.1 4.1 概述概述 - - 中断效劳程序结构中断效劳程序结构 - - ORG kkkk ORG kkkk ;其中;其中kkkkkkkk就是中断程序代码存放区的就是中断程序代码存放区的 首地址首地址 PUSH PSWPUSH PSW PUSH Acc PUSH Acc ;通过;通过PUSHPUSH指令保护中断效劳程序中用指令保护中断

25、效劳程序中用 到的有关存放器,如到的有关存放器,如 Acc Acc、PSWPSW等,即保护现场等,即保护现场 ;中断效劳程序实体,具体指令由程序功能;中断效劳程序实体,具体指令由程序功能 决定决定 POP AccPOP Acc POP PSW POP PSW ;恢复现场;恢复现场 4.1 4.1 概述概述 CLR TI CLR TI ;去除中断标志;去除中断标志( (在在5151系列中,对于电平触系列中,对于电平触 发的外中断发的外中断INT0INT0和和 INT1 INT1、串行接收及发送中断、串行接收及发送中断 RI RI、TITI 等,不自动去除,需要在中断效劳结束前,通过等,不自动去除

26、,需要在中断效劳结束前,通过CLRCLR指令指令 去除。去除。 RETI RETI ;中断效劳程序最后一条指令,返回主程序断;中断效劳程序最后一条指令,返回主程序断 点。点。 为了确保子程序、中断效劳程序运行结束后,能够为了确保子程序、中断效劳程序运行结束后,能够 正确返回,从断点处继续执行主程序,必须注意在子程正确返回,从断点处继续执行主程序,必须注意在子程 序以及中断效劳程序中堆栈操作指令的匹配问题,否那序以及中断效劳程序中堆栈操作指令的匹配问题,否那 么将无法返回。么将无法返回。 4.1 4.1 概述概述 例例4.10 4.10 在上述子程序结构中,假设在上述子程序结构中,假设SUB1S

27、UB1子程序入口子程序入口 地址为地址为2000H2000H,即主程序内,即主程序内“LCALL SUB1“LCALL SUB1指令等效于指令等效于 “LCALL 2000“LCALL 2000。假设该指令机器码首地址为。假设该指令机器码首地址为1000H1000H,且,且 指令执行前,指令执行前,SP=5FHSP=5FH,那么,那么“LCALL 2000“LCALL 2000 指令执行过指令执行过 程中程中PCPC和和SPSP内容如下:内容如下: (1) PCPC+3 (1) PCPC+3 ,即,即PC=1003H( PC=1003H( 即断点地址即断点地址 ) ); (2) SPSP+1

28、(2) SPSP+1,即,即SP=60HSP=60H,并把,并把PCPC低低8 8位压入堆栈,位压入堆栈, 于是于是(60H)=03(60H)=03; (3) SPSP+1 (3) SPSP+1,即,即SP=61HSP=61H,并把,并把PCPC高高8 8位压入堆位压入堆 栈,栈, 于是于是(61H)=10(61H)=10; 4.1 4.1 概述概述 (4) (4) 把把 SUB1 SUB1入口地址装入入口地址装入PCPC,即,即 PC=2000H PC=2000H。 可见,可见,“LCALL 2000“LCALL 2000指令执行后,指令执行后,PC=2000HPC=2000H,已,已 指向

29、子程序指向子程序SUB1SUB1第一条指令所在的存储单元地址;第一条指令所在的存储单元地址; SP=61HSP=61H。 在子程序中在子程序中 PUSH Acc PUSH Acc ;执行后,;执行后,SP=62HSP=62H,(62H)(62H)就是就是AccAcc的当前的当前 值,假设为值,假设为XXXX PUSH PSW PUSH PSW ;执行后,;执行后,SP=63HSP=63H,(63H)(63H)就是就是PSWPSW的当的当 前值,假设为前值,假设为YYYY 返回前返回前 POP PSW POP PSW ;执行后,;执行后,PSW(SP)PSW(SP),即将,即将(63H)(63H

30、)单元单元 4.1 4.1 概述概述 中原来的中原来的PSWPSW返回给返回给PSWPSW;SPSPSPSP1 1,即,即SP=62HSP=62H POP Acc POP Acc ;执行后,;执行后,ACC(SP)ACC(SP),即将,即将(62H)(62H)单元中单元中 原来的原来的AccAcc返回给返回给Acc Acc ;SPSPSPSP1 1,即,即SP=61HSP=61H RET RET ;执行后,;执行后,PCPC高高8 8位位(SP)(SP),即将,即将(61H)(61H)单元内单元内 容容10H10H传给传给PCPC高高8 8位,位,SPSPSPSP1 1,即,即SP=60HSP

31、=60H;PCPC低低8 8位位 (SP)(SP),即将,即将(60H)(60H)单元内容单元内容03H03H传给传给PCPC;低;低8 8位,位,SPSPSPSP 1 1,即,即SP=5FHSP=5FH 结果结果PC=1003H(PC=1003H(重新装入主程序断点地址重新装入主程序断点地址) ) 4.1 4.1 概述概述 汇编语言程序按其汇编语言程序按其结构结构可分为以下四类:可分为以下四类: (1)(1)顺序结构;顺序结构; (2)(2)分支结构;分支结构; (3)(3)循环结构;循环结构; (4)(4)子程序结构。子程序结构。 4.2 4.2 顺序结构程序顺序结构程序 4.2 4.2

32、顺序结构程序顺序结构程序 最简单的一种结构,又称简单程序。最简单的一种结构,又称简单程序。 特点:特点: 按照程序编写的顺序依次执行,不发生任何分支按照程序编写的顺序依次执行,不发生任何分支 或转移。或转移。( (程序走向只有一条路径。程序走向只有一条路径。) ) 例例 将两个半字节数组合成一个字节数。将两个半字节数组合成一个字节数。 设内部设内部RAMRAM中中40H40H、41H41H单元分别存放着单元分别存放着8 8位二进制数,位二进制数, 要求将两个单元中的低半字节合并成一个字节后,存入要求将两个单元中的低半字节合并成一个字节后,存入 42H42H单元。单元。40H40H的低的低4 4

33、位作为位作为42H42H的高的高4 4位。位。 4.2 4.2 顺序结构程序顺序结构程序 分析:分析: 首先要取数送首先要取数送A(A(传送指令传送指令) ),别离出低,别离出低4 4位位( (逻辑与逻辑与 0FH)0FH),用,用A A半字节交换送到高半字节交换送到高4 4位,地址加位,地址加1 1,取另一个数,取另一个数 低低4 4位数位数( (逻辑与逻辑与0FH)0FH),用或合成一个字节。,用或合成一个字节。 解:解: STARTSTART:MOV R1MOV R1,#40H#40H MOV AMOV A,R1R1 ANL A ANL A,#0FH #0FH ;取第一个半字节;取第一个

34、半字节 SWAP A SWAP A ;移至高;移至高4 4位位 4.2 4.2 顺序结构程序顺序结构程序 INC R1INC R1 XCH AXCH A,R1R1;取第二个字节;取第二个字节 ANL AANL A,#0FH #0FH ;取第二个半字节;取第二个半字节 ORL AORL A,R1R1;拼字;拼字 INC R1INC R1 MOV R1MOV R1,A A ;存放结果;存放结果 RETRET 例例 将将20H20H单元的两个单元的两个BCDBCD码拆开并变成码拆开并变成ASCASC码,存入码,存入21H21H、 22H22H单元。注意:单元。注意:ASCASC码码0 09 9为为3

35、0H30H39H39H。 分析:分析: 4.2 4.2 顺序结构程序顺序结构程序 把BCD数除以10,商A余B,刚好把两个 BCD码分别移到A、B的低4位,然后再各自与30H相“或 ,即变成ASC码。其程序框图如图4-1所示。 采用先把20H中低4位BCD码交换出来加 以转换、存放,然后再把高4位BCD码交换至低4位加以 转换、存放。其程序框图如图4-2所示。 4.2 4.2 顺序结构程序顺序结构程序 图图4-1 BCD4-1 BCD码转换为码转换为ASCIIASCII码方法一流程图解码方法一流程图解 4.2 4.2 顺序结构程序顺序结构程序 编程:编程: ORG 2000HORG 2000H

36、 MOV AMOV A,20H20H MOV BMOV B,#0AH #0AH ;用;用0AH0AH作除数作除数 DIV ABDIV AB ORL BORL B,#30H #30H ;低;低4 4位位BCDBCD码变成码变成ASCASC码码 MOV 22HMOV 22H,B B ORL AORL A,#30H #30H ;高;高4 4位位BCDBCD码变成码变成ASCASC码码 MOV 21HMOV 21H,A A ENDEND 4.2 4.2 顺序结构程序顺序结构程序 图图4-2 BCD4-2 BCD码转换为码转换为ASCIIASCII码方法二流程图解码方法二流程图解 4.2 4.2 顺序结

37、构程序顺序结构程序 编程:编程: ORG 2000HORG 2000H MOV R0MOV R0,#22H#22H MOV R0MOV R0,#00H #00H MOV AMOV A,20H20H XCHD AXCHD A,R0 R0 ORL 22HORL 22H,#30H #30H SWAP ASWAP A ORL AORL A,#30H#30H MOV 21HMOV 21H,A A END END 4.3 4.3 分支结构程序分支结构程序 4.3 4.3 分支结构程序分支结构程序 一、分支程序设计综述一、分支程序设计综述 分支结构程序:分支结构程序:根据程序要求无条件或有条件改变根据程序要

38、求无条件或有条件改变 程序执行的顺序,选择程序的流向。程序执行的顺序,选择程序的流向。 特点:特点:程序中含有转移类指令。程序中含有转移类指令。 关键:关键:正确选用转移指令。正确选用转移指令。 单重分支程序:单重分支程序:一个判断决策框,程序有两条出路。一个判断决策框,程序有两条出路。 4.3 4.3 分支结构程序分支结构程序 两种分支结构两种分支结构 4.3 4.3 分支结构程序分支结构程序 转移指令有转移指令有3 3种:种: 1 1、无条件转移无条件转移 程序转移方向是设计者事先安排的,与已执行程序程序转移方向是设计者事先安排的,与已执行程序 的结果无关,使用时只需给出正确的转移目标地址

39、或偏的结果无关,使用时只需给出正确的转移目标地址或偏 移量即可。移量即可。(LJMP(LJMP、AJMP AJMP 、SJMP)SJMP) 2 2、条件转移条件转移 根据已执行程序对标志位或根据已执行程序对标志位或A A或对内部或对内部RAMRAM某位的影某位的影 响结果,决定程序的走向,形成各种分支。响结果,决定程序的走向,形成各种分支。(JZ/JNZ(JZ/JNZ、 CJNECJNE、DJNZDJNZ、位控制转移类指令、位控制转移类指令) ) 在编写有条件转移语句时要特别注意以下两点:在编写有条件转移语句时要特别注意以下两点: (1)(1)在使用条件转移指令形成分支前,一定要安排可在使用条

40、件转移指令形成分支前,一定要安排可 供条件转移指令进行判别的条件。供条件转移指令进行判别的条件。 4.3 4.3 分支结构程序分支结构程序 例如,假设采用“JC rel指令,在执行此指令前 必须使用影响Cy标志的指令;假设采用“CJNE A,#data, rel指令,在执行此指令前必须使用改变A内容的指令, 以便为测试做准备。 (2)要正确选定所用的转移条件和转移目标地址。 3、散转(JMPA+DPTR ) 它是根据某种已输入的“或运算的结果,使程序 转向各个处理程序中去。 操作:把16位DPTR的内容与“或运算的结果与在A 中的8位无符号数相加,形成地址,装入PC,即散转的目 的地址。其操作

41、结果不影响A和DPTR。(JMP) 4.3 4.3 分支结构程序分支结构程序 二、无条件二、无条件/ /条件转移程序条件转移程序 分支程序中最常见的一类。其中,条件转移类程序分支程序中最常见的一类。其中,条件转移类程序 编写较容易出错,编写时需要确定转移条件。编写较容易出错,编写时需要确定转移条件。 例例 两个无符号数比较大小。同两个无符号数比较大小。同P59P59页例页例4-74-7 解解 设外部设外部RAMRAM存储单元存储单元ST1ST1和和ST2ST2中存放两个不带符中存放两个不带符 号的二进制数,找出其中的大数存入号的二进制数,找出其中的大数存入ST3ST3单元中。单元中。 4.3

42、4.3 分支结构程序分支结构程序 图图4-3 4-3 两个无符号数比较大小程序框图两个无符号数比较大小程序框图 4.3 4.3 分支结构程序分支结构程序 解:解: ORG 8000H ORG 8000H ST1 EQU 8040H ST1 EQU 8040H STARTSTART:CLR C CLR C ;进位位清;进位位清0 0 MOV DPTR MOV DPTR,#ST1 #ST1 ;读数据指针;读数据指针 MOVX A MOVX A,DPTR DPTR ;取第一个数;取第一个数 MOV R2 MOV R2,A A ;暂存;暂存R2R2 INC DPTR INC DPTR MOVX A M

43、OVX A,DPTR DPTR ;取第二个数;取第二个数 SUBB A SUBB A,R2 R2 ;两数比较;两数比较 JNC BIG1 JNC BIG1 ;假设;假设Cy=0Cy=0,那么转,那么转BIG1(BIG1(第二个数第二个数 大大) ) 4.3 4.3 分支结构程序分支结构程序 XCH A XCH A,R2 R2 ;第一个数大;第一个数大 BIG0 BIG0:INC DPTRINC DPTR MOVX DPTR MOVX DPTR,A A ;存大数;存大数 RET RET BIG1 BIG1:MOVX AMOVX A,DPTR DPTR ;第二个数大;第二个数大 SJMP BIG0

44、 SJMP BIG0 END END 上面程序中,应用带借位的减法指令上面程序中,应用带借位的减法指令SUBBSUBB比较两数比较两数 的大小。在执行指令前,应先把进位位清的大小。在执行指令前,应先把进位位清“0“0。执行。执行 JNCJNC指令后形成分支,指令中指令后形成分支,指令中BIG1BIG1为标号地址,表示相对为标号地址,表示相对 偏移量偏移量relrel。 4.3 4.3 分支结构程序分支结构程序 例例 设设5AH5AH单元中有一变量单元中有一变量X X,请编写计算以下函数式的程,请编写计算以下函数式的程 序,结果存入序,结果存入5BH5BH单元。单元。 同同P61P61页例页例4

45、-8.4-8. 4.3 4.3 分支结构程序分支结构程序 图图4-4 4-4 例程序流程图例程序流程图 4.3 4.3 分支结构程序分支结构程序 解:根据题意首先计算解:根据题意首先计算X2(X2(使用乘法使用乘法) )并暂存于并暂存于R1R1中,中, 因为因为X2X2最大值为最大值为225225,可只用一个存放器,然后根据,可只用一个存放器,然后根据X X值值 的范围,决定的范围,决定Y Y的值。的值。R0R0作中间存放器。作中间存放器。 编程:编程: ORG 2000H ORG 2000H MOV AMOV A,5AH5AH MOV B MOV B,A A MUL AB MUL AB ;A

46、X2AX2 MOV R1 MOV R1,A A MOV A MOV A,5AH 5AH ;重新把;重新把X X装入装入A A CJNE A CJNE A,#10#10,L1L1 4.3 4.3 分支结构程序分支结构程序 L1L1:JC L2 JC L2 ;C=1C=1,X X1010转转L2L2 MOV R0MOV R0,#41 #41 ;先假设;先假设X X1515 CJNE A CJNE A,#10H#10H,L3 L3 ;与;与1616比较比较 L3 L3:JNC L4 JNC L4 ; C=0 C=0,X X1515转转L4L4 MOV A MOV A,R1R1 ADD A ADD A

47、,#8 #8 ;10X1510X15,Y=X2+8 Y=X2+8 MOV R0 MOV R0,AA SJMP L4 SJMP L4 L2 L2:MOV AMOV A,R1R1 CLR CCLR C SUBB ASUBB A,#01#01 ;X X1010,Y=X2-1Y=X2-1 4.3 4.3 分支结构程序分支结构程序 MOV R0 MOV R0,AA L4 L4:MOV 5BHMOV 5BH,R0 R0 ;存结果;存结果 SJMP $ SJMP $ END END 由于此题的具体情况,在判别由于此题的具体情况,在判别(A)(A)1010和和(A)(A)1515时时 采用的是采用的是“CJN

48、E“CJNE和和“JC“JC以及以及“CJNE“CJNE和和“JNC“JNC两条两条 指令相结合的方法。指令相结合的方法。 条件分支程序与简单程序的区别在于:分支程序存条件分支程序与简单程序的区别在于:分支程序存 在两个或两个以上的结果。要根据给定的条件进行判断,在两个或两个以上的结果。要根据给定的条件进行判断, 以得到某一个结果。这样,就要用到比较命令、测试指以得到某一个结果。这样,就要用到比较命令、测试指 令以及无条件令以及无条件/ /条件转移指令。条件分支程序设计条件转移指令。条件分支程序设计 的技的技 巧,就在于正确而巧妙地使用这些命令。巧,就在于正确而巧妙地使用这些命令。 4.3 4

49、.3 分支结构程序分支结构程序 例题:求符号函数的值。片内例题:求符号函数的值。片内RAMRAM的的40H40H单元内有一自变量单元内有一自变量 X X,编制程序按如下条件求函数,编制程序按如下条件求函数Y Y的值,并将其存入片内的值,并将其存入片内 RAMRAM的的41H41H单元中。单元中。 1 1 X0X0 Y= 0 Y= 0 X=0 X=0 -1-1X0X255s255,因此单重循环程序无法实现,可采用,因此单重循环程序无法实现,可采用 双重循环的方法编写双重循环的方法编写50ms50ms延时程序。延时程序。 程序如下:程序如下: ORG 1000H DELAY: MOV R7, #2

50、00 ; 设置外循环次数此条指设置外循环次数此条指 令需要令需要1个个 机器周期机器周期 DLY1: MOV R6, #123 ; 设置内循环次数设置内循环次数 DLY2: DJNZ R6, DLY2 ;(R6)1=0,那么顺序执行,那么顺序执行, 否那么转否那么转 回回DLY2继续循环,延时时继续循环,延时时 间为间为 2s123=246s NOP ; 延时时间为延时时间为1s DJNZ R7,DLY1 ;(R7)1=0,那么顺序执,那么顺序执 行,否那么转行,否那么转 回回DLY1继续循环,延时继续循环,延时 时间为时间为 (246211)2002 RET ; 子程序结束子程序结束 END

51、 4.4 4.4 循环结构程序循环结构程序 例例 将将20H20H单元内的两个单元内的两个BCDBCD数相乘,相乘的结果要求数相乘,相乘的结果要求 仍为仍为BCDBCD数,乘积存入数,乘积存入21H21H单元。单元。 分析:两个分析:两个BCDBCD数最大的是数最大的是9999,9 99=819=81。假设采用。假设采用 “MUL“MUL指令,那么结果为指令,那么结果为51H51H,而对乘法没有十进制调,而对乘法没有十进制调 整指令。所以,在此必须采用加法与十进制调整指令重整指令。所以,在此必须采用加法与十进制调整指令重 复执行的方法。复执行的方法。 4.4 4.4 循环结构程序循环结构程序

52、图图4-8 BCD4-8 BCD数乘法流程图数乘法流程图 4.4 4.4 循环结构程序循环结构程序 解解 ORG 2000H ORG 2000H MOV A MOV A,20H 20H ANL A ANL A,#0FH#0FH;把;把BCDBCD数的低位别离出来数的低位别离出来 MOV R0 MOV R0,A A MOV A MOV A,20H 20H SWAP A SWAP A;变换;变换BCDBCD数的上下位数的上下位 ANL A ANL A,#0FH#0FH;把;把BCDBCD数的高位别离出来数的高位别离出来 MOV R1 MOV R1,A A CLR A CLR A;清;清A A 4.

53、4 4.4 循环结构程序循环结构程序 LPLP:ADD AADD A,R1R1 DA A DA A DJNZ R0 DJNZ R0,LPLP ;R0R0个个R1R1相加相加 MOV 21HMOV 21H,A A LP1:SJMP LP1 LP1:SJMP LP1 END END 本程序中,循环体只有本程序中,循环体只有ADDADD、DADA、DJNZ 3DJNZ 3条指令,这条指令,这 3 3条指令的作用是把乘法变为累加。条指令的作用是把乘法变为累加。 4.4 4.4 循环结构程序循环结构程序 例例 冒泡程序。冒泡程序。 设有设有n n个数,分别存放在个数,分别存放在RAMRAM中中LISTL

54、IST地址开始的连续地址开始的连续 存储单元中,要求将存储单元中,要求将n n个数比较大小之后,按由小到大的个数比较大小之后,按由小到大的 次序排列,再存入原存储区。设次序排列,再存入原存储区。设n=7n=7,参与比较的数为,参与比较的数为0 0, 1313,3 3,9090,2727,3232,1111。 分析:分析: 依次将相邻两个单元的内容进行比较。即第一个数依次将相邻两个单元的内容进行比较。即第一个数 与第二个数进行比较,第二个数与第三个数进行比较,与第二个数进行比较,第二个数与第三个数进行比较, 依此进行,如符合由小到大的顺序,那么不改变它们在依此进行,如符合由小到大的顺序,那么不改

55、变它们在 内存中的位置,否那么交换它们之间的位置。如此反复内存中的位置,否那么交换它们之间的位置。如此反复 比较,直到数列排完为止。比较,直到数列排完为止。 4.4 4.4 循环结构程序循环结构程序 由于在比较过程中,小数向上冒,因此这种排序程由于在比较过程中,小数向上冒,因此这种排序程 序称为序称为“冒泡程序,比较过程如下:冒泡程序,比较过程如下: 4.4 4.4 循环结构程序循环结构程序 第一轮经过第一轮经过6 6次两两比较,得到一个最大数;第二轮次两两比较,得到一个最大数;第二轮 经过经过5 5次两两比较,得到一个次大数;次两两比较,得到一个次大数; 依此类推。每轮比较后得到本轮最大数,

56、该数就不依此类推。每轮比较后得到本轮最大数,该数就不 再参与下一轮的比较,故每轮比较次数减再参与下一轮的比较,故每轮比较次数减1 1。为加快排序。为加快排序 速度,程序中设置一个标志位,只要在比较过程中两数速度,程序中设置一个标志位,只要在比较过程中两数 之间没有发生过交换,就表示数列已按由小到大的顺序之间没有发生过交换,就表示数列已按由小到大的顺序 排列好了,就可以结束比较。排列好了,就可以结束比较。 4.4 4.4 循环结构程序循环结构程序 图图4-9 冒泡程序流程图冒泡程序流程图 4.4 4.4 循环结构程序循环结构程序 设数列首地址存于设数列首地址存于R0R0中,中,R2R2为外循环次

57、数计数器,为外循环次数计数器, R3R3为内循环次数计数器,为内循环次数计数器,R1R1为交换标志。为交换标志。 解解 ORG 0050HORG 0050H LIST DB 0 LIST DB 0,1313,3 3,9090,2727,3232,1111 CNT EQU 07H CNT EQU 07H ORG 8000H ORG 8000H MOV R2 MOV R2,#CNT-1 #CNT-1 ;数列个数减;数列个数减1 1,这里,这里 (R2)=7-1(R2)=7-1 4.4 4.4 循环结构程序循环结构程序 LOOP1: MOV A LOOP1: MOV A,R2 R2 ;外循环计数值;

58、外循环计数值 MOV R3 MOV R3,A A ;内循环计数;内循环计数 MOV R1 MOV R1,#01H #01H ;交换标志位;交换标志位 LOOP2 LOOP2:MOV AMOV A,R0R0;取数据;取数据 MOV B MOV B,A A ;暂存;暂存B B INC R0 INC R0 CLR C CLR C SUBB A SUBB A,R0R0 ;两数比较;两数比较 JC LESS JC LESS ;XiXiXi+1Xi+1转转LESSLESS 4.4 4.4 循环结构程序循环结构程序 MOV A MOV A,B B ;取大数;取大数 XCH AXCH A,R0 R0 ;两数交

59、换位置;两数交换位置 DEC R0DEC R0 MOV R0 MOV R0,A A INC R0 INC R0 ;恢复数据指针;恢复数据指针 MOV R1MOV R1,#02H#02H;置交换标志位为;置交换标志位为2 2 LESS:DJNZ R3 LESS:DJNZ R3,LOOP2 LOOP2 ;内循环计数减;内循环计数减1 1,判一遍查完,判一遍查完? ? DJNZ R2 DJNZ R2,LOOP3LOOP3;外循环计数减;外循环计数减1 1,判排序结束,判排序结束? ? STOP STOP:RETRET 4.4 4.4 循环结构程序循环结构程序 LOOP3 LOOP3:DJNZ R1D

60、JNZ R1,LOOP1 LOOP1 ;发生交换转移;发生交换转移 SJMP STOPSJMP STOP END END 练习题:练习题:200200名学生参加考试,成绩放在名学生参加考试,成绩放在80C5180C51的外部的外部 RAMRAM的一个连续存储单元,的一个连续存储单元,9595100100分颁发分颁发A A级证书,级证书, 90909494分颁发分颁发B B级证书,低于级证书,低于9090分不计。编写程序,统分不计。编写程序,统 计获计获A A、B B级证书的人数。将结果存入内部级证书的人数。将结果存入内部RAMRAM的两个单的两个单 元。元。 注意:地址指针的分配注意:地址指针

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论