
第三章指令系统及汇编语言程序设计习题 一、简答题 1、80C51系列单片机的指令系统有何特点? 2、80C51单片机有哪几种寻址方式?各寻址方式所对应的寄存器或存储器空间如何? 3、访问特殊功能寄存器SFR可以采用哪些寻址方式? 4、访问内部RAM单元可以采用哪些寻址方式? 5、访问外部RAM单元可以采用哪些寻址方式? 6、访问外部程序存储器可以采用哪些寻址方式? 7、为什么说布尔处理功能是80C51单片机的重要特点? 8、对于80C52单片机内部RAM还存在高128字节,应采用何种方式访问? 9、试根据指令编码表写出下列指令的机器码。 (1) MOV A,#88H (2) MOV R3,50H (3) MOV P1.1,#55H (4) ADD A,@R1 (5) SETB 12H 10、 完成某种操作可以采用几条指令构成的指令序列实现,试写出完成以下每种操作的指 令序列。 (1) 将R0的内容传送到R1: (2) 内部RAM单元6OH的内容传送到寄存器R2: (3) 外部RAM单元1OOOH的内容传送到内部RAM单元6OH: (4) 外部RAM单元10OOH的内容传送到寄存器R2: (5) 外部RAM单元1000H的内容传送到外部RAM单元2000H。 11、 11、若(R1)=30H,(A)=40H,(30H)=60H,(40H)=08H。试分析执行下列程序段 后上述各单元内容的变化。 MOV A.@R1 MOV @R1,40H MOV 40H,A MOV R1,#7FH 12、 若(A)=E8H,(R0)=40H,(R1)=20H,(R4)=3AH,(40H)=2CH,(20)=0FH, 试写出下列各指令独立执行后有关寄存器和存储单元的内容?若该指令影响标志位,试指出CY、AC、 和OV的值。 (1) MOV A,@RO
第三章 指令系统及汇编语言程序设计习题 一、简答题 1、80C51 系列单片机的指令系统有何特点? 2、80C51 单片机有哪几种寻址方式?各寻址方式所对应的寄存器或存储器空间如何? 3、访问特殊功能寄存器 SFR 可以采用哪些寻址方式? 4、访问内部 RAM 单元可以采用哪些寻址方式? 5、访问外部 RAM 单元可以采用哪些寻址方式? 6、访问外部程序存储器可以采用哪些寻址方式? 7、为什么说布尔处理功能是 80C51 单片机的重要特点? 8、对于 80C52 单片机内部 RAM 还存在高 128 字节,应采用何种方式访问? 9、试根据指令编码表写出下列指令的机器码。 (1) MOV A,#88H (2) MOV R3,50H (3) MOV P1.1,#55H (4) ADD A,@R1 (5) SETB 12H 10、 完成某种操作可以采用几条指令构成的指令序列实现,试写出完成以下每种操作的指 令序列。 (1) 将 R0 的内容传送到 R1; (2) 内部 RAM 单元 60H 的内容传送到寄存器 R2; (3) 外部 RAM 单元 1000H 的内容传送到内部 RAM 单元 60H; (4) 外部 RAM 单元 1000H 的内容传送到寄存器 R2; (5) 外部 RAM 单元 1000H 的内容传送到外部 RAM 单元 2000H。 11、 11、若(R1)=30H,(A)=40H,(30H)=60H,(40H)=08H。试分析执行下列程序段 后上述各单元内容的变化。 MOV A,@R1 MOV @R1,40H MOV 40H,A MOV R1,#7FH 12、 若(A)=E8H,(R0)=40H,(R1)=20H,(R4)=3AH,(40H)=2CH,(20)=0FH, 试写出下列各指令独立执行后有关寄存器和存储单元的内容?若该指令影响标志位,试指出 CY、AC、 和 OV 的值。 (1) MOV A,@R0

(2) ANL 40H,#0FH (3) ADD A,R4 (4) SWAP A (5) DEC @R1 (6) XCHD A,@R1 13、 若(50H)=40H,试写出执行以下程序段后累加器A、寄存器R0及内部RAM的4OH、41H、 42H单元中的内容各为多少? MOV A,50H MOV RO,A MOV A,#00H MOV @R0,A MOV A,3BH MOV 41H,A MOV 42H,41H 14、 试用位操作指令实现下列逻辑操作。要求不得改变未涉及的位的内容。 (1) 使ACC.0置位: (2) 清除累加器高4位: (3) 清除ACC.3,ACC.4,ACC.5,ACC.6。 15、 试编写程序,将内部RAM的20H、21H、22H三个连续单元的内容依次存入2FH、2EH和 2DH单元。 16、 试编写程序,完成两个16位数的减法:7F4DH一2B4EH,结果存入内部RAM的30H和 31H单元,31H单元存差的高8位,30H单元存差的低8位。 17、 试编写程序,将1中的低4位数与2中的高4位数合并成一个8位数,并将其存放 在R1中。 18、 试编写程序,将内部RAM的2OH、21H单元的两个无符号数相乘,结果存放在R2、R3 中,R2中存放高8位,R3中存放低8位。 19、 若(CY)=1,(P1)=10100011B,(P3)=01101100B。试指出执行下列程序段后,CY、 P1口及P3▣内容的变化情况。 MOV P1.3,C MOV P1.4,C MOV C,P1.6 MOV P3.6,C MOV C,P1.0 MOV P3.4,C
(2) ANL 40H,#0FH (3) ADD A,R4 (4) SWAP A (5) DEC @R1 (6) XCHD A,@R1 13、 若(50H)=40H,试写出执行以下程序段后累加器 A、寄存器 R0 及内部 RAM 的 40H、41H、 42H 单元中的内容各为多少? MOV A,50H MOV R0,A MOV A,#00H MOV @R0,A MOV A,3BH MOV 41H,A MOV 42H,41H 14、 试用位操作指令实现下列逻辑操作。要求不得改变未涉及的位的内容。 (1) 使 ACC.0 置位; (2) 清除累加器高 4 位; (3) 清除 ACC.3,ACC.4,ACC.5,ACC.6。 15、 试编写程序,将内部 RAM 的 20H、21H、22H 三个连续单元的内容依次存入 2FH、2EH 和 2DH 单元。 16、 试编写程序,完成两个 16 位数的减法:7F4DH-2B4EH,结果存入内部 RAM 的 30H 和 31H 单元,31H 单元存差的高 8 位,30H 单元存差的低 8 位。 17、 试编写程序,将 R1 中的低 4 位数与 R2 中的高 4 位数合并成一个 8 位数,并将其存放 在 R1 中。 18、 试编写程序,将内部 RAM 的 20H、21H 单元的两个无符号数相乘,结果存放在 R2、R3 中,R2 中存放高 8 位,R3 中存放低 8 位。 19、 若(CY)=1,(P1)=10100011B,(P3)=01101100B。试指出执行下列程序段后,CY、 P1 口及 P3 口内容的变化情况。 MOV P1.3,C MOV P1.4,C MOV C,P1.6 MOV P3.6,C MOV C,P1.0 MOV P3.4,C

20、 若单片机的主频为12z,试用循环转移指令编写延时20ms的延时子程序。并说明这 种软件延时方式的优缺点。 21、 80C51单片机汇编语言有何特点? 22、 利用80C51单片机汇编语言进行程序设计的步骤如何? 23、 常用的程序结构有哪几种?特点如何? 24、 子程序调用时,参数的传递方法有哪几种? 25、 什么是伪指令?常用的伪指令功能如何? 26、 设被加数存放在内部RAM的20H、21H单元,加数存放在22H、23H单元,若要求和存 放在24组、25H中,试编写出16位数相加的程序。 27、 编写一段程序,把外部RAM中1000H1030H的内容传送到内部RAM的30H`60H中。 28、 编写程序,实现双字节无符号数加法运算,要求(R1RO)+(R7R6)→(61H6OH)。 29、 若80C51的晶振频率为6Mz,试计算延时子程序的延时时间。 DELAY:MOV R7,#0F6H LP:MOV R6,#OFAH DJNZ R6, DJNZ R7,LP RET 30、 在内部RAM的21H单元开始存有一组单字节不带符号数,数据长度为30H,要求找出 最大数存入BIG单元。 31、 编写程序,把累加器A中的二进制数变换成3位BCD码,并将百、十、个位数分别存 放在内部RAM的50H、51H、52H中。 32、 编写子程序,将R1中的2个十六进制数转换为ASCII码后存放在R3和R4中。 33、 编写程序,求内部RAM中5OH59H十个单元内容的平均值,并存放在5AH单元。 34、 指令由哪几部分组成? 35、 什么是汇编语言指令?为什么说汇编语言指令比机器语言指令更容易理解和记忆?通 过什么方式可将汇编语言程序转化为机器语言程序? 36、 MCS-51汇编语言中有哪些常用的伪指令?各起什么作用? 37、 汇编语言程序和汇编程序两术语含义相同吗? 38、 什么是寻址方式?对于双操作数指令来说,为什么不需要指定操作结果存放位置? 39、 给出下列指令中每一操作数的寻址方式。 MOV #23H MOV 23H,A MOV 90H, 23H MOV 23H,@R0
20、 若单片机的主频为 12MHz,试用循环转移指令编写延时 20ms 的延时子程序。并说明这 种软件延时方式的优缺点。 21、 80C51 单片机汇编语言有何特点? 22、 利用 80C51 单片机汇编语言进行程序设计的步骤如何? 23、 常用的程序结构有哪几种?特点如何? 24、 子程序调用时,参数的传递方法有哪几种? 25、 什么是伪指令?常用的伪指令功能如何? 26、 设被加数存放在内部 RAM 的 20H、21H 单元,加数存放在 22H、23H 单元,若要求和存 放在 24H、25H 中,试编写出 16 位数相加的程序。 27、 编写一段程序,把外部 RAM 中 1000H~1030H 的内容传送到内部 RAM 的 30H~60H 中。 28、 编写程序,实现双字节无符号数加法运算,要求 (R1R0)+(R7R6)→(61H60H)。 29、 若 80C51 的晶振频率为 6MHz,试计算延时子程序的延时时间。 DELAY:MOV R7,#0F6H LP:MOV R6,#0FAH DJNZ R6,$ DJNZ R7,LP RET 30、 在内部 RAM 的 21H 单元开始存有一组单字节不带符号数,数据长度为 30H,要求找出 最大数存入 BIG 单元。 31、 编写程序,把累加器 A 中的二进制数变换成 3 位 BCD 码,并将百、十、个位数分别存 放在内部 RAM 的 50H、51H、52H 中。 32、 编写子程序,将 R1 中的 2 个十六进制数转换为 ASCII 码后存放在 R3 和 R4 中。 33、 编写程序,求内部 RAM 中 50H~59H 十个单元内容的平均值,并存放在 5AH 单元。 34、 指令由哪几部分组成? 35、 什么是汇编语言指令?为什么说汇编语言指令比机器语言指令更容易理解和记忆?通 过什么方式可将汇编语言程序转化为机器语言程序? 36、 MCS-51 汇编语言中有哪些常用的伪指令?各起什么作用? 37、 汇编语言程序和汇编程序两术语含义相同吗? 38、 什么是寻址方式?对于双操作数指令来说,为什么不需要指定操作结果存放位置? 39、 给出下列指令中每一操作数的寻址方式。 MOV A, #23H MOV 23H,A MOV 90H, 23H MOV 23H, @R0

INC A 40、 位地址90H和字节地址90H及P1.0有何异同?如何区别?位寻址和字节寻址如何区分? 在使用时有何不同? 41、 要访问专用寄存器和片外数据寄存器,应采用什么寻址方式?举例说明。 42、 编程将内部RAM的2OH单元的内容传送给外部RAM的200OH单元。 43、 编程将内部数据存储器20H30H单元内容清零。 44、 己知A=83H,R0=17H,(17H):34组,写出下列程序段执行完后的A中的内容。 ANL A,#17H ORL 17H,A XRL A,@R0 CPL A 45、 编程查找内部RAM的32H41H单元中是否有OAAH这个数据,若有这一数据,则将将 50H单元置为0FFH,否则清50H单元为0。 46、 己知单片机的晶振为12MHz,分别设计延时0.1s、1s、1min的子程序。 47、 查找20H矿4H单元中出现00H的次数,并将查找结果存入50州单元 48、 试编程使内部RAM的2OH~4FH单元的数据块按降序排列。 49、 内部RAM的2OH单元开始有一个数据块,以ODH为结束标志,试统计该数据块长度, 将该数据块传送到外部数据存储器7E01H开始的单元,并将长度存入7E00H单元。 50、 试编写一个用查表法查0~9字形段码的子程序,调用子程序前,待查表的数据存放在 累加器A中,子程序返回后,查表的结果也存放在累加器A中。 51、 内部RAM的DATA开始的区域中存放着10个单字节十进制数,求其累加和,并将结果 存入SUM和SUM+1单元。 52、 MCS-51内部RAM前128字节支特哪些寻址方式?请写出用不同寻址方式将内部RAM30H 单元信息传送到累加器A的指令或程序片段:内部RAM后128字节支持哪些寻址方式?请写出将内 部RAM8OH单元信息传送到累加器A的指令或程序片段。 53、 写出实现下列要求的指令或程序片段,并在仿真机上验证(假设指令代码从2000H单元 开始存放)。 (1) 将内部RAM20H单元内容与累加器A相加,结果存放在20H单元中。 (2) 将8O32内部RAM8OH单元内容与内部RAM31H单元内容相加,结果存放到内部RAM 31H单元中。 (3) 将内部RAM20H单元内容传送到外部RAM20H单元中。 (4) 将程序状态字寄存器PSW内容传送到外部RAM的ODOH单元中。 (5) 将内部RAM00H~7FH单元,共128字节传送到以8000H为首址的外部RAM中。 (6) 将外部RAM8000H~803FH单元,共64字节传送到以40H为首址的内部RAM中
INC A 40、 位地址 90H 和字节地址 90H 及 P1.0 有何异同?如何区别?位寻址和字节寻址如何区分? 在使用时有何不同? 41、 要访问专用寄存器和片外数据寄存器,应采用什么寻址方式?举例说明。 42、 编程将内部 RAM 的 20H 单元的内容传送给外部 RAM 的 2000H 单元。 43、 编程将内部数据存储器 20H~30H 单元内容清零。 44、 已知 A=83H,R0=17H,(17H):34H,写出下列程序段执行完后的 A 中的内容。 ANL A, #17H ORL 17H,A XRL A, @R0 CPL A 45、 编程查找内部 RAM 的 32H~41H 单元中是否有 0AAH 这个数据,若有这一数据,则将将 50H 单元置为 0FFH,否则清 50H 单元为 0。 46、 已知单片机的晶振为 12MHz,分别设计延时 0.1s、1s、lmin 的子程序。 47、 查找 20H~4FH 单元中出现 00H 的次数,并将查找结果存入 50H 单元 48、 试编程使内部 RAM 的 20H~4FH 单元的数据块按降序排列。 49、 内部 RAM 的 20H 单元开始有一个数据块,以 0DH 为结束标志,试统计该数据块长度, 将该数据块传送到外部数据存储器 7E01H 开始的单元,并将长度存入 7E00H 单元。 50、 试编写一个用查表法查 0~9 字形段码的子程序,调用子程序前,待查表的数据存放在 累加器 A 中,子程序返回后,查表的结果也存放在累加器 A 中。 51、 内部 RAM 的 DATA 开始的区域中存放着 10 个单字节十进制数,求其累加和,并将结果 存入 SUM 和 SUM+1 单元。 52、 MCS-51内部RAM前128字节支持哪些寻址方式?请写出用不同寻址方式将内部RAM 30H 单元信息传送到累加器 A 的指令或程序片段;内部 RAM 后 128 字节支持哪些寻址方式?请写出将内 部 RAM 80H 单元信息传送到累加器 A 的指令或程序片段。 53、 写出实现下列要求的指令或程序片段,并在仿真机上验证(假设指令代码从 2000H 单元 开始存放)。 (1) 将内部 RAM 20H 单元内容与累加器 A 相加,结果存放在 20H 单元中。 (2) 将 8032 内部 RAM 80H 单元内容与内部 RAM 31H 单元内容相加,结果存放到内部 RAM 31H 单元中。 (3) 将内部 RAM 20H 单元内容传送到外部 RAM 20H 单元中。 (4) 将程序状态字寄存器 PSW 内容传送到外部 RAM 的 0D0H 单元中。 (5) 将内部 RAM 00H~7FH 单元,共 128 字节传送到以 8000H 为首址的外部 RAM 中。 (6) 将外部 RAM 8000H~803FH 单元,共 64 字节传送到以 40H 为首址的内部 RAM 中

(7) 将外部RAM8000H~807FH单元,共128字节传送到以0000H为首址的外部RAM中。 (8) 将存放在内部RAM的40H、41H和外部RAM的8000H、8001H的16位二进制数相加, 结果存放在内部RAM的4OH和41H单元中(假设低位字节存放在低地址中)。 (9) 如果0~9七段数码显示器对应的字模码3P,06,5B,4F,66,6D,7D,07,7E6F 存放在1000H为首址的程序存储器中,写出将数字4对应的字模码输出到外部RAM3003H单元(即扩 展I/0端口地址)的程序段。 (10)使内部RAM20H单元的b7和b3清零,其他位不变。 (11) 使内部RAM20H单元的b7和b3置1,b5清零,其他位不变。 (12) 将内部RAM20H单元的b7和b3置1,b5取反,其他位不变。 (13)将DPH寄存器的b7、b5位清零,将b2、b0位置1,其他位不变。 (14)将存放在内部RAM40H、41H和外部RAM8000H、8001H的四位BCD码相加,结果存放 在内部RAM40H和41H单元中(假设低位字节存放在低地址中)。 (15) 将立即数32H传送到内部RAM30H单元中。 (16)将立即数32H传送到8032CPU内部RAM88H单元中。 54、 假设内部RAM(30H)=3FH,累加器A=OFEH,R0=30H,SP=07H,PSW=00H,则执行如下 指令后,各存储单元及寄存器内容是什么(假设各小题相互独立)? (1) MOV A,@RO A (2) INC A A= ;PSW= (3) MOV A,01H MOV A,#04H ADD A, @R0 INC RO MOV @RO,A A= PSW= :R0= :(30H)= (4) ANL A.@RO A= PSW= (5) PUSH ACC PUSP 30H A= PSW= 55、 假设4位BCD码压缩存放在R3、2中,试编写BCD减1的程序段,并在仿真机上验证。 56、 输入、编译、运行下列程序段,并指出复位后和程序执行过程中SP、程序计数器PC 的变化以及程序执行结束后累加器ACC、内部RAM30H~33H单元内容。 ORG O000H LJMP Main 0RG1000H Main:MOV SP,#6FH
(7) 将外部 RAM 8000H~807FH 单元,共 128 字节传送到以 0000H 为首址的外部 RAM 中。 (8) 将存放在内部 RAM 的 40H、41H 和外部 RAM 的 8000H、8001H 的 16 位二进制数相加, 结果存放在内部 RAM 的 40H 和 41H 单元中(假设低位字节存放在低地址中)。 (9) 如果 0~9 七段数码显示器对应的字模码 3P,06,5B,4F,66,6D,7D,07,7E6F 存放在 1000H 为首址的程序存储器中,写出将数字 4 对应的字模码输出到外部 RAM 3003H 单元(即扩 展 I/O 端口地址)的程序段。 (10) 使内部 RAM 20H 单元的 b7 和 b3 清零,其他位不变。 (11) 使内部 RAM 20H 单元的 b7 和 b3 置 1,b5 清零,其他位不变。 (12) 将内部 RAM 20H 单元的 b7 和 b3 置 1,b5 取反,其他位不变。 (13) 将 DPH 寄存器的 b7、b5 位清零,将 b2、b0 位置 1,其他位不变。 (14) 将存放在内部 RAM 40H、41H 和外部 RAM 8000H、8001H 的四位 BCD 码相加,结果存放 在内部 RAM 40H 和 41H 单元中(假设低位字节存放在低地址中)。 (15) 将立即数 32H 传送到内部 RAM 30H 单元中。 (16) 将立即数 32H 传送到 8032 CPU 内部 RAM 88H 单元中。 54、 假设内部 RAM(30H)=3FH,累加器 A=0FEH,R0=30H,SP=07H,PSW=00H,则执行如下 指令后,各存储单元及寄存器内容是什么(假设各小题相互独立)? (1) MOV A, @R0 A= 。 (2) INC A A= ;PSW= 。 (3) MOV A, #01H MOV A, #04H ADD A, @R0 INC R0 MOV @R0, A A= ;PSW= ;R0= ;(30H)= 。 (4) ANL A, @R0 A= ;PSW= 。 (5) PUSH ACC PUSP 30H A= ;PSW= 。 55、 假设 4 位 BCD 码压缩存放在 R3、R2 中,试编写 BCD 减 1 的程序段,并在仿真机上验证。 56、 输入、编译、运行下列程序段,并指出复位后和程序执行过程中 SP、程序计数器 PC 的变化以及程序执行结束后累加器 ACC、内部 RAM 30H~33H 单元内容。 ORG 0000H LJMP Main ORG 1000H Main: MOV SP, #6FH

MOV RO,#30H MOV R1. #32H MOV 30H,#12H MOV31H,#34 M0V32H,#76H M0V33H,#98H LCALL SUBI NOP 0RG2000H SUBI: PUSH Acc PUSH PSW MOV A,@RO ADD A, @RI MOV @RO,A INC RO RET 57、 假设程序头中含有如下变量定义伪指令。 TXDBUF DATA #40H BDATA DATA #28H (1) 请指出“MOV RO,#TXDBUF”指令、“MOV RO,TXDBUF”指令目的操作数的寻址方式 (2) 执行如下程序段后,内部RAM40H~4FH单元内容是什么?28H单元内容又是什么? MOV BDATA,#10H MOV R0, #XDBUF CLR A LOOP: MOV @R0, A INC A INC RO DJNZ BDATA,LOOP END 58、 如果希望快速保护工作寄存器组,请写出将2区作为当前工作寄存器区的程序段。 二、读程序 1、阅读下列程序,写出程序流程图,并写出数学表达式
MOV R0, #30H MOV Rl, #32H MOV 30H,#12H MOV 31H,#34H MOV 32H,#76H MOV 33H,#98H LCALL SUBl NOP ORG 2000H SUBl: PUSH Acc PUSH PSW MOV A, @R0 ADD A, @R1 MOV @R0,A INC R0 RET 57、 假设程序头中含有如下变量定义伪指令。 TXDBUF DATA #40H BDATA DATA #28H (1) 请指出“MOV R0,#TXDBUF”指令、“MOV R0, TXDBUF”指令目的操作数的寻址方式 (2) 执行如下程序段后,内部 RAM 40H~4FH 单元内容是什么?28H 单元内容又是什么? MOV BDATA, #10H MOV R0, #XDBUF CLR A LOOP: MOV @R0, A INC A INC R0 DJNZ BDATA,LOOP END 58、 如果希望快速保护工作寄存器组,请写出将 2 区作为当前工作寄存器区的程序段。 二、读程序 1、阅读下列程序,写出程序流程图,并写出数学表达式

ORG 3000H X: EQU 20H Y: EQU 30H START:MOV A,X JNZ LP1 MOV Y,#0 SJMP ED LP1: JNB ACC.7,LP2 MOV Y,#OFFH SJMP ED LP2: MOV A,#1 ED: SJMP ED 2、阅读下列程序,写出程序功能 ORG 2000H STADA: EQU 20H SLANG: EQU 30H START: MOV RO,STADA MOV B ,0 L0P1: MOVX A.@RO CJNE A #0DH,CRNEXT MOV SLANG,B SJMP CRNEXT: INC B INC RO SJMP LOP1 END 3、阅读下列程序,回答问题 ORG 3000H MAIN:MOV RO,#30H MOV R1,#50H MOV R7,#0AH ACALL BCD SUM
ORG 3000H X: EQU 20H Y: EQU 30H START: MOV A,X JNZ LP1 MOV Y,#0 SJMP ED LP1: JNB ACC.7,LP2 MOV Y,#0FFH SJMP ED LP2: MOV A,#1 ED: SJMP ED 2、阅读下列程序,写出程序功能 ORG 2000H STADA: EQU 20H SLANG: EQU 30H START: MOV R0 , # STADA MOV B ,# 0 LOP1: MOVX A ,@R0 CJNE A ,#0DH ,CRNEXT MOV SLANG , B SJMP $ CRNEXT: INC B INC R0 SJMP LOP1 END 3、阅读下列程序,回答问题 ORG 3000H MAIN: MOV R0, #30H MOV R1, #50H MOV R7, #0AH ACALL BCD_SUM

MOV RO,#30H MOV DPTR.#2000H MOV R7,#10H L00P: MOV A,@RO MOVX @DPTR,A INC RO INC DPTR DJNZ R7,LOOP BCD SUM: MOV A.@RO ADD A,@R1 DAA MOV @RO,A INC RO INC RI DJNZ R7.BCD SUM 问:1)子程序BCD SUM完成什么功能? 2)程序MAIN完成什么功能? 4、执行下列程序后,累加器A的内容为多少? 0RG0000H MOV DPTR #TABLE MOV A,#06H MOVC A,@A+DPTR SJMP TABLE:DB0,1,4,9,16,25,36,49,64,81 END 三、编程序 1、设被加数存放在内部RAM的20H(低字节)、21H、22H(高字节)单元,加数存放在30H(低 字节)、31H、32H(高字节)单元,若要求和存放在30H、31H、32H中,试编写出16位数相加的程 序。 2、将内部RAM30H单元开始的4个单元中存放的四字节十六进制数和内部RAM40H单元开始的4 个单元中存放的四字节十六进制数相减,结果存放到40H单元中
MOV R0, #30H MOV DPTR,#2000H MOV R7, #10H LOOP: MOV A,@R0 MOVX @DPTR, A INC R0 INC DPTR DJNZ R7,LOOP BCD_SUM: MOV A,@R0 ADD A,@R1 DA A MOV @R0,A INC R0 INC R1 DJNZ R7,BCD_SUM 问:1)子程序 BCD_SUM 完成什么功能? 2)程序 MAIN 完成什么功能? 4、执行下列程序后,累加器 A 的内容为多少? ORG 0000H MOV DPTR , #TABLE MOV A,#06H MOVC A,@A+DPTR SJMP $ TABLE:DB 0,1,4,9,16,25,36,49,64,81 END 三、编程序 1、设被加数存放在内部 RAM 的 20H(低字节)、21H、22H(高字节)单元,加数存放在 30H(低 字节)、31H、32H(高字节)单元,若要求和存放在 30H、31H、32H 中,试编写出 16 位数相加的程 序。 2、将内部 RAM30H 单元开始的 4 个单元中存放的四字节十六进制数和内部 RAM40H 单元开始的 4 个单元中存放的四字节十六进制数相减,结果存放到 40H 单元中

3、设有16位二进制数存放在R0、R1中(R0存放高位,R1存放低位),试编写实现16位二 进制数的“取反加1”操作的程序。 4、设有16位二进制数存放在内部RAM的50H、51H单元中,要求将其算术左移一位,(最低 位移入0)后仍然放在原单元。 5、设在内部RAM的4OH单元中存放8位二进制数,要求将其转换成相应的BCD码并由高位到 低位的顺序存入内部RAM以6OH为首址的3个连续单元中。 6、设在外部RAM的60H单元存有1字节的代码,要求将其分解成两个4位字段,高4位存入 原单元的低四位,其低四位存入61H单元的低四位且要求将这两单元的高4位均为0。 7、编写一段程序,把外部RAM中1000H1030H的内容传送到内部RAM的30H60H中。 8、若80C51的晶振频率为6Mz,试计算延时子程序的延时时间。。 DELAY:MOV R7,#0F6H LP:MOV R6,#OFAH DJNZ R6,$ DJNZ R7,LP RET 9、在内部RAM的21H单元开始存有一组单字节不带符号数,数据长度为30H,要求找出最大 数存入BIG单元。 10、编写子程序,将R1中的2个压缩BCD码转换为ASCII码后存放在R3和R4中
3、设有 16 位二进制数存放在 R0、R1 中(R0 存放高位,R1 存放低位),试编写实现 16 位二 进制数的“取反加 1”操作的程序。 4、设有 16 位二进制数存放在内部 RAM 的 50H、51H 单元中,要求将其算术左移一位,(最低 位移入 0)后仍然放在原单元。 5、设在内部 RAM 的 40H 单元中存放 8 位二进制数,要求将其转换成相应的 BCD 码并由高位到 低位的顺序存入内部 RAM 以 60H 为首址的 3 个连续单元中。 6、设在外部 RAM 的 60H 单元存有 1 字节的代码,要求将其分解成两个 4 位字段,高 4 位存入 原单元的低四位,其低四位存入 61H 单元的低四位且要求将这两单元的高 4 位均为 0。 7、编写一段程序,把外部 RAM 中 1000H~1030H 的内容传送到内部 RAM 的 30H~60H 中。 8、若 80C51 的晶振频率为 6MHz,试计算延时子程序的延时时间。。 DELAY:MOV R7,#0F6H LP:MOV R6,#0FAH DJNZ R6,$ DJNZ R7,LP RET 9、在内部 RAM 的 21H 单元开始存有一组单字节不带符号数,数据长度为 30H,要求找出最大 数存入 BIG 单元。 10、编写子程序,将 R1 中的 2 个压缩 BCD 码转换为 ASCII 码后存放在 R3 和 R4 中