第4章习题-汇编语言程序设计(单片机第二版)
- 格式:doc
- 大小:1.44 MB
- 文档页数:20
单⽚机指令系统习题第四章汇编语⾔程序设计第⼀节汇编语⾔源程序的格式和伪指令(⼀)学习要求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 章 基础知识【教学目的】本章内容是本课程的基础,通过本章学习,使学生明确汇编语言程序设计的学科性质、基本内容和学习意义,掌握数制的转换、数据的编码,了解本门课程的教学要求和学习方法。
首页入门学习程序员计算机考研计算机电子书下载硬件知识网络知识专业课程答案下载视频教程下载第一章作者:佚名来源:网络1.1 用降幂法和除法将下列十进制数转换为二进制数和十六进制数:(1) 369 (2) 10000 (3) 4095 (4) 32767答:(1) 369=1 0111 0001B=171H(2) 10000=10 0111 0001 0000B=2710H(3) 4095=1111 1111 1111B=FFFH(4) 32767=111 1111 1111 1111B=7FFFH1.2 将下列二进制数转换为十六进制数和十进制数:(1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111答:(1) 10 1101B=2DH=45(2) 1000 0000B=80H=128(3) 1111 1111 1111 1111B=FFFFH=65535(4) 1111 1111B=FFH=2551.3 将下列十六进制数转换为二进制数和十进制数:(1) FA (2) 5B (3) FFFE (4) 1234答:(1) FAH=1111 1010B=250(2) 5BH=101 1011B=91(3) FFFEH=1111 1111 1111 1110B=65534(4) 1234H=1 0010 0011 0100B=46601.4 完成下列十六进制数的运算,并转换为十进制数进行校核:(1) 3A+B7 (2) 1234+AF (3) ABCD-FE (4) 7AB×6F答:(1) 3A+B7H=F1H=241(2) 1234+AFH=12E3H=4835(3) ABCD-FEH=AACFH=43727(4) 7AB×6FH=35325H=2178931.5 下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。
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.1 程序设计语言有哪三种?各有什么异同?汇编语言有哪两类语言?各有什么特点?4.2 在汇编语言程序设计中,为什么要采用标号来表示地址?标号的构成原则是什么?使用标号有什么限制?注释段起什么作用?4.3 MCS-51汇编语言有哪几条常用伪指令?各起什么作用?4.4 汇编语言程序设计分哪几步?各步骤的任务是什么?4.5 汇编语言源程序的机器汇编过程是什么?第二次汇编的任务是什么?4.6 请用除法指令编写例4.2的程序,并计算所占内存字节数和所需机器周期数。
4.7 设内部RAM 20H 单元有两个非零的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的存储区。
汇编语言程序设计(第二版)(清华大学IBM-PC 汇编语言程序设计(第二版)沈美明温冬婵编著)第二章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。
第三章2、答:(1)ADD DX, BX(2)ADD AL, [BX][SI](3)ADD [BX+0B2H], CX(4)ADD [0524H], 2A59H(5)ADD AL, 0B5H3、答:(1)MOV BX, OFFSET BLOCK + 0AHMOV DX, [BX](2)MOV BX, 0AHMOV DX, BLOCK[BX](3)MOV BX, OFFSET BLOCKMOV SI, 0AHMOV DX, [BX][SI]4、答:(1)1200H(2)0100H(3)4C2AH(4)3412H(5)4C2AH(6)7856H(7)65B7H6、答:MOV BX, 2000HLES DI, [BX]MOV AX, ES : [DI]7、答:(1)064DH(2)0691H(3)05ECH9、答:(1)MOV AX, [ BX+0CH ]MOV ZERO, AX(2)MOV AX, ARRAY[BX]MOV ZERO, AX10、答:(1)(AX)= 1234H(2)(AX)= 0032H11、答:(AX)= 1E00H12、答:LEA BX, CSTRINGMOV DL, [BX]MOV DH, [BX+6]13、答:14、答:LES BX, [2000]MOV AX, ES:[BX]16、答:(1)74D4H SF=0 ZF=0 CF=0 OF=0 (2)A5C1H SF=1 ZF=0 CF=0 OF=1 (3)3240H SF=0 ZF=0 CF=1 OF=0 (4)0000H SF=0 ZF=1 CF=1 OF=0(1)0C754H SF=1 ZF=0 CF=1 OF=0 (2)12B0H SF=0 ZF=0 CF=0 OF=0 (3)45B0H SF=0 ZF=0 CF=0 OF=1 (4)9F24H SF=1 ZF=0 CF=0 OF=021、答:(1)MOV AX, ZSUB AX, XADD AX, WMOV Z, AX(2)MOV BX, XADD BX, 6MOV CX, RADD CX, 9MOV AX, WSUB AX, BXSUB AX, CXMOV Z, AX(3)MOV AX, WIMUL XMOV BX, YADD BX, 6IDIV BXMOV Z, AXMOV R, DX22、答:NEG DXNEG AXSBB DX, 016、答:MOV AX, AMOV DX, A+2TEST DX, 8000HJZ STORE ; 为正NEG DXNEG AXSBB DX, 0STORE : MOV B, AXMOV B+2, DX17、答:(1)MOV AL, SSUB AL, 6DASADD AL, VDAAMOV U, ALMOV AL, ZSUB AL, UDASMOV U, ALMOV AL, XADD AL, WDAASUB AL, UDASMOV U, AL23、答:(1)(BX)= 9AH(2)(BX)= 61H(3)(BX)= 0FBH(4)(BX)= 1CH(5)(BX)= 0(6)(BX)= 0E3H26、答:把(DX)(AX)中的双字左移四位(乘以16)。
第四章习题与参考答案
4.1 程序设计语言有哪三种?各有什么异同?汇编语言有哪两类语言?各有什么特点?
4.2 在汇编语言程序设计中,为什么要采用标号来表示地址?标号的构成原则是什么?使用标号有什么限制?注释段起什么作用?
4.3 MCS-51汇编语言有哪几条常用伪指令?各起什么作用?
4.4 汇编语言程序设计分哪几步?各步骤的任务是什么?
4.5 汇编语言源程序的机器汇编过程是什么?第二次汇编的任务是什么?
4.6 请用除法指令编写例4.2的程序,并计算所占内存字节数和所需机器周期数。
4.7 设内部RAM 20H 单元有两个非零的BCD数,请编写求两个BCD数的积并把积送入21H单元的程序。
4.8 已知,从内部RAM BLOCK单元开始存放有一组带符号数,数的个数存放在LED单元。
请编写
可以统计其中正数和负数个数并分别存入NUM和NUM+1单元的程序。
4.9 设自变量X为一无符号数,存放在内部RAM的V AX单元,函数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=a 2+2ab+b 2 ,并把和存于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存储区,请画程序流程图。
解:
ORG 0030H
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: MOV 08H,@R0 ;第一个数送08H
INC R0
MOV A,@R0 ;第二个数送A
MOV 09H,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 ;恢复地址块指针
SETB 7FH ;交换标志位置1
LOOP4: DJNZ R2,LOOP2 ;若一次冒泡未完成,则BULOOP JB F0,LOOP1 ;交换标志位1,则BUBBLE
SJMP $ ;结束
END。