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

📄 mult24x16.s51

📁 Analog 公司 ADE7169 SOC 电表方案DEMO程序
💻 S51
字号:
/*

  -2006/09/22 - Petre M.
-this program computes a multiplication between a 24 bit number stored in
    Temporary[2-0]  and a 16 bit number stored in Temporary[3]
-The result is stored in Temporary1[4-0]
              C     B     A
                    E     D
           ----------------
                    A  *  D
              B  *  D
        C  *  D
              A  *  E
        B  *  E
  C  *  E
  --------------------------
 [4]   [3]   [2]   [1]   [0]
*/

  PUBLIC    mult24x16
  FUNCTION  mult24x16,0203H
  EXTERN Temporary, Temporary1

  RSEG NEAR_CODE:CODE:NOROOT(0)


mult24x16:
    CLR C
    CLR A
    MOV Temporary1+1, A

    MOV R0,#Temporary
    MOV R1,#Temporary1
//this loop executes A*D, B*D, C*D
Repeat_Mul:
    MOV A, @R0
    MOV B, Temporary+3
    MUL AB
    ADD A, @R1
    MOV @R1, A
    CLR A
    ADDC A, B
    INC R1
    MOV @R1, A
    INC R0
    CJNE R1,#Temporary1+3, Repeat_Mul




/*
    MOV A, Temporary      ;A
    MOV B, Temporary+3    ;D
    MUL AB                ;A*D
    MOV Temporary1, A     ;store LSB(A*D) at Temporary1[0]
    MOV Temporary1+1, B   ;Temporary1[1]=MSB(A*D)

    MOV A, Temporary+1    ;B
    MOV B, Temporary+3    ;D
    MUL AB                ;B*D
    ADD A, Temporary1+1   ;LSB(B*D)+MSB(A*D)
    MOV Temporary1+1, A   ;store LSB(B*D)+MSB(A*D) at Temporary1[1]
    CLR A
    ADDC A, B
    MOV Temporary1+2, A   ;store MSB(B*D) at Temporary1[2]

    MOV A, Temporary+2    ;C
    MOV B, Temporary+3    ;D
    MUL AB                ;C*D
    ADD A, Temporary1+2   ;LSB(C*D)+MSB(B*D)
    MOV Temporary1+2, A   ;store LSB(C*D)+MSB(B*D) at Temporary1[2]
    CLR A
    ADDC A, B
    MOV Temporary1+3, A   ;store MSB(C*D) at Temporary1[3]
*/

    MOV A, Temporary      ;A
    MOV B, Temporary+4    ;E
    MUL AB                ;A*E
    ADD A, Temporary1+1   ;LSB(A*E)+LSB(B*D)+MSB(A*D)
    MOV Temporary1+1, A   ;store LSB(A*E)+LSB(B*D)+MSB(A*D) at Temporary1[1]
    CLR A
    ADDC A, B
    ADDC A, Temporary1+2  ;MSB(A*E)+LSB(C*D)+MSB(B*D)
    MOV Temporary1+2, A   ;store MSB(A*E)+LSB(C*D)+MSB(B*D) at Temporary1[2]
    CLR A
    ADDC A, Temporary1+3  ;add the carry to MSB(C*D)
    MOV Temporary1+3, A   ;store MSB(C*D) at Temporary1[3]

    MOV A, Temporary+2    ;C
    MOV B, Temporary+4    ;E
    MUL AB                ;C*E
    ADDC A, Temporary1+3   ;LSB(C*E)+MSB(C*D)
    MOV Temporary1+3, A   ;store LSB(C*E)+MSB(C*D) at Temporary1[3]
    CLR A
    ADDC A, B
    MOV Temporary1+4, A   ;store MSB(C*E) at Temporary1[4]

    MOV A, Temporary+1    ;B
    MOV B, Temporary+4    ;E
    MUL AB                ;B*E
    ADD A, Temporary1+2   ;LSB(B*E)+MSB(A*E)+LSB(C*D)+MSB(B*D)
    MOV Temporary1+2, A   ;store LSB(B*E)+MSB(A*E)+LSB(C*D)+MSB(B*D) at Temporary1[2]
    CLR A
    ADDC A, B
    ADDC A, Temporary1+3  ;MSB(B*E)+MSB(C*D)
    MOV Temporary1+3, A   ;store MSB(B*E)+MSB(C*D) at Temporary1[3]
    CLR A
    ADDC A, Temporary1+4  ;MSB(C*E)+Carry
    MOV Temporary1+4, A   ;store MSB(C*E) at Temporary1[4]





    RET

  END

⌨️ 快捷键说明

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