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

📄 dc1.s

📁 Version 6 Unix 核心源代码 Version 6 Unix 核心源代码
💻 S
📖 第 1 页 / 共 2 页
字号:
.globl log2.globl	getchar.globl	lookchar.globl	fsfile.globl	seekchar.globl	backspace.globl	putchar.globl	alterchar.globl	move.globl	rewind.globl	create.globl	zero.globl	allocate.globl	release.globl	collect.globl	w, r, a, l/	cmp	(sp)+,$2	blo	1f	tst	(sp)+	mov	(sp)+,0f	cmpb	*0f,$'-	beq	8f	sys	0; 9f.data9:	sys	open; 0:.=.+2; 0.text	bec	2f	mov	$1,r0	sys	write; 4f; 5f-4f	sys	exit/4:	<Input file.\n>5:	.even/2:	mov	r0,source1:	sys	signal; 2; 1	ror	r0	bcs	1f	sys	signal; 2; case1771:8:	clr	delflag	mov	$pdl,r5/	mov	$10.,r0	jsr	pc,log2	mov	r0,log10	mov	$1,r0	jsr	pc,allocate	mov	r1,scalptr	clr	r0	jsr	pc,putchar	clr	r0	jsr	pc,allocate	mov	r1,basptr	mov	$10.,r0	jsr	pc,putchar	mov	$1,r0	jsr	pc,allocate	mov	r1,inbas	mov	$10.,r0	jsr	pc,putchar	mov	$1,r0	jsr	pc,allocate	mov	$10.,r0	jsr	pc,putchar	mov	r1,tenptr	clr	r0	jsr	pc,allocate	mov	r1,chptr	clr	r0	jsr	pc,allocate	mov	r1,strptr	mov	$1,r0	jsr	pc,allocate	mov	$2,r0	jsr	pc,putchar	mov	r1,sqtemp	clr	r0	jsr	pc,allocate	mov	r1,divxyzloop:	tst	delflag	bne	in177	mov	sp,errstack	jsr	pc,readc	mov	$casetab,r11:	tst	(r1)+	beq	2f	cmp	r0,(r1)+	bne	1b	jmp	*-4(r1)2:	jmp	eh///	case for new line (which is special for apl box)/case012:	br	loop///	case q for quit/case161:	cmp	readptr,$readstack+2	blos	1f	mov	*readptr,r1	beq	2f	jsr	pc,release2:	sub	$2,readptr	mov	*readptr,r1	beq	2f	jsr	pc,release2:	sub	$2,readptr	jmp	loop1:	sys	exit///	case Q for controlled quit/case121:	jsr	pc,pop	jes	eh	jsr	pc,length	cmp	r0,$2	jhi	eh1	jsr	pc,rewind	jsr	pc,getchar	jmi	eh1	jsr	pc,release1:	cmp	readptr,$readstack	jlos	eh	mov	*readptr,r1	beq	2f	jsr	pc,release2:	sub	$2,readptr	sob	r0,1b	jbr	loop///	case of delete character/case177:	sys	signal; 2; case177	mov	$1,delflag	mov	r0,-(sp)	mov	2(sp),r0	cmp	-6(r0),$sys+read	bne	1f	sub	$6,2(sp)	clr	delflag1:	mov	(sp)+,r0	2			/rti/in177:	mov	$' ,ch	mov	$1,r0	sys	write; 1f; 1	clr delflag	jmp	eh/.bssdelflag: .=.+2.text1:	<\n>	.even///	case digit/case060:	movb	r0,savec	jsr	pc,readin	jsr	pc,push	br	loop///	case _ for negative numbers/case137:	jsr	pc,readin	jsr	pc,fsfile	jsr	pc,backspace	mov	r0,savk	dec	w(r1)	jsr	pc,chsign	mov	savk,r0	jsr	pc,putchar	jsr	pc,push	jbr	loop///	case screamer/case041:	jsr	pc,in041	jbr	loop/in041:	jsr	pc,readc	cmp	r0,$'<	jeq	in74a	cmp	r0,$'=	jeq	in75a	cmp	r0,$'>	jeq	in76a/	mov	$field,r1	movb	r0,(r1)+1:	jsr	pc,readc	movb	r0,(r1)+	cmpb	r0,$'\n	bne	1b	clrb	(r1)+/	sys	fork		br	9f	sys	wait	mov	$1,r0	sys	write; screamer; 2	rts	pc9:	sys	exec; 6f; 8f	sys	exit.data8:	6f; 7f; field; 06:	</bin/sh\0>7:	<-c\0>screamer: <!\n>	.even.bssfield:	.=.+70..text///	case d for duplicate/case144:	cmp	r5,$pdl	jeq	eh	clr	r0	jsr	pc,allocate	mov	-2(r5),r0	jsr	pc,move	jsr	pc,push	jmp	loop///	case z for stack size/case172:	clr	r0	jsr	pc,allocate	mov	r5,r3	sub	$pdl,r3	asr	r32:	beq	2f	clr	r2	dvd	$100.,r2	mov	r3,r0	jsr	pc,putchar	mov	r2,r3	br	2b2:	clr	r0	jsr	pc,putchar	jsr	pc,push	jmp	loop///	case c for flush/case143:2:	jsr	pc,pop	jes	loop	jsr	pc,release	br	2b//	case s for save/case163:	tst	sfree	bne	1f	jsr	pc,sinit1:	jsr	pc,readc	cmp	r5,$pdl	bne	2f	movb	$'s,ch	jmp	eh2:	clr	r2	cmpb	r0,$128.	/ check for array	blo	1f	inc	r21:	asl	r0	mov	stable(r0),r1	beq	2f	mov	r1,r0	mov	2(r0),r1	tst	r2	beq	4f	mov	r1,-(sp)	/ have array - release elements	jsr	pc,rewind1:	mov	(sp),r13:	jsr	pc,getword	bes	1f	tst	r0	beq	3b	mov	r0,r1	jsr	pc,release	br	1b1:	mov	(sp)+,r14:	jsr	pc,release	jsr	pc,pop	mov	r1,2(r0)	jbr	loop2:	mov	sfree,stable(r0)	mov	stable(r0),r0	mov	(r0),sfree	beq	symout	clr	(r0)	jsr	pc,pop	mov	r1,2(r0)	jmp	loop/symout:	mov	$1,r0	sys	write; 7f; 8f-7f	jmp	reset/7:	<Symbol table overflow.\n>8:	.even//sinit:	mov	$sfree+4,r01:	mov	r0,-4(r0)	clr	-2(r0)	add	$4,r0	cmp	r0,$sfend	blos	1b	clr	sfend-4	rts	pc//.bsssfree:	.=.+512.sfend:.text///	case S for save/case123:	tst	sfree	bne	1f	jsr	pc,sinit1:	jsr	pc,readc	cmp	r5,$pdl	bne	2f	movb	$'S,ch	jbr	eh2:	clr	r3	cmp	r0,$128.	/ check for array	blo	1f	inc	r31:	asl	r0	mov	stable(r0),r1	beq	2f	mov	sfree,r2	mov	(r2),sfree	beq	symout	mov	stable(r0),(r2)	mov	r2,stable(r0)	jsr	pc,pop	tst	r3	beq	1f	jsr	pc,length	/ to make auto arrays work	cmp	r0,$1	bhi	1f	jsr	pc,zero1:	mov	r1,2(r2)	jbr	loop2:	mov	sfree,stable(r0)	mov	stable(r0),r2	mov	(r2),sfree	beq	symout	clr	(r2)	jsr	pc,pop	tst	r3	beq	1f	jsr	pc,length	cmp	r0,$1	bhi	1f	jsr	pc,zero1:	mov	r1,2(r2)	jbr	loop///	case l for load/case154:	jsr	pc,in154	jmp	loop/in154:	jsr	pc,readc	clr	r2	cmp	r0,$128.	/ check for array	blo	1f	inc	r21:	asl	r0	mov	stable(r0),r1	beq	1f	mov	2(r1),r1	mov	r1,-(sp)	jsr	pc,length	jsr	pc,allocate	tst	r2	beq	2f	mov	r1,-(sp)	/ have array - copy elements	mov	2(sp),r1	jsr	pc,rewind3:	mov	2(sp),r1	jsr	pc,getword	bes	3f	tst	r0	beq	4f	mov	r0,-(sp)	mov	r0,r1	jsr	pc,length	jsr	pc,allocate	mov	(sp)+,r0	jsr	pc,move	mov	r1,r0	mov	(sp),r1	jsr	pc,putword	br	3b4:	clr	r0	mov	(sp),r1	jsr	pc,putword	br	3b3:	mov	(sp)+,r1	jsr	pc,push	tst	(sp)+	rts	pc2:	mov	(sp)+,r0	jsr	pc,move	jsr	pc,push	rts	pc1:	clr	r0	jsr	pc,allocate	jsr	pc,putword	jsr	pc,push	rts	pc//	case : for save array/case072:	tst	sfree	bne	1f	jsr	pc,sinit1:	jsr	pc,pop	jes	eh	jsr	pc,scalint	jsr	pc,fsfile	jsr	pc,backspace	tst	r0	jmi	eh1	/ neg. index	jsr	pc,length	cmp	r0,$2	jhi	eh1	/ index too high	jsr	pc,fsfile	clr	r3	cmp	r0,$1	blo	1f	beq	2f	jsr	pc,backspace	mov	r0,r3	mul	$100.,r32:	jsr	pc,backspace	add	r0,r3	cmp	r3,$2048.	jhis	eh1	/ index too high	asl	r31:	jsr	pc,release	jsr	pc,readc	cmp	r5,$pdl	bne	2f	movb	$':,ch	jmp	eh2:	asl	r0	mov	stable(r0),r1	beq	2f	mov	r1,-(sp)	mov	2(r1),r1	mov	l(r1),r0	sub	a(r1),r0	sub	$2,r0	cmp	r3,r0	blos	1f	mov	r1,-(sp)	/ need more space	mov	r3,r0	add	$2,r0	jsr	pc,allocate	jsr	pc,zero	mov	(sp)+,r0	jsr	pc,move	mov	r1,-(sp)	mov	r0,r1	jsr	pc,release	mov	(sp)+,r11:	mov	r1,-(sp)	mov	r3,r0	jsr	pc,seekchar	jsr	pc,getword	bes	1f	sub	$2,r(r1)	tst	r0	beq	1f	mov	r0,r1	jsr	pc,release1:	jsr	pc,pop	jes	eh	mov	r1,r0	mov	(sp)+,r1	jsr	pc,alterchar	swab	r0	jsr	pc,alterchar	mov	(sp)+,r0	mov	r1,2(r0)	jmp	loop2:	mov	sfree,stable(r0)	mov	stable(r0),r0	mov	(r0),sfree	jeq	symout	clr	(r0)	mov	r0,-(sp)	mov	r3,r0	add	$2,r0	jsr	pc,allocate	jsr	pc,zero	sub	$2,r0	jsr	pc,seekchar	mov	r1,-(sp)	br	1b//	case ; for load array/case073:	tst	sfree	bne	1f	jsr	pc,sinit1:	jsr	pc,pop	jes	eh	jsr	pc,scalint	jsr	pc,fsfile	jsr	pc,backspace	tst	r0	jmi	eh1	/ neg. index	jsr	pc,length	cmp	r0,$2	jhi	eh1	jsr	pc,fsfile	clr	r3	cmp	r0,$1	blo	1f	beq	2f	jsr	pc,backspace	mov	r0,r3	mul	$100.,r32:	jsr	pc,backspace	add	r0,r3	cmp	r3,$2048.	jhis	eh1	/ index too high	asl	r31:	jsr	pc,release	jsr	pc,readc	asl	r0	mov	stable(r0),r1	beq	1f	mov	2(r1),r1	jsr	pc,length	sub	$2,r0	cmp	r3,r0	bhi	1f	/ element not here	mov	r3,r0	jsr	pc,seekchar	jsr	pc,getword	tst	r0	beq	1f	mov	r0,r1	mov	r1,-(sp)	jsr	pc,length	jsr	pc,allocate	mov	(sp)+,r0	jsr	pc,move	jsr	pc,push	jmp	loop1:	clr	r0	jsr	pc,allocate	jsr	pc,putword	jsr	pc,push	jmp	loop///	case L for load/case114:	jsr	pc,readc	clr	r2	cmp	r0,$128.	/ check for array	blo	1f	inc	r21:	asl	r0	mov	stable(r0),r1	beq	4f	mov	(r1),stable(r0)	mov	sfree,(r1)	mov	r1,sfree	mov	2(r1),r1	tst	r2	beq	2f	mov	r1,-(sp)	/ have array - assume a throw away	jsr	pc,rewind1:	mov	(sp),r13:	jsr	pc,getword	bes	1f	tst	r0	beq	3b	mov	r0,r1	jsr	pc,release	br	1b1:	mov	(sp)+,r12:	jsr	pc,push	jbr	loop4:	movb	$'L,ch	jbr	eh///	case - for subtract/case055:	jsr	pc,in055	jmp	loop/in055:	jsr	pc,pop	jes	eh	jsr	pc,fsfile	jsr	pc,backspace	mov	r0,savk	dec	w(r1)	jsr	pc,chsign	mov	savk,r0	jsr	pc,putchar	jsr	pc,push	br	in053///	case + for add/case053:	jsr	pc,in053	jmp	loop/in053:	jsr	pc,eqk	mov	$add3,r0	jsr	pc,binop	jsr	pc,pop	mov	savk,r0	jsr	pc,putchar	jsr	pc,push	rts	pc///	case * for multiply/case052:	jsr	pc,pop	jes	eh	mov	r1,-(sp)	jsr	pc,pop	jec	1f	mov	(sp)+,r1	jsr	pc,push	jbr	eh1:	jsr	pc,fsfile	jsr	pc,backspace	mov	r0,savk2	dec	w(r1)	mov	r1,r2	mov	(sp)+,r1	jsr	pc,fsfile	jsr	pc,backspace	mov	r0,savk1	dec	w(r1)	mov	r1,r3	mov	$mul3,r0	jsr	pc,binop	jsr	pc,pop	cmp	savk1,savk2	blo	1f	mov	savk1,r2	br	2f1:	mov	savk2,r22:	cmp	r2,k	bhis	1f	mov	k,r21:	add	savk2,savk1	cmp	r2,savk1	bhis	1f	mov	r2,-(sp)	neg	r2	add	savk1,r2	jsr	pc,removc	mov	(sp)+,r02:	jsr	pc,putchar	jsr	pc,push	jmp	loop1:	mov	savk1,r0	br	2b//	r1 = string/	r2 = count/	result returned in r1 (old r1 released)/removc:	mov	r1,-(sp)	jsr	pc,rewind1:	cmp	r2,$1	blos	1f	jsr	pc,getchar	sub	$2,r2	br	1b1:	mov	$2,r0	jsr	pc,allocate	mov	r1,-(sp)1:	mov	2(sp),r1	jsr	pc,getchar	bes	1f	mov	(sp),r1	jsr	pc,putchar	mov	r1,(sp)	br	1b1:	cmp	r2,$1	bne	1f	mov	(sp),r3	mov	tenptr,r2	jsr	pc,div3	mov	r1,(sp)	mov	r3,r1	jsr	pc,release	mov	r4,r1	jsr	pc,release1:	mov	2(sp),r1	jsr	pc,release	mov	(sp)+,r1	tst	(sp)+	rts	pc//	case / for divide/case057:	jsr	pc,dscale	mov	$div3,r0	jsr	pc,binop	mov	r4,r1	jsr	pc,release	jsr	pc,pop	mov	savk,r0	jsr	pc,putchar	jsr	pc,push	jmp	loop//dscale:	jsr	pc,pop	jes	eh	mov	r1,-(sp)	jsr	pc,pop	bec	1f	mov	(sp)+,r1	jsr	pc,push	jmp	eh1:	mov	r1,-(sp)	jsr	pc,fsfile	jsr	pc,backspace	mov	r0,savk1	dec	w(r1)	jsr	pc,rewind	mov	2(sp),r1	jsr	pc,fsfile	jsr	pc,backspace	mov	r0,savk2	dec	w(r1)	mov	k,r2	sub	savk1,r2	add	savk2,r2	mov	k,savk	mov	(sp)+,r1	tst	r2	bmi	1f	jsr	pc,add0	br	2f1:	neg	r2	jsr	pc,removc2:	mov	r1,r3	mov	(sp)+,r2	rts	pc///	case % for remaindering/case045:	jsr	pc,dscale	mov	$div3,r0	jsr	pc,binop	jsr	pc,pop	jsr	pc,release	mov	r4,r1	mov	savk1,r0	add	k,r0	jsr	pc,putchar	jsr	pc,push	jmp	loop//binop:	jsr	pc,(r0)	jsr	pc,push	mov	r2,r1	jsr	pc,release	mov	r3,r1	jsr	pc,release	rts	pc/eqk:	jsr	pc,pop	jes	eh	mov	r1,-(sp)	jsr	pc,pop	bec	1f	mov	(sp)+,r1	jsr	pc,push	jbr	eh1:	mov	r1,-(sp)	mov	2(sp),r1	jsr	pc,fsfile	jsr	pc,backspace	mov	r0,savk1	dec	w(r1)	mov	(sp),r1	jsr	pc,fsfile	jsr	pc,backspace	mov	r0,savk2	dec	w(r1)	cmp	r0,savk1	beq	1f	blo	2f	mov	savk2,savk	mov	r0,r2	sub	savk1,r2	mov	2(sp),r1	jsr	pc,add0	mov	r1,2(sp)	br	4f2:	mov	savk1,r2	sub	savk2,r2	mov	(sp),r1	jsr	pc,add0	mov	r1,(sp)1:	mov	savk1,savk4:	mov	2(sp),r3	mov	(sp)+,r2	tst	(sp)+	rts	pc.bsssavk1:	.=.+2savk2:	.=.+2savk:	.=.+2.text///	r2 = count/	r1 = ptr/	returns ptr in r1add0:	mov	r1,-(sp)	jsr	pc,length	jsr	pc,allocate	clr	r01:	cmp	r2,$1	blos	1f	jsr	pc,putchar	sub	$2,r2	br	1b1:	mov	r1,-(sp)	mov	2(sp),r1	jsr	pc,rewind1:	jsr	pc,getchar	bes	1f	mov	(sp),r1	jsr	pc,putchar	mov	r1,(sp)	mov	2(sp),r1	br	1b1:	cmp	r2,$1	bne	1f	mov	(sp),r3	mov	tenptr,r2	jsr	pc,mul3	mov	r1,(sp)	mov	r3,r1	jsr	pc,release1:	mov	2(sp),r1	jsr	pc,release	mov	(sp)+,r1	tst	(sp)+	rts	pc/	case i for input base/case151:	jsr	pc,in151	jmp	loop/in151:	jsr	pc,pop	jes	eh	jsr	pc,scalint	mov	r1,-(sp)	mov	inbas,r1	mov	(sp)+,inbas	jsr	pc,release	rts	pccase111:	mov	inbas,r1	jsr	pc,length	inc	r0	jsr	pc,allocate	mov	inbas,r0	jsr	pc,move	clr	r0	jsr	pc,putchar	/scale	jsr	pc,push	jmp	loop/.bssinbas:	.=.+2.data///	case o for output base/case157:	jsr	pc,in157	jmp	loop/in157:	jsr	pc,pop	jes	eh	jsr	pc,scalint	mov	r1,-(sp)	jsr	pc,length	jsr	pc,allocate	mov	(sp),r0	jsr	pc,move	jsr	pc,fsfile	jsr	pc,length1:	cmp	r0,$1	beq	1f	jsr	pc,backspace	bpl	2f	jsr	pc,chsign	jsr	pc,length	br	1b2:	clr	sav	mov	r0,-(sp)2:	jsr	pc,backspace	bes	2f	mov	(sp),r2	clr	r3	mul	$100.,r2	add	r0,r3	mov	r3,(sp)	tst	sav	beq	3f	mov	r2,r0	clr	r3	mov	sav,r2	mul	$100.,r2	mov	r3,sav	add	r0,sav	br	2b3:	mov	r2,sav	br	2b2:	mov	(sp)+,r0	tst	sav	beq	2f	mov	sav,r0	jsr	pc,log2	add	$16.,r0	mov	r0,logo	br	3f1:	jsr	pc,backspace2:	tst	r0	bpl	1f	mov	$15.,logo	br	3f1:	jsr	pc,log2	mov	r0,logo3:	jsr	pc,release	mov	basptr,r1	jsr	pc,release	mov	(sp),basptr//	set field widths for output/	and set output digit handling routines/	mov	(sp),r1	mov	$bigout,outdit	jsr	pc,length	cmp	r0,$1.	bne	2f	jsr	pc,fsfile	jsr	pc,backspace	cmp	r0,$16.	bhi	2f	mov	$hexout,outdit2:	jsr	pc,length	jsr	pc,allocate	mov	(sp),r0	jsr	pc,move	clr	(sp)	jsr	pc,fsfile	jsr	pc,backspace	bpl	2f	add	$1.,(sp)	jsr	pc,chsign2:	mov	r1,r2	mov	$1,r0	jsr	pc,allocate	mov	$-1,r0	jsr	pc,putchar	mov	r1,r3	jsr	pc,add3	jsr	pc,length	asl	r0	add	r0,(sp)	jsr	pc,fsfile	jsr	pc,backspace	cmp	r0,$9.	blos	2f	add	$1,(sp)2:	jsr	pc,release	mov	r2,r1	jsr	pc,release	mov	r3,r1	jsr	pc,release	mov	(sp)+,fw	mov	fw,fw1	dec	fw1	cmp	outdit,$hexout	bne	2f	mov	$1,fw	clr	fw12:	mov	$70.,ll	cmp	fw,$70.	blo 9f; rts pc; 9:	mov	$70.,r1	clr	r0	dvd	fw,r0	mov	r0,r1	mpy	fw,r1	mov	r1,ll	rts	pccase117:	mov	basptr,r1	jsr	pc,length	inc	r0	jsr	pc,allocate	mov	basptr,r0	jsr	pc,move	clr	r0	jsr	pc,putchar	/scale	jsr	pc,push	jmp	loop/.datafw:	1			/field width for digitsfw1:	0ll:	70.			/line length.text///	case k for skale factor/case153:	jsr	pc,pop	jes	eh	jsr	pc,scalint	mov	w(r1),r0	sub	a(r1),r0	cmp	r0,$1	jhi	eh1	jsr	pc,rewind	jsr	pc,getchar	jmi	eh1	mov	r0,k	mov	r1,-(sp)	mov	scalptr,r1	jsr	pc,release	mov	(sp)+,scalptr	jmp	loop/case113:	mov	scalptr,r1	jsr	pc,length	inc	r0	jsr	pc,allocate	mov	scalptr,r0	jsr	pc,move	clr	r0	jsr	pc,putchar	jsr	pc,push	jmp	loopscalint:	jsr	pc,fsfile	jsr	pc,backspace	dec	w(r1)	mov	r0,r2	jsr	pc,removc	rts	pc//	case ^ for exponentiation/case136:	jsr	pc,pop	jes	eh	jsr	pc,scalint	jsr	pc,fsfile	jsr	pc,backspace	tst	r0	bge	1f	inc	negexp	jsr	pc,chsign1:	jsr	pc,length	cmp	r0,$3	jhis	eh1	mov	r1,r3	jsr	pc,pop	jes	eh	jsr	pc,fsfile	jsr	pc,backspace	mov	r0,savk	dec	w(r1)	mov	r1,r2	jsr	pc,exp3	mov	r1,-(sp)	mov	r2,r1	jsr	pc,release	mov	r3,r1	jsr	pc,rewind	jsr	pc,getchar	mov	r0,-(sp)	jsr	pc,getchar	bes	2f	mov	r0,r1	mul	$100.,r1	add	(sp)+,r1	br	3f2:	mov	(sp)+,r13:	mul	savk,r1	mov	r1,r2	mov	r3,r1	jsr	pc,release	tst	negexp	bne	4f	cmp	k,savk	blo	1f	mov	k,r3	br	2f1:

⌨️ 快捷键说明

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