第4章习题 汇编语言程序设计(单片机第二版)

合集下载

单片机指令系统习题

单片机指令系统习题

单⽚机指令系统习题第四章汇编语⾔程序设计第⼀节汇编语⾔源程序的格式和伪指令(⼀)学习要求1、掌握汇编语⾔源程序格式和伪指令。

2、掌握各种伪指令功能。

(⼆)内容提要⼀:汇编语⾔源程序的格式1、语句格式汇编语⾔源程序是由汇编语句(即指令)组成的。

汇编语⾔⼀般由四部分组成。

其典型的汇编语句格式如下:标号:操作码操作数;注释START:MOV A,30H ;A←(30H)(1) 标号段标号是⽤户定义的符号地址。

(2) 操作码段操作码段是每⼀语句中不可缺少的部分,也是语句的核⼼部分,⽤于指⽰计算机进⾏何种操作,汇编程序就是根据这⼀字段⽣成⽬标代码的。

(3) 操作数段指出了参与操作的数据或存放该数据的地址。

通常有⽬的操作数和源操作数之分。

(4) 注释段为了增强程序的可读性,可在某⾏指令的后⾯⽤分号起头,加上注释,⽤以说明该条指令或该段程序的功能、作⽤,以供编程⼈员参考。

此注释内容程序汇编时CPU 不予处理,不产⽣⽬标代码。

⼆:伪指令1、定位伪指令ORG(Origin)格式:[标号:] ORG mm:16位⼆进制数,代表地址。

功能:指出汇编语⾔程序通过编译,得到的机器语⾔程序的起始地址。

2、定义字节伪指令DB(Define Byte)格式:[标号:] DB X1,X2,~XnXn:单字节⼆进制、⼗进制、⼗六进制数,或以… ?括起来的字符串,数据符号。

功能:定义程序存储器从标号开始的连续单元,⽤来存放常数、字符和表格。

3、定义字伪指令DW(Define Word)格式:[标号:] DW Y1,Y2,~YnYn:双字节⼆进制、⼗进制、⼗六进制数,或以… ?括起来的字符串,数据符号。

功能:同DB,不同的是为16位数据。

4、汇编结束命令END格式:[标号:] END功能:END是汇编语⾔源程序的汇编结束标志,在它后⾯所写的指令均不予处理。

5、等值命令EQU格式:字符名称EQU 数或汇编符号功能:将⼀个数或特定的汇编符号赋予规定的字符名称。

《汇编语言程序设计》教案及答案(第二版)

《汇编语言程序设计》教案及答案(第二版)

《汇编语言程序设计》教案附:习题参考答案《IBM-PC汇编语言程序设计》(第2版)沈美明、温冬婵编著教案编写时间:20XX年8月18日前言1.汇编语言是计算机能提供给用户的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。

2.汇编语言程序设计是高等院校电子计算机硬、软件及应用专业学生必修的核心课程之一。

它不仅是计算机原理、操作系统等其它核心课程的必要先修课,而且对于训练学生掌握程序设计技术、熟悉上机操作和程序调试技术都有重要作用。

3.本教材共有十一章,其内容安排如下:(1).第一、二章为汇编语言所用的基础知识。

(2).第三章详细介绍80x86系列CPU的指令系统和寻址方式。

(3).第四章介绍伪操作、汇编语言程序格式及汇编语言的上机过程。

(4).第五、六章说明循环、分支、子程序结构和程序设计的基本方法。

(5).第七章说明宏汇编、重复汇编及条件汇编的设计方法。

(6).第八章叙述输入/输出程序设计方法,重点说明中断原理、中断过程及中断程序设计方式。

(7).第九章说明BIOS和DOS系统功能调用的使用方法。

(8).第十~十一章分别说明图形显示、发声及磁盘文件存储的程序设计方法,同时提供各种程序设计方法和程序实例。

附:教学参考书1.沈美明、温冬婵编著,IBM–PC汇编语言程序设计(第2版),清华大学出版社,20XX年(教材)2.沈美明、温冬婵编著,IBM–PC汇编语言程序设计,清华大学出版社,1991年3.沈美明、温冬婵编著,IBM–PC汇编语言程序设计—例题习题集,清华大学出版社,1991年6月4.沈美明、温冬婵、张赤红编著,IBM–PC汇编语言程序设计—实验教程,清华大学出版社,1992年5.周明德,微型计算机IBM PC/XT(0520系列)系统原理及应用(修订版),清华大学出版社,19916.郑学坚、周斌,微型计算机原理及应用(第二版),清华大学出版社,19957.王士元、吴芝芳,IBM PC/XT[长城0520] 接口技术及其应用,南开大学出版社,19908.杨素行,微型计算机系统原理及应用,清华大学出版社,19959.戴梅萼、史嘉权,微型计算机技术及应用—从16位到32位(第二版),清华大学出版社,199610.张昆藏,IBM PC/XT微型计算机接口技术,清华大学出版社,199111.孟绍光,李维星,高档微机组成原理及接口技术(80386/80486/Pentium),学苑出版社,199312.吴秀清,周荷琴,微型计算机原理与接口技术,中国科学技术大学出版社目录第 1 章基础知识 (5)1.1进位计数制与不同基数的数之间的转换 (5)1.2二进制数和十六进制数的运算 (6)1.3计算机中数和字符的表示 (7)1.4几种基本的逻辑运算 (7)第 2 章80X86计算机组织 (8)2.180X86微处理器 (8)2.2基于微处理器的计算机系统构成 (8)2.3中央处理机 (9)2.4存储器 (10)2.5外部设备 (11)第 3 章80X86的指令系统和寻址方式 (12)3.180X86的寻址方式 (12)3.2程序占有的空间和执行时间 (14)3.380X86的指令系统 (14)第 4 章汇编语言程序格式 (31)4.1汇编程序功能 (31)4.2伪操作 (31)4.3汇编语言程序格式 (35)4.4汇编语言程序的上机过程 (38)第 5 章循环与分支程序设计 (40)5.1循环程序设计 (40)5.2分支程序设计 (41)5.3如何在实模式下发挥80386及其后继机型的优势 (41)第 6 章子程序结构 (43)6.1子程序的设计方法 (43)6.2子程序的嵌套 (44)6.3子程序举例 (44)第7 章高级汇编语言技术 (46)7.1宏汇编 (46)7.2重复汇编 (47)7.3条件汇编 (48)第8 章输入/输出程序设计 (49)8.1I/O设备的数据传送方式 (49)8.2程序直接控制I/O方式 (50)8.3中断传送方式 (50)第9 章BIOS和DOS中断 (53)9.1键盘I/O (53)9.2显示器I/O (55)9.3打印机I/O (56)9.4串行通信口I/O (57)第10 章图形与发声系统的程序设计 (58)10.1显示方式 (58)10.2视频显示存储器 (58)10.3EGA/VGA图形程序设计 (59)10.4通用发声程序 (60)10.5乐曲程序 (61)第11 章磁盘文件存取技术 (62)11.1磁盘的记录方式 (62)11.2文件代号式磁盘存取 (63)11.3字符设备的文件代号式I/O (64)11.4BIOS磁盘存取功能 (65)附录:《IBM—PC汇编语言程序设计》习题参考答案 (66)第一章.习题 (66)第二章.习题 (67)第三章.习题 (68)第四章.习题 (81)第五章.习题 (86)第六章.习题 (104)第七章.习题 (117)第八章.习题 (124)第九章.习题 (129)第十章.习题 (132)第十一章.习题 (143)第 1 章 基础知识【教学目的】本章内容是本课程的基础,通过本章学习,使学生明确汇编语言程序设计的学科性质、基本内容和学习意义,掌握数制的转换、数据的编码,了解本门课程的教学要求和学习方法。

第4章 汇编 语言程序设计

第4章  汇编 语言程序设计
14
汇编时,遇到“ 就停止“翻译” 因此, 汇编时,遇到“;” 就停止“翻译”。因此,注释字 段不会产生机器代码。 段不会产生机器代码。 4.1.3 伪指令 在汇编语言源程序中应有向汇编程序发出的指示信息, 在汇编语言源程序中应有向汇编程序发出的指示信息, 向汇编程序发出的指示信息 告诉它如何完成汇编工作,这是通过伪指令来实现。 伪指令来实现 告诉它如何完成汇编工作,这是通过伪指令来实现。 伪指令不属于指令系统中的汇编语言指令,它是程序员 伪指令不属于指令系统中的汇编语言指令, 发给汇编程序的命令,也称为汇编程序控制命令。 发给汇编程序的命令,也称为汇编程序控制命令。 命令 汇编程序控制命令 只有在汇编前的源程序中才有伪指令。 “伪”体现在 只有在汇编前的源程序中才有伪指令。 汇编后,伪指令没有相应的机器代码产生。 汇编后,伪指令没有相应的机器代码产生。 没有相应的机器代码产生 伪指令具有控制汇编程序的输入/输出、 伪指令具有控制汇编程序的输入/输出、定义数据和符 号、条件汇编、分配存储空间等功能。 条件汇编、分配存储空间等功能。
6
经过十几年努力,C51已成为单片机的实用高级编程语言。 经过十几年努力,C51已成为单片机的实用高级编程语言。 已成为单片机的实用高级编程语言 尽管目前已有不少设计人员使用C51来进行程序开发, 尽管目前已有不少设计人员使用C51来进行程序开发,但在 C51来进行程序开发 对程序的空间和时间要求较高的场合,汇编语言仍必不可少 程序的空间和时间要求较高的场合, 空间 要求较高的场合 。 在这种场合下,可使用C语言和汇编语言混合编程。 在这种场合下,可使用C语言和汇编语言混合编程。在很多 需要直接控制硬件且对实时性要求较高的场合,则更是非用 需要直接控制硬件且对实时性要求较高的场合, 汇编语言不可。 汇编语言不可。 掌握汇编语言并能进行程序设计, 掌握汇编语言并能进行程序设计,是学习和掌握单片机程 序设计的基本功之一。 序设计的基本功之一。 基本功之一 4.1.2 汇编语言语句和格式

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

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

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

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

在介绍之前,我们还是来学习汇编语言的一些基础知识)4.1 汇编语言程序设计概述1、计算机的汇编语言以助记符表示的指令,每一条指令就是汇编语言的一条语句。

(汇编语言程序设计实际上就是使用汇编指令来编写计算机程序。

汇编语言的语句有严格的格式要求)2、汇编语言的语句格式MCS-51汇编语言的语句格式表示如下:[<标号>]: <操作码> [<操作数>]; [<注释>]标号:指令的符号地址,有了标号,程序中的其它语句才能访问该语句。

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

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

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

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

操作数:给指令的操作提供数据或地址。

注释:是对语句或程序段的解释说明。

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

冒号(:)用于标号之后空格()用于操作码和操作数之间逗号(,)用于操作数之间,分割两个以上的操作数分号(;)用于注释之前。

《汇编语言程序设计》习题答案(第二版,沈美明,温冬婵,清华大学出版社)

《汇编语言程序设计》习题答案(第二版,沈美明,温冬婵,清华大学出版社)

1 汇编语言程序设计(第二版)第二章1、 答:直接由指令指定的I/O 端口数为256个。

2、答:3、答:字节单元:(30022H ) = AB H ,(30024H ) = EF H字单元: (30021H ) = AB34 H ,(30022H ) = CDAB H 。

4、答:3017:000A 的存储单元的物理地址是3017AH ,3015:002A 的存储单元的物理地址是3017AH ,3010:007A 的存储单元的物理地址是3017AH 。

5、答:该程序的第一个字的物理地址是0AAA40H 。

6、答:条件标志OF 、SF 、ZF 、CF 的值依次分别为0、0、0、0。

7、答:(1)AX 、BX 、CX 、DX 、AH 、AL 、BH 、BL 、CH 、CL 、DH 、DL 、 SP 、BP 、DI 、SI (注意:学生尽量不要用SP 参与加减运算)(2)CX(3)DX 、AX 、AH 、AL(4)CS 、DS 、ES 、SS(5)FLAGS(6)IP(7)SS 、SP 、BP8、答:可以用来指示存储器地址的寄存器有BX 、SP 、BP 、DI 、SI 、IP 、CS 、DS 、ES 、SS 。

9、答:唯一正确的是D 。

第三章1。

.(1)立即寻址 没有(2)直接寻址 7237H(3)使用BX 的寄存器寻址 没有(4)使用BX 的间接寻址 637DH(5)使用BX 的寄存器相对寻址 0D5F0H(6) 基址变址寻址 8E18H(7)相对基址变址 004FH2 2。

根据下列要求,写出相应的汇编指令。

(1)ADD DX,BX(2) ADD AL,[BX][SI](3) ADD [BX][0B2H], CX(4) MOV AX,2A59H ADD [0524H] ,AX(5) ADD AL ,0B5H3。

(1)寄存器间接寻址MOV BX,OFFSET [BLOCK][0AH]MOV DX ,[BX](2)寄存器相对寻址MOV SI,OAHMOV DX,[BLOCK][SI](3)基址变址寻址MOV BX ,BLOCKMOV SI,OAHMOV DX,[BX][SI]4现有(DS )=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(20201)=4CH,(21202)=B7H,(21203)=65H,试说明下列各条指令执行完后,AX 寄存器的内容。

第4章 单片机汇编语言程序设计

第4章  单片机汇编语言程序设计

RO 20HBCMDH BCDL
SWAP A ORL A, #30H MOV 21H, A SJMP $
;BCDH数送A的低4位 21 0011
;完成转换 @R0 ;存数
H22HB0C001D0HBCD 01000L
END
回目录 上页 下页
方法1小结:
以上程序用了8条指令,15个内存字节,执行时间为9个 机器周期。
21 0011BCDH H22H0011BCDL
回目录 上页 下页
程序:
ORG 1000H
MOV R0, #22H ;R0 22H MOV @R0,#0 ; 22H 0 MOV A, 20H ;两个BCD数送A
A
B00C01D01H0BB0CC0D0DHL
XCHD A, @R0 ;BCDL数送22H ORL 22H, #30H ;完成转换
例4-7:设30H单元存放的是一元二次方程ax2+bx+c = 0
根的判别式△= b2 – 4ac的值。
试根据30H单元的值,编写程序,
判断方程根的三种情况。
在31H中存放“0”代表无实根,
存放“1”代表有相同的实根,
存放“2”代表两个不同的实根。
解:△为有符号数,有三种情况,这是一多重分支程序
即小于零,等于零、大于零。
R3
R2
回目录 上页 下页
程序:
ORG 1000H CLR C CLR A SUBB A, R0 MOV R2, A CLR A
SUBB A, R1 MOV R3 , A SJMP $ END
;CY 0
;A 0
;低字节求补
;送R2
;A清零 R3 0000
;高字节求补 0000

第4章 MCS-51单片机汇编语言程序设计

第4章 MCS-51单片机汇编语言程序设计
开始
程序清单:
送转移地址序号
A,R3 ;取序号 A ;序号乘2 DPTR, #JTAB ;32个子程序 首地址送DPTR JMP @A+DPTR ;根据序号转移 JTAB: AJMP ROUT00 ;32个子程序首地址 AJMP ROUT01 … MP: MOV RL MOV AJMP ROUT31
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
【例4-1】
双字节二进制数求补。
程序说明:对R3(高8位)、R2(低8位)中的二进制定 点数取反加1即可得到其补码。
开始
程序清单:
BINPL:MOV A,R2 CPL A ADD A,#01H MOV R2,A MOV A,R3 CPL A ADDC A,#00H MOV R3,A RET ;低位字节取反 ;加1 ;低位字节补码送R2 ;高位字节取反 ;加进位 ;高位字节补码送R3
散转生成正确偏移号
置换指令地址表首址
转入R3指示的程序
AJMP
……
AJMP
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
3.循环程序
包括:循环初始化、循环处理、循环控制
开始 置初值 循环体 循环结束? Y 循环修改 N 循环体 循环结束? N Y 结束 循环修改 结束 开始 置初值
;调用查表子程序 ; 暂存R1中 ;调查表子程序 ;平方和存A中 ;等待
取第一个数→A 调查表子程序 结果存入R1 取下一个数→A 调查表子程序 两数平方相加 存结果
子程序清单:
SQR: INC A ;加RET占的一个字节 MOVC A,@A+PC ;查平方表 RET TAB: DB 0,1,4,9,16 DB 25,36,49,64,81 END

第4章 MCS-51单片机汇编语言程序设计(2)

第4章 MCS-51单片机汇编语言程序设计(2)
START:MOV DPTR,#TAB : MOV A,R7 ADD A,R7 MOV R3,A MOVC A,@A+DPTR
XCH A,R3 INC A MOVC A,@A+DPTR MOV DPL,A MOV DPH,R3 CLR A JMP @A+DPTR TAB DW DW A0 A1
…………. DW AN
INC
DPTR
MOVX A,@DPTR SUBB A,R7 JNC XCH BIG1 A,R7
BIG0:INC DPTR
实现程序如下: 实现程序如下
START:CLR C : MOV DPTR,#ST1 , MOVX A,@DPTR , MOV R7,A
MOVX @DPTR,A RET BIG1:MOVX A,@DPTR SJMP BIG0
实现程序如下: 实现程序如下 MOV 30H, 20H ANL 30H,#00011111B MOV A,21H SWAP A RL A ANL A,#11100000B ORL 30H,A
第4章 MCS-51单片机汇编语言程序设计
实现程序如下: 实现程序如下 例 A,@R1 ADDC4.3 做3个字节的 无符号的加法. 无符号的加法.设一个加 MOV R0,#52H , MOV @R0,A 数存放在内部RAM 50H、 RAM的 数存放在内部RAM的50H、 MOV R1,#55H , DEC R0 51H、52H单元中 单元中, 51H、52H单元中,另一 DEC R1 RAM的53H、 MOV A,@R0 个加数存放在RAM 个加数存放在RAM的53H、 MOV A,@R0 54H、55H单元中 单元中, 54H、55H单元中,相加 ADD A,@R1 结果存内部RAM的50H、 结果存内部RAM的50H、 RAM ADDC A,@R1 51H、52H单元 单元, 51H、52H单元,均从高 MOV @R0,A 字节开始存放, 字节开始存放,进位存放 MOV 00H,C 在位寻址区的00H位中。 00H位中 在位寻址区的00H位中。 MOV @R0,A DEC DEC R0 R1
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第四章习题与参考答案
4.1程序设计语言有哪三种?各有什么异同?汇编语言有哪两类语言?各有什么特点?
4.2在汇编语言程序设计中,为什么要采用标号来表示地址?标号的构成原则是什么?使用标号有什么限制?注释段起什么作用?
4.3MCS-51汇编语言有哪几条常用伪指令?各起什么作用?
4.4汇编语言程序设计分哪几步?各步骤的任务是什么?
4.5汇编语言源程序的机器汇编过程是什么?第二次汇编的任务是什么?
4.6请用除法指令编写例4.2的程序,并计算所占内存字节数和所需机器周期数。

4.7设内部RAM20H单元有两个非零的BCD数,请编写求两个BCD数的积并把积送入21H单元的程序。

4.8已知,从内部RAM BLOCK单元开始存放有一组带符号数,数的个数存放在LED单元。

请编写
可以统计其中正数和负数个数并分别存入NUM和NUM+1单元的程序。

4.9设自变量X为一无符号数,存放在内部RAM的VAX单元,函数Y存放在FUNC单元。

请编写满足如下关系的程序:
X>=50时:Y=X;
50>X>=20时:Y=5X;
X<20时:Y=2X;
4.10在例4.6的128分支程序中,若用LJMP指令代替AJMP指令,以便分支程序可以放在64KB地址范围的任务位置。

请修改原程序,修改后的程序最多可实现多少个分支?
4.11从外部RAM的SOUCE(二进制8位)开始有一数据块,该数据块以$字符结尾。

请编写程序,
把它们传送到以内部RAM的DIST为起始地址的区域($字符也要传送)。

4.12在例4.11中,若SOUCE为二进制16位,则程序又该如何编。

4.13在外部RAM的低256地址单元区,有起始地址为SOUCE且长度存放在LEN单元的数据块。

请编写能对它们进行奇偶校验的程序。

凡满足奇校验(奇数个1)的数据均送到内部RAM起始地址为DIST 的存储区。

4.14在例4.13中,若SOUCE的地址不在外部RAM的滴56地址区,则程序该如何编写。

4.15外部RAM从2000H到2100H有一数据块,请编写将它们传送到从3000H到3100H区域的程序。

4.16设有一起始地址为FIRST+1的数据块,存放在内部RAM单元,数据块长度存放在FIRST单元而且不为0,要求统计该数据块中正偶数和负奇数的个数,并将它们分别存放在PAPE单元和NAOE单元。

试画出能实现上述要求的程序流程图并编写相应程序。

4.17请编写能从以内部RAM的BLOCK为起始地址的100个无符号数中找出最小值并把它送入MIN 单元的程序。

4.18已知,在内部RAM中,共有6组无符号4字节被加数和加数分别存放在以FIRST和SUCOND 为起始地址的区域(低字节在前,高字节在后)。

请编程序和(设和也为4字节),并把和存于以SUM开始的区域。

4.19在内部RAM中,有一个以BLOCK为起始地址的数据块,块长存放在LEN单元。

请用查表指令编写程序,先检查它们是否十六进制数中的A~F,若是十六进制数中的A~F,则把它们变为ASCII码;若不是,则把它们变为00H。

4.20设在片内RAM的20H单元中有一数,其值范围为0~100,要求利用查表法求此数的平方值并把结果存入片外RAM的20H和21H单元(20H单元中为低字节),试编写相应程序。

4.21在内部RAM中,从BLOCK开始的存储区有10个单字节十进制数(每字节有2个BCD数),请编程序求BCD数之和(和为3位BCD数),并把它们存于SUM和SUM+1单元(低字节在SUM单元)。

4.22在例4.21中,若改为10个双字节十进制数求和(和为4位BCD数),结果仍存于从SUM开始的连续单元(低字节先存)。

请修改相应程序。

4.23已知MDA和MDB内分别存有两个小于10的整数,请用查表子程序实现c=a2+2ab+b2,并把和存于MDC和MDC+1单元(MDC中放低字节)。

4.24已知外部RAM起始地址为STR的数据块中有一以回车符CR断尾的十六进制ASCII码。

请编写程序,将它们变为二进制代码,放在起始地址为BDATA的内部RAM存储区中。

4.25设晶振频率为6MHZ,试编写能延时20ms的子程序。

4.26已知内部RAM的MA(被减数)和MB(减数)中分别有两个带符号数。

请编写减法子程序,并把差存入RESULT和RESULT+1(低8位在RESULT单元)中。

4.27设R0内为一补码形式的带符号被除数,R1内为补码形式的带符号除数,请通过编程完成除法,并把商置于R2内且余数置于R3内。

4.28设8031单片机外部RAM从1000H单元开始存放有100个无符号8位二进制数。

要求编写子程序,能把它们从大到小依次存入片内从10H开始的RAM存储区,请画程序流程图。

解:
ORG0030H
MOV R0,#10H
MOV R2,100
MOV DPTR,#1000H
MOV A,#00H
LOOP:MOVX A,@DPTR
MOV@R0,A
INC A
INC DPTR
DJNZ R2,LOOP
LOOP1:MOV R0,#10H;置数据块指针R0
MOV R2,#100;块长送R2
CLR F0;交换标志F0清零
DEC R2;块长-1为比较次数
LOOP2:MOV08H,@R0;第一个数送08H
INC R0
MOV A,@R0;第二个数送A
MOV09H,A;第二个数送A
CJNE A,08H,LOOP3;(11H)和(10H)作比较
LOOP3:JC LOOP4;若(09H)<(08H),则BUNEXT MOV@R0,08H;若(09H)>=(08H),则两者交换
DEC R0
MOV@R0,09H
INC R0;恢复地址块指针
SETB7FH;交换标志位置1
LOOP4:DJNZ R2,LOOP2;若一次冒泡未完成,则BULOOP JB F0,LOOP1;交换标志位1,则BUBBLE
SJMP$;结束
END。

相关文档
最新文档