- MOV B,#7FH
- MOV A,#32H
- CALL AVG_AB
- SJMP $
- MIN_AB: ;B小于A 则将B传送给A,否则不传送
- PUSH PSW ;将PSW压入堆栈,比较完成后不影响进位C等标志。
- CJNE A,B,MIN_AB_NOT ;比较后若A小于B则进位C为1,否则为0
- JMP MIN_AB_END ;比较等于则执行此语句
- MIN_AB_MOV: ;比较成立 进行数值传送
- MOV A,B ;将B送A
- JMP MIN_AB_END
- MIN_AB_NOT: ;比较不等于会跳转到这里
- JNC MIN_AB_MOV ;进位C为0则跳转,否则顺序执行
- MIN_AB_END:
- POP PSW
- RET
- MAX_AB: ;B大于A 则将B传送给A,否则不传送
- PUSH PSW
- CJNE A,B,MAX_AB_NOT
- JMP MAX_AB_END ;比较等于则执行此语句
- MAX_AB_MOV: ;比较成立 进行数值传送
- MOV A,B ;将B送A
- JMP MAX_AB_END
- MAX_AB_NOT: ;比较不等于会跳转到这里
- JC MAX_AB_MOV ;进位C为1则跳转,否则顺序执行
- MAX_AB_END:
- POP PSW
- RET
- AVG_AB: ;AB取平均值 A=(A+B)/2
- PUSH PSW
- ADD A,B
- CLR C
- RRC A
- POP PSW
- RET
- END
复制代码
|