第四章 汇编语言程序设计
1、编程将片内40H~60H单元中的内容送到以3000H为首的存储区内。 答: MOV R1,#40H MOV R2,#21H MOV DPTR,#3000H L1: MOV A,@R1 MOVX @DPTR,A INC R1 INC DPTR DJNZ R2,L1 2、编程计算下列算式的程序 (1)23H+45H+ABH+03H= MOV A,#23H ADD A,#45H ADD A,#0ABH
XCH A,B ;溢出处理 ADDC A,#00H XCH A,B
ADD A,#03H ;A中为结果低位,B中为高位 (2)CDH+15H-38H-46H= MOV A,#0CDH ADD A,#15H SUBB A,#38H SUBB A,#46H (3)1234H+8347H=
MOV A,#34H ADD A,#47H MOV 30H,A MOV A,#12H ADDC A,#83H
MOV 31,A ;30H存结果低位,31H存结果高位 (4)AB123H-43ADCH= CLR C
MOV A,#23H SUBB A,DCH MOV 30H,A MOV A,#0B1H SUBB A,#3AH MOV 31H,A MOV A,#0AH SUBB A,,#04H
MOV 32H,A ;30H为低位,32H为高位
3、设有两个4位BCD码,分别存放在23H、22H单元和33H、32H单元中,求他们的和,并送入43H、42H单元中(低位在低字节,高位在高字节)。
答: MOV A,22H ADD A,32H MOV 42H,A MOV A,23H ADDC A,33H MOV 43H,A 4、略
5、编程计算片内RAM区50H~59H单元中数的平均值,结果存放在5AH中。 答: MOV R0,#8 MOV R1,#50H MOV A,#00H L1: ADD A,@R1 INC R1 DJNZ R0,L1 MOV B,#8 DIV AB MOV 5AH,A
6、编写计算下式的程序。设乘积和平方结果均小于255。a 、b值分别存在片外3001H和3002H单元中,结果存于片外3000H单元中。
?25,a?b?(1)Y??a?b,a?b
?a?b,a?b? L1: L2: SAVE:
MOV MOVX MOV INC MOVX CJNE MOV SJMP JNC MOV MUL SJMP MOV MOV DIV MOV MOVX
DPTR,#3001H A,@DPTR 30H,A DPL
A,@DPTR A,30H,L1 A,#25 SAVE L2 B,30H AB SAVE B,A A,30H AB
DPTR,#3000H @DPRT,A
;a暂存30H单元
;是否a=b
?(a?b)2?10,(a?b)2?10?2,(a?b)2?10 (2)Y??(a?b)?(a?b)2?10,(a?b)2?10? MOV DPTR,#3001H MOVX A,@DPTR MOV 30H,A INC DPTR MOVX A,@DPTR ADD A,30H MOV B,A
2
MUL AB ; (a+b) MOV 31H,A CJNE A,#10,L1 SJMP SAVE L1: JC L2 CLR C
SUBB A,#10 SJMP SAVE L2: ADD A,#10
SAVE: MOV DPTR,#3000H MOVC @DPTR,A
7、设有两个长度均为15的数组,分别存放在以200H和210H为首地址的存储区中,试编程求其对应项之和,结果存放到以220H为首地址的存储区中。 答: MOV DPH,#02H MOV R1,#15
MOV R2,#00H ; 数组1首地址低位 MOV R3,#10H ; 数组2首地址低位 MOV R4,#20H ; 和首地址低位 L1: MOV DPL,R2 MOVX A,@DPTR MOV R1,A MOV DPL,R3 MOVX A,@DPTR ADD A,R1 MOV DPL,R4 MOVX @DTPR,A INC R2 INC R3 INC R4 DJNZ R1,L1 SJMP $
8、设有100个无符号数,连续存放在以2000H为首地址的存储区中,试编程统计正数、负数和零的个数。
答: MOV 30H,#00H ;正数计数器 MOV 31H,#00H ;负数计数器 MOV 32H,#00H ;零计数器 MOV DPTR,#2000H