41 lines
		
	
	
	
		
			550 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
	
		
			550 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| .define .mlu
 | |
| .sect .text
 | |
| .sect .rom
 | |
| .sect .data
 | |
| .sect .bss
 | |
| 
 | |
|  ! entry : d0 multiplicand
 | |
|  !         d1 multiplier
 | |
|  ! exit  : d0 high order result
 | |
|  !         d1 low order result
 | |
| 
 | |
| 	.sect .text
 | |
| .mlu:
 | |
| 	move.l	(sp)+,a1
 | |
| 	move.l	(sp)+,d1
 | |
| 	move.l	(sp)+,d0
 | |
| 	movem.l	d3/d4/d6,-(sp)
 | |
| 	move.l	d1,d3
 | |
| 	move.l	d1,d2
 | |
| 	swap	d2
 | |
| 	move.l	d2,d4
 | |
| 	mulu	d0,d1
 | |
| 	mulu	d0,d2
 | |
| 	swap	d0
 | |
| 	mulu	d0,d3
 | |
| 	mulu	d4,d0
 | |
| 	clr.l	d6
 | |
| 	swap	d1
 | |
| 	add	d2,d1
 | |
| 	addx.l	d6,d0
 | |
| 	add	d3,d1
 | |
| 	addx.l	d6,d0
 | |
| 	swap	d1
 | |
| 	clr	d2
 | |
| 	clr	d3
 | |
| 	swap	d2
 | |
| 	swap	d3
 | |
| 	add.l	d2,d0
 | |
| 	add.l	d3,d0
 | |
| 	movem.l	(sp)+,d3/d4/d6
 | |
| 	jmp	(a1)
 |