第四章
6题试编一数据块搬迁程序。将外部RAM 2000H~204FH单元中的数,移入内部RAM 30H~7FH单元中。
ORG 0000H
MOV R0, #50H
MOV R1, #30H
MOV DPTR, #2000H
LP1: MOVX A, @DPTR
MOV @R1, A
INC R1
INC DPTR
DJNZ R0, LP1
END
7. 在内部RAM的BLOCK开始的单元中有一无符号数据块,数据块长度存入LEN单元,试编程求其中的最小数,并存入MINI单元。
MOV R0, BLOCK ; 取起始地址
MOV R1, LEN ; 取数据块长度
MOV A, @R0
START: CLR CY
SUBB A, @R0
JC EX
XCH A, @R0
EX: INC R0
DJNZ R1, START
MOV MINI, A
14.设变量X存入V AR单元,函数F存入FUNC单元,试编程按下式要求给F赋值:F=1若X>20;
F=0,若20≥X≥10;
F=-1,若X<10
CLR CY
MOV A, V AR
SUBB A, #10
JC U1 ; 小于10,跳转
MOV A, V AR
SUBB A, #21
JC U2 ;小于21(小于等于20)
MOV FUNC, #1
SJMP U3
U1: MOV FUNC, #(-1) (或者-1的补码#0XFF)
SJMP U3
U2: MOV FUNC, #0
U3: ……
21.试编一3字节数乘1字节数子程序MUL4。
功能:3字节乘以1字节,乘积为4字节
入口:(R0)=被乘数低字节地址指针,(R2)=乘数
出口:(R1)=乘积的高字节地址指针
MUL4: MOV A, R1
SUBB A, #3
MOV R1, A ;修改R1的值,使其指向低字节
MOV R3, 0 ;R3中包含乘积高位的累加和,初始值为0
MOV R4, #3 ;R4为循环乘加次数
LOOP: MOV A, @R0 ;取被乘数
MOV B, R2 ;取乘数
MUL AB
ADD A, R3 ;乘积的低位和上次乘积的高位相加
MOV @R1,A ;将结果的低位送保存
MOV A, B
ADDC A, #0 ;将进位加到新的高位上
MOV R3, A ;R3中保存的是最新的高位值
INC R0 ;修改被乘数指针
INC R1 ;修改结果指针
DJNZ R4, LOOP
MOV A, R3
MOV @R1,A ;将最后一次的高位值送内存保存
RET