首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
51单片机汇编程序集(4)
来源:本站整理  作者:佚名  2011-02-05 21:35:47




      31、原码有符号双字节减法程序
      32、原码有符号双字节加法程序
      33、原码有符号双字节乘法程序
      34、原码有符号双字节除法程序
      35、单字节顺序查找程序
      36、单字节顺序查找程序
      37、双字节字符串顺序查找程序
      38、双字节字符串顺序查找程序
      39、N字节字符串顺序查找程序
      40、单字节最值查找程序
      41、浮点数顺序查找程序
      42、浮点数最值查找程序
      43、单字节折半查找程序
      ;原码有符号双字节减法程序 (R3R4-R6R7)=R3R4
      ;入口    :R3,R4,R6,R7
      ;占用资源:ACC,DADD
      ;堆栈需求:6字节
      ;出口    :R3,R4,OV
      DSUB     : MOV     A,R6
                CPL    ACC.7
                MOV     R6,A
                LCALL  DADD
                RET
      ;原码有符号双字节加法程序 (R3R4+R6R7)=R3R4
      ;入口    :R3,R4,R6,R7
      ;占用资源:ACC,SR0,NADD,NSUB,CMPT
      ;堆栈需求:4字节
      ;出口    :R3,R4,OV
      DADD     : MOV     A,R3
                MOV     C,ACC.7
                MOV     SR0,C
                XRL    A,R6
                MOV     C,ACC.7
                MOV     A,R3
                CLR    ACC.7
                MOV     R3,A
                MOV     A,R6
                CLR    ACC.7
                MOV     R6,A
                JC     DAB2
                LCALL  NADD
                MOV     A,R3
                JB     ACC.7,DABE
      DAB1     : MOV     C,SR0
                MOV     ACC.7,C
                MOV     R3,A
                CLR    OV
                RET
      DABE     :SETB   OV
                RET
      DAB2     :LCALL  NSUB
                MOV     A,R3
                JNB    ACC.7,DAB1
                LCALL  CMPT
                CPL    SR0
                SJMP   DAB1
      ;原码有符号双字节乘法程序 (R3R4*R6R7)=(R5R2R3R4)
      ;入口    :R3,R4,R6,R7
      ;占用资源:ACC,SR0,NMUL22
      ;堆栈需求:4字节
      ;出口    :R5,R2,R3,R4
      IMUL     : MOV     A,R3
                XRL    A,R6
                MOV     C,ACC.7
                MOV     SR0,C
                MOV     A,R3
                CLR    ACC.7
                MOV     R3,A
                MOV     A,R6
                CLR    ACC.7
                MOV     R6,A
                LCALL  NMUL22
                MOV     A,R5
                MOV     C,SR0
                MOV     ACC.7,C
                MOV     R5,A
                RET
      ;原码有符号双字节除法程序 (R5R2R3R4/R6R7)=(R3R4) 余数(R6R7)
      ;入口    :R5,R2,R3,R4
      ;占用资源:ACC,SR0,NDIV42
      ;堆栈需求:6字节
      ;出口    :R3,R4,R6,R7,OV
      IDIV     : MOV     A,R5
                XRL    A,R6
                MOV     C,ACC.7
                MOV     SR0,C
                MOV     A,R5
                CLR    ACC.7
                MOV     R5,A
                MOV     A,R6
                CLR    ACC.7
                MOV     R6,A
                LCALL  NDIV42
                MOV     A,R3
                JB     ACC.7,IDIVE
                JB     OV,IDIVE
                MOV     C,SR0
                MOV     ACC.7,C
                MOV     R3,A
                RET
      IDIVE    :SETB   OV
                RET
      
      ;单字节顺序查找程序
      ;入口    :R0,R1,A,R7
      ;占用资源:B
      ;堆栈需求:2字节
      ;出口    :R0,R1,A
      FINDB1   : MOV     B,A
                MOV     DPL,R1
                MOV     DPH,R0
      FINDB11  : MOV X   A,@DPTR
                CJNE   A,B,FINDB12
                MOV     R1,DPL
                MOV     R0,DPH
                CLR    A
                RET
      FINDB12  :INC    DPTR
                DJNZ   R7,FINDB11
                MOV     A,#0FFH
                RET
      ;单字节顺序查找程序
      ;入口    :R0,R1,A,R6,R7
      ;占用资源:B
      ;堆栈需求:2字节
      ;出口    :R0,R1,A
      FINDB2   : MOV     B,A
                MOV     DPL,R1
                MOV     DPH,R0
                MOV     A,R7
                JZ     FINDB21
                INC    R6
      FINDB21  : MOV X   A,@DPTR
                CJNE   A,B,FINDB22
                MOV     R1,DPL
                MOV     R0,DPH
                CLR    A
                RET
      FINDB22  :INC    DPTR
                DJNZ   R7,FINDB21
                DJNZ   R6,FINDB21
                MOV     A,#0FFH
                RET
      ;双字节字符串顺序查找程序
      ;入口    :R0,R1,R3,R4,R7
      ;占用资源:ACC,B
      ;堆栈需求:2字节
      ;出口    :R0,R1,A
      FINDS1   : MOV     DPL,R1
                MOV     DPH,R0
      FINDS11  : MOV X   A,@DPTR
                INC    DPTR
                CLR    C
                SUBB   A,R4
                JNZ    FINDS12
                MOV X   A,@DPTR
                SUBB   A,R3
                JNZ    FINDS12
                MOV     A,DPL
                CLR    C
                SUBB   A,#01H
                MOV     R1,A
                MOV     A,DPH
                SUBB   A,#00H
                MOV     R0,A
                CLR    A
                RET
      FINDS12  :DJNZ   R7,FINDS11
                MOV     A,#0FFH
                RET
      ;双字节字符串顺序查找程序
      ;入口    :R0,R1,R3,R4,R6,R7
      ;占用资源:ACC,B
      ;堆栈需求:2字节
      ;出口    :R0,R1,A
      FINDS2   : MOV     DPL,R1
                MOV     DPH,R0
                MOV     A,R7
                JZ     FINDS21
                INC    R6
      FINDS21  : MOV X   A,@DPTR
                INC    DPTR
                CLR    C
                SUBB   A,R4
                JNZ    FINDS22
                MOV X   A,@DPTR
                SUBB   A,R3
                JNZ    FINDS22
                MOV     A,DPL
                CLR    C
                SUBB   A,#01H
                MOV     R1,A
                MOV     A,DPH
                SUBB   A,#00H
                MOV     R0,A
                CLR    A
                RET
      FINDS22  :DJNZ   R7,FINDS21
                DJNZ   R6,FINDS21
                MOV     A,#0FFH
                RET
      ;N字节字符串顺序查找程序
      ;入口    :ADDPH,ADDPL,R0,R6,R7,N
      ;占用资源:ACC,B,R2,NCNT
      ;堆栈需求:2字节
      ;出口    :ADDPH,ADDPL,A
      FINDN    : MOV     A,R0
                MOV     R2,A
                MOV     A,ADDPL
                MOV     DPL,A
                MOV     A,ADDPH
                MOV     DPH,A
                MOV     A,R7
                JZ     FINDN1
                INC    R6
      FINDN1   : MOV     A,R2
                MOV     R0,A
                MOV     A,N
                MOV     NCNT,A
      FINDN2   : MOV X   A,@DPTR
                CLR    C
                SUBB   A,@R0
                JNZ    FINDN3
                INC    DPTR
                INC    R0
                DJNZ   NCNT,FINDN2
                MOV     A,DPL
                CLR    C
                SUBB   A,N
                MOV     ADDPL,A
                MOV     A,DPH
                SUBB   A,#00H
                MOV     ADDPH,A
                CLR    A
                RET
      FINDN3   :CLR    C
                MOV     A,R0
                SUBB   A,R2
                JNZ    FINDN4
                INC    DPTR
      FINDN4   :DJNZ   R7,FINDN1
                DJNZ   R6,FINDN1
                MOV     A,#0FFH
                RET
      ;单字节最值查找程序
      ;入口    :R0,R1,R6,R7
      ;占用资源:ACC,B
      ;堆栈需求:2字节
      ;出口    :R0(最大值),R1(最小值),R2,R3,R4,R5
      FMAMIB   : MOV     DPL,R1
                MOV     DPH,R0
                MOV X   A,@DPTR
                MOV     R0,A
                MOV     R1,A
                MOV     A,DPL
                MOV     R3,A
                MOV     R5,A
                MOV     A,DPH
                MOV     R2,A
                MOV     R4,A
                MOV     A,R7
                JZ     FMMB1
                INC    R6
      FMMB1    : MOV X   A,@DPTR
                MOV     B,A
                SETB   C
                SUBB   A,R0
                JC     FMMB2
                MOV     R0,B
                MOV     R3,DPL
                MOV     R2,DPH
                SJMP   FMMB3
      FMMB2    : MOV     A,B
                CLR    C
                SUBB   A,R1
                JNC    FMMB3
                MOV     R1,B
                MOV     R5,DPL
                MOV     R4,DPH
      FMMB3    :INC    DPTR
                DJNZ   R7,FMMB1
                DJNZ   R6,FMMB1
                RET
      ;浮点数顺序查找程序
      ;入口    :R0,R1,R2,R3,R4,R6,R7
      ;占用资源:B,NCNT,FCMP
      ;堆栈需求:2字节
      ;出口    :R0,R1,A
      FINDF    : MOV     DPL,R1
                MOV     DPH,R0
                MOV     A,R7
                MOV     B,A
                MOV     NCNT,R6
                JZ     FINDF1
                INC    NCNT
      FINDF1   : MOV X   A,@DPTR
                INC    DPTR
                MOV     R5,A
                MOV X   A,@DPTR
                INC    DPTR
                MOV     R6,A
                MOV X   A,@DPTR
                INC    DPTR
                MOV     R7,A
                LCALL  FCMP
                JNZ    FINDF2
                MOV     A,DPL
                CLR    C
                SUBB   A,#03H
                MOV     R1,A
                MOV     A,DPH
                SUBB   A,#00H
                MOV     R0,A
                CLR    A
                RET
      FINDF2   :DJNZ   B,FINDF1
                DJNZ   NCNT,FINDF1
                MOV     A,#0FFH
                RET
      ;浮点数最值查找程序
      ;入口    :ADDPH,ADDPL,R6,R7
      ;占用资源:ACC,B,NCNT,ITE MOV ,EBMOV,MOVB,MOVR1,FCMP
      ;堆栈需求:5字节
      ;出口    :[R0](最大值),[R1](最小值),R2,R3,R4,R5
      FMAMIF   : MOV     A,ADDPL
                MOV     R3,A
                MOV     R5,A
                MOV     DPL,A
                MOV     A,ADDPH
                MOV     R2,A
                MOV     R4,A
                MOV     DPH,A
                MOV     B,R7
                MOV     R7,#03H
                LCALL  ITE MOV
                MOV     R7,#03H
                LCALL  IB MOV
                MOV     A,B
                JZ     FMMF1
                INC    NCNT
      FMMF1    :PUSH   B
                MOV X   A,@DPTR
                INC    DPTR
                MOV     R2,A
                MOV X   A,@DPTR
                INC    DPTR
                MOV     R3,A
                MOV X   A,@DPTR
                INC    DPTR
                MOV     R4,A
                LCALL  MOV R1
                LCALL  FCMP
                JNC    FMMF2
                MOV     A,R0
                XCH    A,R1
                MOV     R0,A
                LCALL  MOV B
                MOV     R5,DPL
                MOV     R4,DPH
                MOV     A,R0
                XCH    A,R1
                MOV     R0,A
                SJMP   FMMF3
      FMMF2    : MOV     A,R0
                XCH    A,R1
                MOV     R0,A
                LCALL  MOV R1
                LCALL  FCMP
                MOV     A,R0
                XCH    A,R1
                MOV     R0,A
                JZ     FMMF3
                JC     FMMF3
                LCALL  MOV B
                MOV     R3,DPL
                MOV     R2,DPH
      FMMF3    :POP    B
                DJNZ   B,FMMF1
                DJNZ   NCNT,FMMF1
                RET

      ;单字节折半查找程序
      ;入口    :A,R0,R1,R6,R7
      ;占用资源:B,R2
      ;堆栈需求:2字节
      ;出口    :R0,R1
      SEARCHB  : MOV     B,A
                MOV     A,R1
                ADD    A,R7
                MOV     R7,A
                MOV     A,R0
                ADDC   A,R6
                MOV     R6,A
                MOV     A,R7
                SUBB   A,#01H
                MOV     R7,A
                JNC    SECH1
                DEC    R6
      SECH1    : MOV     A,R7
                CLR    C
                SUBB   A,R1
                MOV     A,R6
                SUBB   A,R0
                JNC    SECH2
                MOV     A,#0FFH
                RET
      SECH2    : MOV     A,R7
                ADD    A,R1
                MOV     R2,A
                MOV     A,R6
                ADDC   A,R0

关键词:

·上一文章:秒计时器程序
·下一文章:51单片机汇编程序集(3)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:229,632.80000 毫秒