?? mult24x16.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 + -