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

📄 factor.s

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 S
字号:
.globl	sqrtexit = 1.read = 3.write = 4.ldfps = 170100^tst/	ldfps	$240	clr	argflg	cmp	(sp)+,$2	blt	begin	tst	(sp)+	mov	(sp),r2	jsr	r5,atof; getch1	inc	argflg	br	begin1begin:	tst	argflg	beq 9f; sys exit; 9:	jsr	r5,atof; getchbegin1:	tstf	fr0	cfcc	bpl 9f; jmp ouch; 9:	bne 9f; sys exit; 9:	cmpf	big,fr0	cfcc	bgt 9f; jmp ouch; 9:/	movf	fr0,n	jsr	pc,sqrt	movf	fr0,v	mov	$1,r0	sys	write; nl; 1/	movf	$one,fr0	movf	fr0,fr4/	movf	n,fr0	movf	$two,fr1	jsr	r5,xt/	movf	n,fr0	movif	$3,fr1	jsr	r5,xt/	movf	n,fr0	movif	$5,fr1	jsr	r5,xt/	movf	n,fr0	movif	$7,fr1	jsr	r5,xt/	movf	n,fr0	movif	$11.,fr1	jsr	r5,xt/	movf	n,fr0	movif	$13.,fr1	jsr	r5,xt/	movf	n,fr0	movif	$17.,fr1	mov	$tab+6,r4	jsr	pc,xx	jmp	begin/xt:	movf	fr0,fr2	divf	fr1,fr2	modf	$one,fr2	movf	fr3,fr2	mulf	fr1,fr2	cmpf	fr2,fr0	cfcc	beq	hit2	rts	r5//out1:	mov	$tab,r4	br	in1out2:	modf	fr4,fr2	cfcc	bne 9f; mov $xx0,-(sp); jmp hit; 9:	br	in2xx:	mov	(r4)+,kazooxx0:	mov	$kazoo,r0	mov	$100.,r1	clr	r2	mov	$gorp,r3	mov	$gorp+6,r5xx1:	movf	fr0,fr2	divf	fr1,fr2	cmp	r4,$tabend	bhis	out1in1:	movf	fr2,(r3)	bit	r2,(r5)	beq	out2in2:kazoo	=.+2	addf	$kazoo,fr1	mov	(r4)+,(r0)	sob	r1,xx1	mov	$100.,r1	mov	$127.,r2	cmpf	v,fr1	cfcc	bge	xx1	cmpf	$one,fr0	cfcc	beq	1f	mov	$1,r0	sys	write; sp5; 5	movf	n,fr0	jsr	r5,ftoa; wrchar	mov	$1,r0	sys	write; nl; 11:	rts	pc///hit2:	movf	fr1,t	movf	fr3,n	movf	fr3,fr0	jsr	pc,sqrt	movf	fr0,v	mov	$1,r0	sys	write; sp5; 5	movf	t,fr0	jsr	r5,ftoa; wrchar	mov	$1,r0	sys	write; nl; 1	movf	n,fr0	movf	t,fr1	cmp	r4,$tab	bne	1f	mov	$tabend,r41:	mov	-(r4),kazoo	jmp	xt/hit:	movf	fr1,t	movf	fr3,n	movf	fr3,fr0	jsr	pc,sqrt	movf	fr0,v	mov	$1,r0	sys	write; sp5; 5	movf	t,fr0	jsr	r5,ftoa; wrchar	mov	$1,r0	sys	write; nl; 1	movf	n,fr0	movf	t,fr1	mov	$kazoo,r0	rts	pc///	get one character from the console./	called from atof./getch:	clr	r0	sys	read; ch; 1	bec 9f; sys exit; 9:	tst r0; bne 9f; sys exit; 9:	mov	ch,r0	rts	r5///	get one character form the argument string.getch1:	movb	(r2)+,r0	rts	r5//	write one character on the console/	called from ftoa./wrchar:	mov	r0,ch	mov	$1,r0	sys	write; ch; 1	rts	r5///	read and convert a line from the console into fr0./atof:	mov	r1,-(sp)	movif	$10.,r3	clrf	r01:	jsr	r5,*(r5)	sub	$'0,r0	cmp	r0,$9.	bhi	2f	mulf	r3,r0	movif	r0,r1	addf	r1,r0	br	1b2:	cmp	r0,$' -'0	beq	1b/	mov	(sp)+,r1	tst	(r5)+	rts	r5////ftoa:	mov	$ebuf,r21:	modf	tenth,fr0	movf	fr0,fr2	movf	fr1,fr0	addf	$epsilon,fr2	modf	$ten,fr2	movfi	fr3,r0	movb	r0,-(r2)	tstf	fr0	cfcc	bne	1b1:	movb	(r2)+,r0	add	$60,r0	jsr	r5,*(r5)	cmp	r2,$ebuf	blo	1b	tst	(r5)+	rts	r5/epsilon = 037114tenth:	037314; 146314; 146314; 146315	.bssbuf:	.=.+18.ebuf:	.text////	complain about a number which the program/	is unable to digestouch:	mov	$2,r0	sys	write; 1f; 2f-1f	jmp	begin/1:	<Ouch.\n>2:	.even//one	= 40200two	= 40400four	= 40600ten	= 41040/	.databig:	056177; 177777; 177777; 177777nl:	<\n>sp5:	<     >	.even/tab:	41040; 40400; 40600; 40400; 40600; 40700; 40400; 40700	40600; 40400; 40600; 40700; 40700; 40400; 40700; 40600	40400; 40700; 40600; 40700; 41000; 40600; 40400; 40600	40400; 40600; 41000; 40700; 40600; 40700; 40400; 40600	40700; 40400; 40700; 40700; 40600; 40400; 40600; 40700	40400; 40700; 40600; 40400; 40600; 40400; 41040; 40400tabend:/	.bssch:	.=.+2t:	.=.+8n:	.=.+8v:	.=.+8gorp:	.=.+8argflg:	.=.+2	.textldfps = 170100^tststfps = 170200^tst//	sqrt replaces the f.p. number in fr0 by its/	square root.  newton's method/.globl	sqrt, _sqrt//_sqrt:	mov	r5,-(sp)	mov	sp,r5	movf	4(r5),fr0	jsr	pc,sqrt	mov	(sp)+,r5	rts	pcsqrt:	tstf	fr0	cfcc	bne	1f	clc	rts	pc		/sqrt(0)1:	bgt	1f	clrf	fr0	sec	rts	pc		/ sqrt(-a)1:	mov	r0,-(sp)	stfps	-(sp)	mov	(sp),r0	bic	$!200,r0		/ retain mode	ldfps	r0	movf	fr1,-(sp)	movf	fr2,-(sp)/	movf	fr0,fr1	movf	fr0,-(sp)	asr	(sp)	add	$20100,(sp)	movf	(sp)+,fr0	/initial guess	mov	$4,r01:	movf	fr1,fr2	divf	fr0,fr2	addf	fr2,fr0	mulf	$half,fr0	/ x = (x+a/x)/2	sob	r0,1b2:	movf	(sp)+,fr2	movf	(sp)+,fr1	ldfps	(sp)+	mov	(sp)+,r0	clc	rts	pc/half	= 40000

⌨️ 快捷键说明

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