第3章_单片机的汇编语言与程序设计题解
- 格式:doc
- 大小:58.50 KB
- 文档页数:5
第三章MCS51单片机的指令系统和汇编语言程序示例(第5、6、7节)1.试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?(1)MOV A,#19HADD A,#66H(2)MOV A,#5AHADD A,#6BH2.已知:A=85H,R0=30H,(30H)=11H, (31H)=0FFH,C=1,试计算单片机执行下列指令后累加器A和C中的值各是多少?(1)ADDC A,R0, (2)ADDC A,31H(3) ADDC A,@R0, (4) ADDC A,#85H3.已知M1和M2中分别存放两个16位无符号数的低8位,M1+1和M2+1中分别存放两个16位无符号数的高8位,计算两数之和(低8位存放在M1,高8位存放在M1+1,设两数之和不超过16位)。
4.试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?CLR CMOV A,#52HSUBB A,#0B4H5.已知:A=0DFH,R1=40H,R7=19H,(30H)=00H,(40H)=0FFH,试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?(1) DEC A (2) DEC R7 (3) DEC 30H (4) DEC @R16.试写出能完成85+59的BCD加法程序,并对工作过程进行分析。
7.已知:两个8位无符号乘数分别放在30H和31H单元中,编程实现他们乘积的低8位存放在32H,高8位存放在33H。
8.已知:R0=30H,(30H)=0AAH,试分析执行下列指令后累加器A和30H单元的内容是什么?(1)MOV A, #0FFH ANL A, R0(2)MOV A, #0FH ANL A, 30H(3)MOV A, #0F0H ANL A, @R0(4)MOV A, #80H ANL 30H, A9.设:A=0AAH和P1=0FFH,试编程把累加器A的低四位送入P1口的低四位,P1口的高四位保持不变。
第三章MCS51单片机的指令系统和汇编语言程序示例(第5、6、7节)1.试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?(1)MOV A,#19HADD A,#66H(2)MOV A,#5AHADD A,#6BH2.已知:A=85H,R0=30H,(30H)=11H, (31H)=0FFH,C=1,试计算单片机执行下列指令后累加器A和C中的值各是多少?(1)ADDC A,R0, (2)ADDC A,31H(3) ADDC A,@R0, (4) ADDC A,#85H3.已知M1和M2中分别存放两个16位无符号数的低8位,M1+1和M2+1中分别存放两个16位无符号数的高8位,计算两数之和(低8位存放在M1,高8位存放在M1+1,设两数之和不超过16位)。
4.试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?CLR CMOV A,#52HSUBB A,#0B4H5.已知:A=0DFH,R1=40H,R7=19H,(30H)=00H,(40H)=0FFH,试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?(1) DEC A (2) DEC R7 (3) DEC 30H (4) DEC @R16.试写出能完成85+59的BCD加法程序,并对工作过程进行分析。
7.已知:两个8位无符号乘数分别放在30H和31H单元中,编程实现他们乘积的低8位存放在32H,高8位存放在33H。
8.已知:R0=30H,(30H)=0AAH,试分析执行下列指令后累加器A和30H单元的内容是什么?(1)MOV A, #0FFH ANL A, R0(2)MOV A, #0FH ANL A, 30H(3)MOV A, #0F0H ANL A, @R0(4)MOV A, #80H ANL 30H, A9.设:A=0AAH和P1=0FFH,试编程把累加器A的低四位送入P1口的低四位,P1口的高四位保持不变。
《16/32 位微机原理、汇编语言及接口技术教程》部分习题参考解答第1 章微型计算机系统概述〔习题1.2 〕什么是通用微处理器、单片机(微控制器)、芯片、嵌入式系统?〔解答〕通用微处理器:适合较广的应用领域的微处理器,例如装在机、笔记本电脑、工作站、服务器上的微处理器。
单片机:是指通常用于控制领域的微处理器芯片,其内部除外还集成了计算机的其他一些主要部件,只需配上少量的外部电路和设备,就可以构成具体的应用系统。
芯片:称数字信号处理器,也是一种微控制器,其更适合处理高速的数字信号,内部集成有高速乘法器,能够进行快速乘法和加法运算。
嵌入式系统:利用微控制器、数字信号处理器或通用微处理器,结合具体应用构成的控制系统,其典型的特点是把计算机直接嵌入到应用系统之中。
〔习题1.5 〕说明微型计算机系统的硬件组成及各部分作用。
〔解答〕:也称处理器,是微机的核心。
它采用大规模集成电路芯片,芯片内集成了控制器、运算器和若干高速存储单元(即寄存器)处理器及其支持电路构成了微机系统的控制中心,对系统的各个部件进行统一的协调和控制。
存储器:存储器是存放程序和数据的部件。
外部设备:外部设备是指可与微机进行交互的输入()设备和输出()设备,也称设备。
设备通过接口与主机连接。
总线:互连各个部件的共用通道,主要含数据总线、地址总线和控制总线信号。
习题1.6 〕什么是总线?微机总线通常有哪3 组信号?各组信号的作用是什么?〔解答〕总线:传递信息的共用通道,物理上是一组公用导线。
3 组信号线:数据总线、地址总线和控制总线。
(1)地址总线:传输将要访问的主存单元或端口的地址信息。
(2)数据总线:传输读写操作的数据信息。
(3)控制总线:协调系统中各部件的操作。
习题1.7 〕简答如下概念:(1)计算机字长(2)取指-译码-执行周期(3)(4)中断(5)总线解答〕(1)处理器每个单位时间可以处理的二进制数据位数称计算机字长。
(2)指令的处理过程,即指处理器从主存储器读取指令(简称取指),翻译指令代码的功能(简称译码),然后执行指令所规定的操作(简称执行)的过程。
1.计算机体系结构:哈佛结构、冯诺依曼结构的区别?哈佛结构RAM和ROM分别编址,冯诺依曼结构RAM和ROM统一编址2.MSC-51单片机外部引脚的名称是什么?各有什么功能?答:(1) 电源及晶振引脚VCC(40脚):+5V电源引脚VSS(20脚):接地引脚XTAL1(19脚);外接晶振引脚(内置放大器输入端)XTAL2(18脚):外接晶振引脚(内置放大器输出端)(2) 控制引脚RST/V PD(9)为复位/ 备用电源引脚ALE/PROG(30)为地址锁存使能输出/ 编程脉冲输入PSEN(29):输出访问片外程序存储器读选通信号EA/ VPP (31):外部ROM允许访问/ 编程电源输入(3) 并行I/O口引脚P0.0~P0.7(39~32脚)——P0口;P1.0~P1.7(1~8脚)——P1口;P2.0~P2.7(21~28脚)——P2口;P3.0~P3.7(10~17脚)——P3口。
3. AT89C51单片机的片内资源有哪些?其存储器结构如何?片内RAM可分成哪个三个区?各区的地址范围如何?其内部功能部件有:控制器:是对取自程序存储器中的指令进行译码,在规定的时刻发出各种操作所需的控制信号,完成指令所规定的功能;运算器:根据控制器发来的信号,执行算术逻辑运算操作;存储器:包括程序存储和数据存储器;定时器计数器:2个16位定时器/计数器,可对机器周期计数,也可对外部输入脉冲计数;中断系统:可响应三个内部中断源和两个外部中断源的中断请求;输入输出接口:4个8位并行口和一个全双工串行口;其存储器结构属于哈佛结构,MCS-51可寻址空间是两个64KB,即64KB的程序存储空间和64KB的数据存储空间。
片内RAM可分成划分为三个部分:①作寄存器区(00H-1FH),四组②可位寻址区(20H-2FH)③用户RAM区(30H-7FH),80B7.程序状态字寄存器PSW各位的定义是什么?答:程序状态字寄存器PSW各位的定义如下:PSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0PSW.7:进/借位标志CY,加法有进位时置1,减法有借位时置1;PSW.6:辅助进位标志AC,加法运算低四位向高上四位有进位时置1;PSW.5、PSW.1:用户标志位F0和用户标志位F1,保存用户的位数据;PSW.4、PSW.3:工作寄存器选择控制位RS1和RS0,00至11分别选择四组工作之一作为当前工作寄存器PSW.2 :溢出标志位OV,有符号数加、减运算结果有溢出或乘除上结果异常(乘法运算结果大于255即乘积在BA中,或除法运算除数为0)时置1PSW.0:奇偶标志位P,累加器A中1的个数为奇数时置1。
第3章思考题及习题3参考答案一、填空1.访问SFR,只能使用寻址方式。
答:直接.2.指令格式是由和组成,也可仅由组成。
答:操作码,操作数,操作码。
3.在基址加变址寻址方式中,以作为变址寄存器,以或作为基址寄存器。
答:A,PC,DPTR4.假定累加器A中的内容为30H,执行指令1000H:MOVC A,@A+PC后,把程序存储器单元的内容送入累加器A中。
答:1031H5.在AT89S52中,PC和DPTR都用于提供地址,但PC是为访问存储器提供地址,而DPTR是为访问存储器提供地址。
答:程序,数据6.在寄存器间接寻址方式中,其“间接”体现在指令中寄存器的内容不是操作数,而是操作数的 .答:地址7.下列程序段的功能是。
答:A的内容与B的内容互换。
PUSH AccPUSH BPOP AccPOP B8.已知程序执行前有(A)=02H,(SP)=52H,(51H)=FFH,(52H)=FFH.下述程序执行后, (A)= ,(SP)= ,(51H)= ,(52H)= ,(PC)=。
POP DPHPOP DPLMOV DPTR,#4000HRL AMOV B,AMOVC A,@A+DPTRPUSH AccMOV A,BINC AMOVC A,@A+DPTRPUSH AccRETORG 4000HDB 10H,80H,30H,50H,30H,50H答:(A)=50H,(SP)=50H,(51H)=30H,(52H)=50H,(PC)=5030H9.假定(A)=83H,(R0)=17H,(17H)=34H,执行以下指令后,(A)= .ANL A,#17HORL 17H,AXRL A,@R0CPL A答:(A)=0CBH。
10.假设(A)=55H,(R3)=0AAH,在执行指令“ANL A,R3”后,(A)= ,(R3)= .答:(A)=00H,(R3)=0AAH。
11.如果(DPTR)=507BH,(SP)=32H,(30H)=50H,(31H)=5FH,(32H)=3CH,则执行下列指令后,(DPH)= ,(DPL)= ,(SP)= 。
单⽚机原理与应⽤(盛珣华)习题和思考题答案习题和思考题答案第⼀章单⽚机概述1. 第⼀台电⼦数字计算机发明的年代和名称。
1946年、ENIAC。
2. 根据冯·诺依曼提出的经典结构,计算机由哪⼏部分组成?运算器、控制器、存储器、输⼊设备和输出设备组成。
3. 微型计算机机从20世纪70年代初问世以来,经历了哪四代的变化?经历了4位、8位、16位、32位四代的变化。
4. 微型计算机有哪些应⽤形式?系统机、单板机、单⽚机。
5. 什么叫单⽚机?其主要特点有哪些?单⽚机就是在⼀⽚半导体硅⽚上,集成了中央处理单元(CPU)、存储器(RAM、ROM)、并⾏I/O、串⾏I/O、定时器/计数器、中断系统、系统时钟电路及系统总线的⽤于测控领域的微型计算机,简称单⽚机。
单⽚机技术易于掌握和普及、功能齐全,应⽤⼴泛、发展迅速,前景⼴阔、嵌⼊容易,可靠性⾼。
6. 举例说明单⽚机的应⽤?略7. 当前单⽚机的主要产品有哪些?各⾃有何特点?MCS是Intel公司⽣产的单⽚机的系列符号,MCS-51系列单⽚机是Intel公司在MCS-48系列的基础上于20世纪80年代初发展起来的,是最早进⼊我国,并在我国应⽤最为⼴泛的单⽚机机型之⼀,也是单⽚机应⽤的主流品种。
其它型号的单⽚机:PIC单⽚机、TI公司单⽚机、A VR系列单⽚机。
8. 简述单⽚机应⽤系统的开发过程。
(1)根据应⽤系统的要求进⾏总体设计总体设计的⽬标是明确任务、需求分析和拟定设计⽅案,确定软硬件各⾃完成的任务等。
总体设计对应⽤系统是否能顺利完成起着重要的作⽤。
(2)硬件设计根据总体设计要求设计并制作硬件电路板(即⽬标系统),制作前可先⽤仿真软件(如Proteus软件)进⾏仿真,仿真通过后再⽤硬件实现并进⾏功能检测。
(3)软件设计软件编程并调试,⽬前⼀般⽤keil软件进⾏设计调试。
调试成功后将程序写⼊⽬标单⽚机芯⽚中。
(4)综合调试进⾏硬软件综合调试,检测应⽤系统是否达到设计的功能。
思考题:【3-1】汇编语言与C语言哪种语言的可读性和可移植性强?在对速度和时序敏感的场合应该使用什么语言?对于复杂的单片机系统一般采用C与汇编混合编程的形式这句话对吗?【3-2】二进制机器语言与C和汇编语言两者之间是什么关系?用C或汇编编制的程序在ROM中是以编译后的二进制代码的形式存放这句话对吗?【3-3】80C51系列单片机指令的格式包含哪几个部分?各部分之间的间隔符是什么?四个部分中哪个部分是必须存在的,哪几个部分是可有可无的?标号的格式和代表的意义是?【3-4】80C51系列单片机有哪几种寻址方式?【3-5】80C51单片机中立即数是存放在ROM中还是RAM中?【3-6】判断下列说法是否正确。
(1)立即数寻址方式是被操作的数据本身就在指令中,而不是它的地址在指令中。
()(2)指令周期是执行一条指令的时间。
()(3)指令中直接给出的操作数称为直接寻址。
()(4)内部寄存器Rn(n=0~7)可作为间接寻址寄存器。
()【3-7】80C51单片机可以进行直接寻址的区域是?【3-8】80C51单片机可以进行寄存器寻址的范围是?【3-9】80C51单片机可以进行寄存器间接寻址的寄存器是?寻址的范围是?【3-10】在寄存器间接寻址方式中,其“间接”体现在指令中寄存器的内容不是操作数,而是操作数的()。
【3-11】80C51单片机变址寻址方式中可以作基址的寄存器是?可以作变址的寄存器是?@A+PC,@A+DPTR所找到的操作数是在ROM中对吗?【3-12】80C51单片机相对寻址改变的是PC的当前值,即改变的CPU执行指令的顺序这句话对否?【3-13】若访问特殊功能寄存器,只可以采用那种寻址方式?【3-14】若访问外部RAM单元,只可以使用哪种寻址方式?【3-15】若访问内部RAM单元,可使用哪些寻址方式?【3-16】若访问内外程序存储器,可使用哪些寻址方式?【3-17】80C51单片机可以进行位寻址的字节单元范围除11个可位寻址的特殊功能寄存器外还包括哪个区域?分别找出位地址是00H、08H、22H、7FH、D0H、E0H对应的字节地址?【3-18】已知(30H)=40H,(40H)=10H,(10H)=32H,(P1)=0EFH,试写出执行以下程序段后有关单元的内容。
单⽚机原理及接⼝技术课后答案第三章第三章1、指令:CPU根据⼈的意图来执⾏某种操作的命令指令系统:⼀台计算机所能执⾏的全部指令集合机器语⾔:⽤⼆进制编码表⽰,计算机能直接识别和执⾏的语⾔汇编语⾔:⽤助记符、符号和数字来表⽰指令的程序语⾔⾼级语⾔:独⽴于机器的,在编程时不需要对机器结构及其指令系统有深⼊了解的通⽤性语⾔2、见第1题3、操作码 [⽬的操作数] [,源操作数]6、 MOV A,40H ;直接寻址(40H)→AMOV R0,A;寄存器寻址(A)→R0MOV P1,#0F0H ;⽴即数寻址0F0→P1MOV @R0,30H;直接寻址(30H)→(R0)MOV DPTR,#3848H;⽴即数寻址 3848H→DPTRMOV 40H,38H;直接寻址(38H)→40HMOV R0,30H;直接寻址(30H)→R0MOV P0,R0;寄存器寻址( R0 )→P0MOV 18H,#30H ;⽴即数寻址30H→18HMOV A,@R0 ;寄存器间接寻址 ((R0)) →AMOV P2,P1 ;直接寻址(P1)→P2最后结果:(R0)=38H,(A)=40H,(P0)=38H,(P1)=(P2)=0F0H,(DPTR)=3848H,(18H)=30H,(30H)=38H,(38H)=40H,(40H)=40H,(48H)=38H注意:→左边是内容,右边是单元7、⽤直接寻址,位寻址,寄存器寻址8、MOV A,DATA ;直接寻址2字节1周期MOV A,#DATA ;⽴即数寻址2字节1周期MOV DATA1,DATA2 ;直接寻址3字节2周期MOV 74H,#78H ;⽴即数寻址3字节2周期如果想查某⼀指令的机器码,字节数或周期数可查阅书本后⾯的附录A9、MOV A,@R0 ;((R0))=80H→AMOV @R0,40H ;(40H)=08H→(R0)MOV 40H,A ;(A)=80→40HMOV R0,#35H ;35H→R0最后结果:(R0)=35H (A)=80H,(32H)=08H,(40H)=80H10、⽤直接寻址,位寻址,寄存器寻址11、只能采⽤寄存器间接寻址(⽤MOVX指令)12、低128字节:直接寻址,位寻址,寄存器间接寻址,寄存器寻址(R0~R7)⾼128字节:直接寻址,位寻址,寄存器寻址13、采⽤变址寻址(⽤MOVC指令)14、压缩BCD码在进⾏加法运算时应逢⼗进⼀,⽽计算机只将其当作⼗六进制数处理,此时得到的结果不正确。
第三章单片机的汇编语言与程序设计习题1.设内部RAM中59H单元的内容为50H,写出当执行下列程序段后寄存器A,R0和内部RAM中50H,51H单元的内容为何值?MOV A,59HMOV R0,AMOV A,#00HMOV @R0,AMOV A,#25HMOV 51H,AMOV 52H,#70H解: MOV A,59H ; A=50HMOV R0,A ; RO=50HMOV A,#00H ; A=00HMOV @R0,A ; 50H=00HMOV A,#25H ; A=25HMOV 51H,A ; 51H=25HMOV 52H,#70H ; 52H=70H所以:A=25H R0=50H ; 50H=00H 51H=25H2.请选用合适的指令对P0口内容做修改(例如使P0.0~P0.3不变,P0.4~P0.7为0)。
解: MOV A,P0ANL A,0fhMov P0,A3.试问外部数据存储器和程序存储器可以用哪些指令来实现?举例说明。
解:访问外部数据存储器指令有:MOVX @DPTR,A MOVX DPTR,#0100H MOV @DPTR,AMOVX A,@DPTR MOVX DPTR,#0200H MOV A,@DPTRMOVX A,@Ri MOVX A,@R0MOVX @Ri,A MOVX @RI,A访问程序存储器指令有:MOVX A,@A+PCMOVX A,@A+DPTR4.设堆栈指针SP中的内容为60H,内部RAM中30H和31H单元的内容分别为24H 和10H,执行下列程序段后,61H,62H,30H,31H,DPTR及SP中的内容将有何变化?PUSH 30HPUSH 31HPOP DPLPOP DPHMOV 30H,#00HMOV 31H,#0FFH解:PUSH 30H ;61H=24HPUSH 31H ;62=10H SP=62HPOP DPL ;DPL=10HPOP DPH ;DPH=24H SP=60HMOV 30H,#00H ;30H=00HMOV 31H,#0FFH ;31H=0FFH5.设(A)=40H,(R1)=23H,(40H)=05H。
第3章单片机的汇编语言与程序设计习题1.MCS-51单片机有哪几种寻址方式?适用于什么地址空间?答:MCS-51单片机有7种寻址方式:直接寻址、寄存器寻址、寄存器间接寻址、立即寻址、变址寻址、位寻址、相对寻址。
直接寻址方式:操作数的地址由指令直接给出,适用于片内RAM的所有地址空间;如MOV A,68HMOV A,PSW寄存器寻址方式:指令给出的是寄存器的编码,操作数在编码指定的寄存器中,适用于片内00H至1FH的32个字节,用R0,…,R7表示,通过PSW的RS1和RS0选择组号确定对应32个字节中的其中8个,还有累加器A,以及乘除法指令中的A和B寄存器,位寻址方式中的布尔累加器C;MOV A,R1MUL ABINC DPTR寄存器间接寻址方式:指令给出的是寄存器的编码,操作数地址在编码指定的寄存器中,适用于片内RAM的全部空间,其中52系列中的80H至FFH只能用寄存器间接寻址;如MOV A,@R0MOV A,@R1MOVX A,@DPTR立即寻址方式:操作数本身在指令中直接,给出适用于用8位立即数对片内RAM所有地址单元赋值,也可用16位立即数对DPTR赋值;如MOV A,#0E2HMOV DPTR,#2000H变址寻址方式:以DPTR或PC作为基地址寄存器,以累加器A作为变址寄存器,将基址寄存器与变址寄存器的内容相加形成操作数的实际地址的一种寻址方式,变址寻址方式适用于程序存储器ROM,仅有三条指令如下:MOVC A,@A+DPTRMOVC A,@A+PCJMP @A+DPTR位寻址方式:指令中直接给出操作数所在单元的位地址,适用于片内RAM 中地址20H至2FH中的16个字节中的128个位地址空间和80H至FFH中地址中可以被8整除的所有SFR中的每个位地址空间;如MOV C,7FHMOV F0,CMOV C,ACC.7相对寻址方式:为相对转移指令而设,指令中直接给出转移的相对偏移量,其转移目标在当前指令-128至+127字节范围内的地址空间。
如SJMP STARTHERE: SJMP HERE ;等效于:SJMP $2.MCS-51单片机的PSW程序状态字中无ZERO(零)标志位,怎样判断某内部数据单元的内容是否为零?答:M CS-51单片机的PSW程序状态字中无ZERO(零)标志位,判断某内部数据单元的内容是否为零是能通过取数到A累加器,再判断A中的每一位是否为零来确定其值是否为零。
3.编程将内部RAM的20H--30H单元内容清零。
解:设一个片内RAM指针R0,先指向首地址20H,通过累加器A清零,然后采用间接寻址方式依次将A中的零值传送到指针所指的片内RAM单元,每传送一个字节,地址指针加1,直到达到地址为30H或达到计数器规定的17个字节为止。
程序1:MOV R0,#20H ;设地址指针初值CLR A ;累加器清0CONT: MOV @R0,A ;置0指针所指单元INC R0 ;地址指针加1CJNE R0,#31H,CONT ;指针未超过终点则继续SJMP $ ;暂停程序2:MOV R0,#20H ;设地址指针初值CLR A ;累加器清0MOV R7,#17 ;计数器赋初值,从20H到30H共17个字节CONT: MOV @R0,A ;置0指针所指单元INC R0 ;地址指针加1DJNZ R7,CONT ;计数器减1,非0,则继续SJMP $ ;暂停4.编程查找内部RAM的32H~41H单元中是否有0AAH这个数据,若有这一数据,则将50H单元置为0FFH,否则将50H单元清零。
解:设一个片内RAM指针R0,先指向首地址32H,比较@R0与#0AAH,若相等,则退出循环,给50H单元赋0FFH,若不相等,则R0加1为继续比较下一个字节做准备,直到达到地址为41H或达到计数器规定的16个字节为止还没找到,则给50H单元赋00H程序1:MOV R0,#32H ;设地址指针初值CONT: CJNE @R0,#0AAH,NEXT;比较查找值与指针所指单元的值,不相等转移MOV A,#0FFH ;相等,则准备好要赋的标志值0FFHSJMP DOWN ;转存到保存结果处NEXT: INC R0 ;修改地址指针CJNE R0,#42H,CONT ;若指针未越过终点,则继续MOV A,#00H ;查找失败,则将00H存入结果标志单元DOWN: MOV 50H,A ;将比较结果标志存入50H单元SJMP $ ;暂停END程序2:MOV R7,#16 ;计数器赋初值,从20H到30H共16个字节MOV R0,#32H ;设地址指针初值CONT: CJNE @R0,#0AAH,NEXT ;比较查找值与指针所指单元的值,不相等转移MOV A,#0FFH ;相等,则准备好要赋的标志值0FFHSJMP DOWN ;转存到保存结果处NEXT: INC R0 ;修改地址指针DJNZ R7,CONT ;计数器减1,非0,则继续MOV A,#00H ;查找失败,则将00H存入结果标志单元DOWN: MOV 50H,A ;将比较结果标志存入50H单元SJMP $ ;暂停END5.查找20H~4FH单元中出现00H的次数,并将查找结果存入50H单元。
解:从20H到4FH共48个字节MOV R7,#48 ;字节计数器赋初值MOV R0,#20H ;设地址指针初值CONT: CJNE @R0,#00H,NEXT ;比较查找值与指针所指单元的值,不相等转移INC R6 ;相等,0的个数计数器加1NEXT: INC R0 ;修改地址指针DJNZ R7,CONT ;计数器减1,非0,则继续MOV 50H,R6 ;保存O的个数计数值到50H单元SJMP $ ;暂停END6.已知A=83H,R0=17H,(17H)=34H,写出下列程序段执行之后的A中的内容。
ANL A,#17HORL 17H,AXRL A,@R0CPL A∨答:ANL A,#17H ;A=03HORL 17H,A ;(17H)=0011 0100 ∨ 0000 0011=0011 0111XRL A,@R0 ;A= 0000 0011 ∨ 0011 0111 =0011 0100CPL A ;A=1100 10117.已知单片机的晶振频率为12MHz,分别设计延时为0.1s、1s的子程序。
答:已知单片机的晶振频率为12MHz,则机器周期为1us,延时子程序是通过执行指令序列中机器周期数来达到,如果要0.1s,即100ms,也就是100000us,所以需要机器周期数达到100000。
要延时达到1S,可通过对延时为0.1秒的子程序调用10次来实现。
DELAY100MS: MOV R6,#200 ;1个机器周期D1: MOV R7,#250 ;1个机器周期D2: NOP ;1个机器周期DJNZ R7,D2 ;2个机器周期,3*251=753DJNZ R6,D1 ;2个机器周期,(1+753+2)*132=99792RET ;2个机器周期,1+99792+2=99795,约100msDELAY1S: MOV R7,#10 ;计数10次 1LOOP: ACALL DELAY100MS ;延时100ms子程序99795+2DJNZ R7,LOOP ;未达到10次则继续10*(2+99795+2)RET ;返回2+10*(2+99795+2)=9979928.内部RAM从20H单元开始处有一数据块,以ODH为结束标志,试统计该数据块的长度,将该数据块送到外部数据存储器7E01H开始的单元,并将长度存入7E00H单元。
解:从20H的指针用R0,从外部RAM7E01开始的指针用DPTR,计数器用R7 MOV R7,#0 ;字节计数器赋初值MOV R0,#20H ;设片内RAM地址指针初值MOV DPTR,#7E01H ;设片外RAM地址指针初值CONT: MOV A,@R0 ;取片内RAM中的一个字节MOVX @DPTR,A ;存入片外RAM指针所指单元INC R7 ;长度计数器加1INC R0 ;片内RAM地址指针加1INC DPTR ;片外RAM地址指针加1CJNE A,#0DH,CONT ;未达到结束标志MOV A,R7 ;取块计数长度值MOVX @DPTR,A ;保存SJMP $ ;暂停END9.内部RAM从DATA开始的区域中存放着10个单字节十进制数,求其累加和,并将结果存入SUM和SUM+1单元。
解:R7计数,R6保存累加和高8位,R0用作地址指针ORG 0000HLJMP MAINORG 100HSUM EQU 30HDATAA EQU 40HMAIN: MOV R7,#10 ;字节计数器赋初值MOV R0,#DATAA ;设片内RAM地址指针初值CLR A ;累加器清0MOV R6,A ;累加结果的高8位CONT: ADD A,@R0 ;加RAM中的一个字节到ACCDA AJNC NEXT ;若无进位则不用管高8位INC R6 ;有进位,高8位加1NEXT: INC R0 ;片内RAM地址指针加1DJNZ R7,CONT ;未完继续MOV SUM,A ;保存低8位SJMP $ ;暂停MOV SUM+1,R6 ;保存高8位END10.内部RAM从DATA1和DATA2单元开始处存放着两个等长的数据块,数据块的长度在LEN单元中。
请编程检查这两个数据块是否相等,若相等,将0FFH写入RESULT单元,否则将0写入RESULT单元。
解:从DATA1开始的指针用R0,从DATA2开始的指针用R1,计数器用R7LEN EQU 10DATA1 EQU 30HDATA2 EQU 40HRESULT EQU 50HMOV R7,#LEN ;字节计数器赋初值MOV R0,#DATA1 ;设片内RAM地址指针初值MOV R1,#DATA2 ;设片外RAM地址指针初值CONT: MOV A,@R0 ;取片内RAM R0所指的的一个字节MOV 7FH,@R1 ;将R1所指单元内容取到片内RAM地址7FH中CJNE A,7FH,NOEQ ;比较,不相等则结束INC R0 ;DATA1 RAM地址指针加1INC R1 ;DATA2 RAM地址指针加1DJNZ R7,CONT ;未完,继续MOV A,#0FFH ;相等,准备写入FFHSJMP DOWN ;转写入结果处NOEQ: MOV A,#0 ;不相等,准备写入00HDOWN: MOV RESULT,A ;保存比较结果标志SJMP $ ;暂停END11.编制程序,将内部RAM中M1、M2、M3和M4单元中的无符号数xl、x2、x3和x4相加,并把和存入RO和R1(R0中为高8位)中。