Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;
- ; division 32/16 a resultat sur 32 bit : (x*65536)/y=bigQ
- ; d5.w dividende div 65536 (poid fort) x
- ; d0.w diviseur y
- ;
- ;
- ; formule:
- ; bigQ=(x div y)*65536 +(x mod y)*(65536 div y)+
- ; ((65536 mod y)*(x mod y)) div y
- ;
- ; division non sign
- ;move.w #124,d0 y
- ;move.w #42,d1 x
- ;jsr specialDiv ; 42*65536/124 = x*65536/y
- ; resultat dans d4
- ;illegal
- BSS
- SDr1 ds.w 1 ; (x mod y)
- SDq1 ds.w 1 ; (x div y)
- SDr2 ds.w 1
- SDq2 ds.w 1
- ;.r2 ds.w 1 ; (65536 mod y)
- TEXT
- specialDiv
- moveq #0,d2
- moveq #0,d3
- move.w d0,d2 ;y
- move.w d1,d3 ;x
- divu d2,d3 ; x div y -> d3
- move.l d3,SDr1
- moveq #1,d3
- swap d3 ; d3 = 65536
- divu d0,d3 ; / y
- move.l d3,SDr2 ; stocke reste et quotient
- moveq #0,d4
- move.w SDq1,d4 ; (x div y)
- swap d4 ; * 655536
- move.w SDq2,d5 ; (65536 div y)
- mulu SDr1,d5 ; *(x mod y)
- moveq #0,d6
- move.w d5,d6
- add.l d6,d4
- moveq #0,d5
- move.w SDr2,d5
- mulu SDr1,d5 ; (65536 mod y)*(x mod y)
- divu d0,d5 ; le tout sur y
- moveq #0,d6
- move.w d5,d6
- add.l d6,d4
- ;d4 = resultat
- rts
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement