《单片机汇编》期末考试、考研常见考题、习题,题型汇总(六)

此篇文章中涉及的新指令如下:

数量     助记符     说明	     字节数	    执行时间	   指令代码
43,SWAP A  		累加器内高低半字节交换	1	1	C4H
44,ADD A,direct 直接寻址字节内容与A相加结果存于A中	2	1	25H,direct
45,DA A			累加器内的数据进行十进制调整	1	1	D4H
46,ANL A,#data	立即数逻辑与到累加器A	2	1	54H,data
47,MOV Rn,direct 将direct地址单元中的数据送给Rn中	2	2	A8H-AFH,direct
48,MOV direct,Rn  将Rn中的数据送给direct地址单元中 	2	2	88H-8FH,direct
49,XCH A,Rn		  寄存器中的内容与累加器中的内容进行互换	1	1	C8H-CFH
50,ORL A,Rn		  寄存器逻辑或到累加器A中		1	1	48H-4FH
51,RRC A		  经过进位标志位的累加器循环右移	1	1	13H
52,RLC A    	  经过进位标志位的累加器循环左移	1	1	33H
53,PUSH direct  将direct地址单元内的数据压进栈顶	2	2	C0H,direct
54,POP,direct	 将栈顶数据送direct地址单元中	2	2	D0H,direct
55,XCH A,@Ri     间接寻址RAM单元和累加器A中的内容互换	1	1	C6H-C7H

题8

请编写程序将存放在内部RAM40H-42H单元中的数相加,其和(设不超过8位)存放在43H中,将其和高四位与低四位交换后存放在44H中。
解析:这是一类比较简单的加法程序
程序源码:

	ORG 0000H
	MOV R1,#40H
	CLR A
	MOV 40H,#3
	MOV 41H,#90
	MOV 42H,#02H
	;用于测试
	MOV A,@R1
	INC R1
	ADD A,@R1
	ADD A,42H
	MOV 43H,A
	SWAP A
	MOV 44H,A
HALT:SJMP HALT
	END

题9

设被加数保存在内部RAM中的40H,41H,42H中,加数保存在外部RAM中的40H,41H,42H中相加之和保存在内部RAM中50H,51H,52H中,忽略相加后的最高位进位。请编程实现满足上述要求的6位BCD码加法程序
解析:题目中所需设计BCD码加法程序。需要联想到十进制调整DA指令,十进制调整的方法是:
1,累加器低四位大于9或辅助进位标志Ac=1,则低四位+6修正
2,累加器高四位大于9或进位标志Cy=1,则高四位+6修正
3,如果累加器高四位和低四位均大于9,则累加器A+66修正
程序源码:

	ORG 0000H
	MOV R1,#50H
	MOV R0,#40H
	MOVX A,@R0
	MOV R2,40H
	ADD A,R2
	DA A
	MOV @R1,A
	INC R1
	INC R0	
	MOVX A,@R0
	MOV R2,41H
	ADD A,R2
	DA A
	MOV @R1,A
	INC R1
	INC R0
	MOVX A,@R0
	MOV R2,42H
	ADD A,R2
	DA A
	MOV @R1,A
HALT:SJMP HALT
	END

题10

设地址(40H)=40H, (41H)=51H。
(1)编程实现将两单元地址中的内容进行交换。
(2)在(1)问基础上,试编程将40H中的内容的高4位与41H中的内容的低四位合并成一个字节存放在42H中。

程序源码:

1)
	ORG 0000H
	MOV 40H,#46H
	MOV 41H,#51H
	MOV R7,40H
	MOV A,41H
	XCH A,R7
	MOV 41H,A
	MOV 40H,R7
HALT:SJMP HALT
	END
(2)
	ORG 0000H
	MOV 40H,#40H
	MOV 41H,#51H
	MOV A,40H
	ANL A,#0F0H
	MOV R3,A
	MOV A,41H
	ANL A,#0FH
	ORL A,R3
   	MOV 42H,A
HALT:SJMP HALT
	END

题11

已知内部数据存储器地址为40H和41H单元存有一个16位二进制数(低地址存放低8位)
试编程实现且结果介于0-65535之间:
(1)使该数扩大一倍
(2)使该数缩小一倍

解析:一个16位二进制数扩大到2倍相当于对它进行一次算术左移,缩小一倍相当于进行一次算术左移。

1)
	ORG 0000H
	MOV 40H,#46H
	MOV 41H,#51H
	;For testing
	CLR C
	MOV R0,#40H
	MOV A,@R0
	RLC A
	MOV @R0,A
	INC R0
	MOV A,@R0
	RLC A
	MOV @R0,A
HALT:SJMP HALT
	END
(2)
	ORG 0000H
	MOV 40H,#46H
	MOV 41H,#51H
	CLR C
	MOV R0,#41H
	MOV A,@R0
	RRC A
	MOV @R0,A
	DEC R0
	MOV A,@R0
	RRC A
	MOV @R0,A
HALT:SJMP HALT
	END

题12

将片内RAM40H开始的10个单元的内容与50H开始的10个单元的内容进行互换,(要求使用堆栈方式)
程序源码:

方式1:
	ORG 0000H
	MOV R0,#40H
	MOV R1,#50H
	MOV R2,#0AH
LOOP:
	MOV A,@R0
	XCH A,@R1
	MOV @R0,A
	INC R0 
	INC R1
	DJNZ R2,LOOP
HALT:SJMP HALT
	END
方式2:
	ORG 0000H
	MOV R0,#40H
	MOV R1,#50H
	MOV R2,#0AH
LOOP:
	MOV A,@R0
	MOV 66H,@R1
	MOV @R1,A
	MOV @R0,66H
	INC R0 
	INC R1
	DJNZ R2,LOOP
HALT:SJMP HALT
	END
方式3:使用堆栈方法
	ORG 0000H
	MOV R0,#40H
	MOV R1,#50H
	MOV R2,#0AH
LOOP:
	MOV A,@R0
	PUSH ACC
	MOV A,@R1
	MOV @R0,A
	POP B
	MOV @R1,B
	INC R0 
	INC R1
	DJNZ R2,LOOP
HALT:SJMP HALT
	END
发布了28 篇原创文章 · 获赞 26 · 访问量 5784

猜你喜欢

转载自blog.csdn.net/liuxianfei0810/article/details/105487074