C51汇编实现取AB寄存器之间的最大值/最小值/平均值并进行比较大小/传送 不影响标志位
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
这玩意说难不难说简单也不简单 {:15_4494:}{:15_4494:}{:15_4494:}{:15_4494:}
页:
[1]