GPIO 发表于 2018-11-6 10:04:59

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

1心1亿 发表于 2018-11-6 12:32:09

这玩意说难不难说简单也不简单

朵朵 发表于 2018-11-6 21:30:30

{:15_4494:}{:15_4494:}{:15_4494:}{:15_4494:}
页: [1]
查看完整版本: C51汇编实现取AB寄存器之间的最大值/最小值/平均值并进行比较大小/传送 不影响标志位