结构推理 求两个无符号数数据块的最大值,结果存入MAX单元。设数据块长度都不为0,首地址分别为BLOCK1(40H)和BLOCK2(60H),数据块首字节为数据块长度。
【正确答案】编程如下:
   主程序:
   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   ;
【答案解析】