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

📄 div.s

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 S
字号:
Q	= 0N	= 1D	= 2CC	= 3TMP	= 11TEXT	save<>(SB), 1, $0	MOVW	R(Q), 0(FP)	MOVW	R(N), 4(FP)	MOVW	R(D), 8(FP)	MOVW	R(CC), 12(FP)	MOVW	R(TMP), R(Q)		/* numerator */	MOVW	20(FP), R(D)		/* denominator */	CMP	$0, R(D)	BNE	s1	MOVW	-1(R(D)), R(TMP)	/* divide by zero fault */s1:	RETTEXT	rest<>(SB), 1, $0	MOVW	0(FP), R(Q)	MOVW	4(FP), R(N)	MOVW	8(FP), R(D)	MOVW	12(FP), R(CC)/* * return to caller * of rest<> */	MOVW	0(R13), R14	ADD	$20, R13	B	(R14)TEXT	div<>(SB), 1, $0	MOVW	$32, R(CC)/* * skip zeros 8-at-a-time */e1:	AND.S	$(0xff<<24),R(Q), R(N)	BNE	e2	SLL	$8, R(Q)	SUB.S	$8, R(CC)	BNE	e1	RETe2:	MOVW	$0, R(N)loop:/* * shift R(N||Q) left one */	SLL	$1, R(N)	CMP	$0, R(Q)	ORR.LT	$1, R(N)	SLL	$1, R(Q)/* * compare numerator to denominator * if less, subtract and set quotent bit */	CMP	R(D), R(N)	ORR.HS	$1, R(Q)	SUB.HS	R(D), R(N)	SUB.S	$1, R(CC)	BNE	loop	RETTEXT	_div(SB), 1, $16	BL	save<>(SB)	CMP	$0, R(Q)	BGE	d1	RSB	$0, R(Q), R(Q)	CMP	$0, R(D)	BGE	d2	RSB	$0, R(D), R(D)d0:	BL	div<>(SB)		/* none/both neg */	MOVW	R(Q), R(TMP)	B	outd1:	CMP	$0, R(D)	BGE	d0	RSB	$0, R(D), R(D)d2:	BL	div<>(SB)		/* one neg */	RSB	$0, R(Q), R(TMP)	B	outTEXT	_mod(SB), 1, $16	BL	save<>(SB)	CMP	$0, R(D)	RSB.LT	$0, R(D), R(D)	CMP	$0, R(Q)	BGE	m1	RSB	$0, R(Q), R(Q)	BL	div<>(SB)		/* neg numerator */	RSB	$0, R(N), R(TMP)	B	outm1:	BL	div<>(SB)		/* pos numerator */	MOVW	R(N), R(TMP)	B	outTEXT	_divu(SB), 1, $16	BL	save<>(SB)	BL	div<>(SB)	MOVW	R(Q), R(TMP)	B	outTEXT	_modu(SB), 1, $16	BL	save<>(SB)	BL	div<>(SB)	MOVW	R(N), R(TMP)	B	outout:	BL	rest<>(SB)	B	out

⌨️ 快捷键说明

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