【正确答案】编程如下:
主程序:
MAX EQU 30H
BLOCK1 EQU 40H
BLOCK2 EQU 60H
COMAX:MOV R1,#BLOCK1 ;取第一数据块首址
LCALL FMAX ;求第一数据块最大值(最大值→A)
MOV MAX,A ;暂存第一数据块最大值
MOV R1,#BLOCK2 ;取第二数据块首址
LCALL FMAX ;求第二数据块最大值(最大值→A)
CJNE A,MAX,NEXT ;比较两个数据块的最大值
NEXT:JNC NEXT1 ;C=0,MAX2≥MAX1
RET ;C=1,MAX2<MAX1,MAX1→MAX
NEXTI:MOV MAX,A ;MAX2→MAX
RET ;
求数据块最大值子程序:
FMAX: MOV A,@R1 ;取数据块长度
MOV R2,A ;R2作计数器
CLR A ;准备作比较
FMLP: INC R1 ;指向下一个数据
CLR C ;准备作减法
SUBB A,@R1 ;用减法作比较
JNC FMLP1 ;A≥(R1),转
MOV A,@R1 ;A<(R1),(R1)→A
SJMP FMLP2 ;
FMLP1:ADD A,@R1 ;恢复A
FMLP2:DJNZ R2,FLMP ;判循环
RET ;
【答案解析】