⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isomaths.asm

📁 《单片机应用系统设计与产品开发》配套源码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
           ACALL LST
           AJMP  LP51

LPOVER:      MOV    A,R5
             JNB    NEGATIVE_FLAG,LPOVER1
             SETB   C
             AJMP   LPOVER2
LPOVER1:     CLR    C
LPOVER2:     RRC    A
             MOV    R5,A
             JC     LPOVER3
             MOV    A,R4
             CLR    ACC.7
             MOV    R4,A
  LPOVER3:   MOV    R6,R8
             MOV    R7,R9
             LCALL  STORE
             RET



LP6:         ;特殊情况0,每办法规格化
             MOV   R5,#00
             MOV   R4,#00
             MOV   R3,#00
             MOV   R2,#00
             MOV   R6,R8
             MOV   R7,R9
             LCALL STORE
             RET

;****************************************************************
;双字节无符号整形转化成浮点数
;由R0,R1指向要转换的数,转化后的结果存到r6,r7所知的单元
;*************************************************************
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BTOF:        CLR     NEGATIVE_FLAG
             MOV     DPL,R0
             MOV     DPH,R1
             MOVX    A,@DPTR
             MOV     R4,A
             INC     DPTR
             MOVX    A,@DPTR
             MOV     R3,A
             INC     DPTR
             MOV     R1,DPH
             MOV     R0,DPL

             MOV    A,R4
             JNB    ACC.7,UF0
             SETB   NEGATIVE_FLAG
             CLR    C
             MOV    A,R3
             SUBB   A,#1
             CPL    A
             MOV    R3,A
             MOV    A,R4
             SUBB   A,#0
             CPL    A
             MOV    R4,A

UF0:         MOV     R2,#0H
             MOV     R5,#0FH
             MOV     A,R4
UF1:         JB      ACC.7,UF2
             ACALL   LST
             MOV     A,R5
             JZ      UF4
             MOV     A,R4
             AJMP    UF1

UF2:         MOV    A,R5
             ADD    A,#127
             JB     NEGATIVE_FLAG,UF_NEG
             CLR    C
UF_NE1:      RRC    A
             MOV    R5,A
             JC     UF3
             MOV    A,R4
             CLR    ACC.7
             MOV    R4,A
UF3:         LCALL  STORE
             RET

UF_NEG:      SETB  C
             AJMP  UF_NE1

 UF4:        MOV   A,R4          ;特殊情况0,每办法规格化
             JNZ   UF2
             MOV   R5,#00
             MOV   R4,#00
             MOV   R3,#00
             MOV   R2,#00
             LCALL STORE
             RET

LST:         CLR    C
             XCH    A,R2
             RLC    A
             XCH    A,R2
             XCH    A,R3
             RLC    A
             XCH    A,R3
             XCH    A,R4
             RLC    A
             XCH    A,R4
             DEC    R5
             RET
 ;*********************************
;将4字节浮点数村存入R6,R7所指向的单元
;
;*********************************

  STORE:     MOV     DPL,R6
             MOV     DPH,R7
             MOV     A,R2
             MOVX    @DPTR,A
             INC     DPTR
             MOV     A,R3
             MOVX    @DPTR,A
             INC     DPTR
             MOV     A,R4
             MOVX    @DPTR,A
             INC     DPTR
             MOV     A,R5
             MOVX    @DPTR,A
             INC     DPTR
             MOV     R6,DPL
             MOV     R7,DPH
             RET

;****************************************************************
;双字节无符号(隐含1位小数点)整形转化成浮点数
;由R0,R1指向要转换的数,转化后的结果存到r6,r7所知的单元
;*************************************************************
B4TOF:    MOV   R8,R6
          MOV   R9,R7
          MOV   FLOOP_COUNT,#32;移位32次
          MOV   R7,#00               ;QINGLING
          MOV   DPL,R0
          MOV   DPH,R1
          MOVX  A,@DPTR     ;先取的为高位
          MOV   R4,A
          INC   DPTR
          MOVX  A,@DPTR
          MOV   R3,A
          INC   DPTR
          MOVX  A,@DPTR
          MOV   R2,A
          INC   DPTR
          MOVX  A,@DPTR
          MOV   R10,A
          INC   DPTR
          MOV   R1,DPH
          MOV   R0,DPL

          MOV   A,R10      ;0不能规格化
          JNZ   B4F1
          MOV   A,R2
          JNZ   B4F1
          MOV   A,R3
          JNZ   B4F1
          MOV   A,R4
          JNZ   B4F1
          MOV   R5,#00H
          MOV   R6,R8
          MOV   R7,R9
          LCALL STORE
          RET
B4F1:     ;以下是除10子程序,通过移位完成,入口R4高,R3底,被除数;出口R4高,R3底,商;R7用于移位,并存余数
           CLR   C
           MOV   A,R10        ; 为了和其它几个几个浮点程序一样的出入口及格式
           RLC   A
           MOV   R10,A
           MOV   A,R2
           RLC   A
           MOV   R2,A
           MOV   A,R3
           RLC   A
           MOV   R3,A
           MOV   A,R4
           RLC   A
           MOV   R4,A
           MOV   A,R7
           RLC   A
           MOV   R7,A

B4F2:      CLR   C                    ;除以10分离出整数,和小数
           MOV   A,R7
           SUBB  A,#10                 ;除10
           JC    B4FSMALL
           MOV   R7,A                  ;存余数
           INC   R10
           SJMP  b4F2

B4FSMALL:  DJNZ  FLOOP_COUNT,B4F1
           MOV   R6,#0
           MOV   FLOOP_COUNT,#8H          ;以下将R7中的小数部分转化为二进制小数,放于R6,FLOOP_COUNT用于循环8次
B4F3:      CLR   C
           MOV   A,R7
           ADDC  A,R7
           DA    A
           MOV   B,A
           ANL   A,#0F0H         ;分离出高4位,看是否有进位,由于除数是10 ,因此每次只能进位1位
           JZ    B4F4
           SETB  C
           MOV   A,R6
           RLC   A
           MOV   R6,A
           AJMP  B4F31
 B4F4:     CLR   C
           MOV   A,R6
           RLC   A
           MOV   R6,A
 B4F31:    MOV   A,B
           ANL   A,#0FH
           MOV   R7,A
           DJNZ  FLOOP_COUNT,B4F3

           MOV   R5,#158          ;31+127=158 阶码初始值
 B4F5:     MOV   A,R4                       ;以下是规格化此浮点数
           JB    ACC.7,B4FOVER
           ACALL B4FLST
           AJMP  B4F5

B4FOVER:     MOV    A,R5
             CLR    C
             RRC    A
             MOV    R5,A
             JC     B4FOVER3
             MOV    A,R4
             CLR    ACC.7
             MOV    R4,A
B4FOVER3:    MOV    R6,R8
             MOV    R7,R9
             LCALL  STORE
             RET

B4FLST:      CLR    C
             XCH    A,R6
             RLC    A
             XCH    A,R6
             XCH    A,R10
             RLC    A
             XCH    A,R10
             XCH    A,R2
             RLC    A
             XCH    A,R2
             XCH    A,R3
             RLC    A
             XCH    A,R3
             XCH    A,R4
             RLC    A
             XCH    A,R4
             DEC    R5
             RET

;**********************************************
;外部数据RAM到外部RAM数据块复制
;R1(高)R0(底):原数据区首址
;R7(高)R6(底):目的数据区首址
; R2 :数据块长度
;**********************************************

  COPY:     MOV      DPH,R1
            MOV      DPL,R0
            MOVX     A,@DPTR

            INC      DPTR
            MOV      R1,DPH
            MOV      R0,DPL
            MOV      DPH,R7
            MOV      DPL,R6
            MOVX     @DPTR,A

            INC      DPTR
            MOV      R6,DPL
            MOV      R7,DPH
            DJNZ     R2,COPY
            RET

CLR_RAM:    MOV    DPTR,#ADDR_REAL-100
            MOV    R1,#4
            MOV    R2,#255
            MOV    A,#0
 C1R:       MOVX   @DPTR,A
            INC    DPTR
            DJNZ   R2,C1R
            DJNZ   R1,C1R
            RET

 COPY_ALARM:MOV      DPH,R1
            MOV      DPL,R0
            MOVX     A,@DPTR

            INC      DPTR
            MOV      R1,DPH
            MOV      R0,DPL
            MOV      DPH,R7
            MOV      DPL,R6
            JZ       NO_ALARM
            JB       ACC.7,NO_ALARM
            MOV      A,#0FFH
            MOVX     @DPTR,A

            INC      DPTR
            MOV      R6,DPL
            MOV      R7,DPH
            DJNZ     R2,COPY_ALARM
            RET

NO_ALARM:   MOV      A,#0
            MOVX     @DPTR,A
            INC      DPTR
            MOV      R6,DPL
            MOV      R7,DPH
            DJNZ     R2,COPY_ALARM
            RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -