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

📄 almul.s

📁 TCP-IP红宝书源代码
💻 S
字号:
|J. Test	1/81
|addressed signed long multiply routine: *a = *a * b

	.globl	almul
	.text

almul:	link	a6,#0
	moveml	#0x3800,sp@-	|save d2,d3,d4
	movl	#1,d4		|sign of result
	movl	a6@(8),a0	|a0 = pointer to a
	movl	a0@,d2		|d2 = a
	bge	1$
	negl	d2
	negl	d4
1$:	movl	a6@(12),d3	|d3 = b
	bge	2$
	negl	d3
	negl	d4

2$:	clrl	d0
	movw	d2,d0		|d0 = alo, unsigned
	mulu	d3,d0		|d0 = blo*alo, unsigned
	movw	d2,d1		|d1 = alo
	swap	d2		|swap alo-ahi
	mulu	d3,d2		|d2 = blo*ahi, unsigned
	swap	d3		|swap blo-bhi
	mulu	d3,d1		|d1 = bhi*alo, unsigned
	addl	d2,d1		|d1 = (ahi*blo + alo*bhi)
	swap	d1		|d1 =
	clrw	d1		|   (ahi*blo + alo*bhi)*(2**16)
	addl	d1,d0		|d0 = alo*blo + (ahi*blo + alo*bhi)*(2**16)
	tstl	d4		|sign of result
	bge	3$
	negl	d0

3$:	movl	d0,a0@		|store result via pointer
	moveml	sp@+,#0x1C	|restore d2,d3,d4
	unlk	a6
	rts

⌨️ 快捷键说明

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