单片机第五章作业答案
5.试编制一个子程序将字符串^MCS-51 Microcomputer^装入外部RAM8000H 开始的显示 缓冲区。
ORG 0000H
AJMP
0030H
MIAN :
MOV DPTR, #800011
MOV Rl, #0
MOV R0, #20
LOOP :
MOV A,
R1
ADD A, #5
MOVC
A, @A+PC
MOVX ?DPTR, A ;1B
INC DPTR ;1B
INC
R1 ;1B
DJNZ
R0, LOOP
;3B
TAB :
DB
C' ,‘ S' / -,,‘ 5,,
9
9
? c ,‘ r ,, 'o'
DB
"J
9
9
9
9
o t m t 9
9
9
p , u , END
6.试设计一个n 字节的无符号十进制数加法子程序,其功能为将(R0)和(R1)指出的内 部RAM
中两个n 字节压缩BCD 码无符号十进制数相加,结果存放于被加数单元中。子程 序入口时,RO, R1分别指向被加数和加数的低位字节,字节数n 存于R2,出口时R0指 向和的最高位字节.CY 为进位位。
其功能为判断(R2R3R4R5)中压缩BCD 码十进制最高位是否为零.若 最高位为0,且该十进制数不为0,则通过左移使最高位不为0。
ORG 0000H AJMP MAIN
LEN
MAIN :
EQU 30 ORG 0000H AJMP
MAIN
ORG 0030H
MOV SP. #60H MOV R2, #LEN ACALL ADD NBYTE SJMP
$ CLR c MOV A, @R0 ADDC A. @R1 DA
A
MOV @R0, A
INC R0 INC R1 DJNZ R2. LOOP
RET
END
试设计一个程序. ADD NBYTE : LOOP :
ORG 0030H
MAIN:MOV A. R2
ANL A. #80H
JNZ NEXT
CLR C
LOOP:MOV A, R5
RLC A
MOV R5, A
MOV A, R4
RLC A
MOV R4, A
MOV A, R3
RLC A
MOV R3, A
MOV A, R2
RLC A
MOV R2, A
ANL A, #80H
JZ LOOP
NEXT:SJMP $
END
9.试设计一个双字节无符号整数乘法子程序,其功能为将(R3R2)和(R5R4)相乘,积存放于
30H~33H。
MOV R0
t
#3311
DJNZ R7, LOOP
| R2R4 || R2R T|L
R2R5R2R5
MULTB: MOV R7, #04 ;结果单元清0
LOOP MOV @R0, #00H
MOV A, R2 ;取被乘数低位字节
x | R5 | | R4 |
R3R4 R3R4 L
+ R3R5 R3R5 L
MOV A, B INC RO ADDC A,他RO MOV @R0, A INC RO MOV A,他RO ADDC A, #00H ;加进位
MOV @R0, A RET
11.试设计一个子程序,其功能为将(R0)指出的内部RAM 中6个单字节正整数按从小到大 的次
MOV B, R4 MUL AB ;取乘数低位字节R4
;R4XR2
ACAL L RADD MOV A, R2 MOV
B,
R5
MUL AB
DEC RO
ACAL L
RADD
MOV A , R4 MOV B, R3
MIL AB
DEC RO
DEC
RO
ACAL L RADD MOV A ,,R5 MOV B, R3
MIL AB
DEC
RO
ACALL RAD ?D
DEC
RO
RET
RADD : ADD A,
?RO
MOV
?RO, A
:调用乘积相加子程序 ;取被乘数低位字节R2
;取乘数高位字节R5
;R5XR2
;积字节指针减1 ;调用乘积相加子程序
;R4XR3
;R5XR3
:累加子程序
序重新排列。
S 2_L:MOV R4, #5
CLR F0
PUSH OOH :RO入栈
POP 01H ;出栈赋给
R1
INC R1
LOOPO:MOV A, R4
MOV R5, A
L00P1:MOV A, @R0
MOV B, A
MOV A, @R1
CJNE A, B. NEXT
SJMP NOCH
NEXT:JNC NOCH
SETB F0
MOV @R0, A
XCH A. B
MOV @R1, A
NOCH:INC RO
INC R1
DJNZ R5, L00P1
JNB FO, HALT
DJNZ R4, LOOPO
HALT:RET
12.试设计一个子程序,其功能为查表指令:MOVCA, 9A+PC,求累加器(A)的平方值.结果送A.入口
时(A) <15o
SQRT:ADD A, #1
@A+PC
MOVC A
t
RET
TAB:DB 0,1,4,9,-,225