Home     Projects     Micro     Tools     Delphi     Developer     Site map
HOME  
 
 
       
32 bit multiplicand

DOWNLOAD     MAIN
;  Call:  var1[3:0] = 32bit multiplicand
;         var1[7:4] = don't care
;         var2[3:0] = 32bit multiplier
;                   lc  = don't care 
;                           (high register must be allocated)
;  Result:var1[7:0]  = 64bit result of var1[3:0] * var2[3:0]
;            var2[3:0] = not changed
;                      lc  = 0
;
; Size  = 21 words
; Clock = 436..532 cycles (+ret)
; Stack = 0 byte

mul32u:		
		sub	var17,var17	
		sub	var16,var16	
		sub	var15,var15	
		sub	var14,var14	
		ldi	lc,33		; lc = 33;
		brcc	PC+5		
		add	var14,var20	;
		adc	var15,var21	;
		adc	var16,var22	;
		adc	var17,var23	;
		ror	var17		;
		ror	var16		;
		ror	var15		;
		ror	var14		;
		ror	var13		;
		ror	var12		;
		ror	var11		;
		ror	var10		;
		dec	lc		
		brne	PC-14	
		ret

mul32s:		clr	lc	
		clr	var14	
		tst	var13
		brpl	PC+10
		inc	var14
		com	var10
		com	var11
		com	var12
		com	var13
		adc	var10,lc
		adc	var11,lc
		adc	var12,lc
		adc	var13,lc
		tst	var21
		brpl	PC+10
		inc	var14
		com	var20
		com	var21
		com	var22
		com	var23
		adc	var20,lc
		adc	var21,lc
		adc	var22,lc
		adc	var23,lc
		bst	var14,0

		rcall	mul16u

		brtc	PC+17
		com	var10
		com	var11
		com	var12
		com	var13
		com	var14
		com	var15
		com	var16
		com	var17
		adc	var10,lc
		adc	var11,lc
		adc	var12,lc
		adc	var13,lc
		adc	var14,lc
		adc	var15,lc
		adc	var16,lc
		adc	var17,lc
		ret		  
		  

Copyright(c) 2005-2008 sixca.com, All right reserved.
Best view @ 800X600, IE 6.0 up   
Terms of Use  Privacy Policy