8051单片机程序分析与解题指南

需积分: 9 0 下载量 59 浏览量 更新于2024-07-13 收藏 220KB PPT 举报
"已知H=H=DH下列程序后-南师大单片机期中复习" 在单片机编程中,了解基本的指令操作对于理解和编写程序至关重要。从提供的信息来看,这里主要涉及了MCS-51系列单片机的一些核心指令,如逻辑运算、移位、加法、乘法以及堆栈操作。下面将详细解释这些知识点: 1. 填充问题: - (1) DIVAB指令用于整数除法,A作为被除数,B作为除数,执行后A中存放商,B中存放余数,CY标志位表示无符号除法是否溢出,OV标志位在有符号除法时表示是否溢出。由于题目没有提供具体的数值,我们无法给出具体答案。 - (2) MULAB指令用于乘法,执行后A中存放低8位结果,B中存放高8位结果,CY标志位表示乘积是否超过16位,OV标志位在有符号乘法时表示是否溢出。对于(A)=64H, (B)=32H的情况,乘积为2000H,即(A)=00H, (B)=13H, (CY)=1, (OV)=0。 - (3) MOVA, 28H ORLA, #08H等效于将28H与08H进行逻辑或操作,然后将结果存入A寄存器,等效指令是MOVA, #38H。 2. 给定程序执行后的结果: - 当(PSW)=91H, (00H)=05H, (11H)=06H, (10H)=AAH,执行一系列指令后,我们可以逐条分析: - MOVA, #0C3H 将立即数0C3H加载到A寄存器。 - ADDA, R0 将R0中的05H加到A寄存器,结果为CAH,CY标志位不变,OV标志位不变。 - MOVR1, A 将A寄存器的内容移动到R1寄存器,此时R1=CAH。 - 所以,最终结果是:(A)=CAH, (PSW)=91H (因为ADD操作没有改变PSW),(00H)=05H (未改变),(11H)=06H (未改变),(10H)=AAH (未改变)。 3. 单条指令实现特定功能: - 使A清0:可以使用CLRA指令。 - 使A加倍:可以使用RLA指令,或者先将A加到自身,即ADDA, ACC。 - 使A按位求反:可以使用CPLA指令。 - 内RAM20H单元的高4位不变,低4位清0:可以使用ANL 20H, #0F0H指令。 4. MCS-51单片机的时序: - 当主频为12MHz时,一个机器周期等于1个时钟周期的12倍,即大约1us = 12ns。执行一条最长的指令通常需要12个机器周期,即12us = 144ns;最短的指令只需要1个机器周期,即1us = 12ns。 5. 子程序调用及堆栈操作: - 在子程序调用过程中,SP(堆栈指针)会递减并保存返回地址,假设初始(SP)=50H,执行ACALL ASUB后,(SP)=4FH,(SP)指向的地址为51H,保存的是返回地址,即0687H(0684H+3)。ASUB执行完后返回,(SP)=50H,(50H)恢复为22H,(51H)为返回地址0687H。 6. 循环加法和条件跳转: - 这段代码实现了一个循环加法,并根据结果判断是否跳转到NEXT。循环结束时,如果无进位(CY标志位为0),则执行JNC NEXT;否则,将R0指向的地址处的值设置为01H。 以上就是根据提供的信息所解析的单片机编程相关知识点,涵盖了基本的算术运算、逻辑运算、堆栈操作以及条件分支。理解并熟练掌握这些内容对于单片机程序设计至关重要。