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

📄 dc1.s

📁 Version 6 Unix 核心源代码 Version 6 Unix 核心源代码
💻 S
📖 第 1 页 / 共 2 页
字号:
	mov	savk,r32:	cmp	r3,r2	bhis	4f	sub	r3,r2	mov	(sp)+,r1	mov	r3,-(sp)	jsr	pc,removc	mov	(sp)+,r0	jsr	pc,putchar	jsr	pc,push	br	3f4:	mov	(sp)+,r1	mov	r2,r0	jsr	pc,putchar	jsr	pc,push3:	tst	negexp	jeq	loop	clr	negexp	jsr	pc,pop	mov	r1,-(sp)	mov	$2,r0	jsr	pc,allocate	mov	$1,r0	jsr	pc,putchar	clr	r0	jsr	pc,putchar	jsr	pc,push	mov	(sp)+,r1	jsr	pc,push	jmp	case057/.bsssav:	.=.+2negexp:	.=.+2.text//	case v for square root/case166:	jsr	pc,pop	jes	eh/	jsr	pc,fsfile	jsr	pc,backspace	mov	r0,savk	dec	w(r1)	mov	w(r1),r2	sub	a(r1),r2	tst	r2	beq	sqz	jsr	pc,backspace	tst	r0	jmi	eh1	mov	k,r2	asl	r2	sub	savk,r2	beq	1f	blo	2f	jsr	pc,add0	br	1f2:	neg	r2	jsr	pc,removc1:	jsr	pc,sqrt	mov	k,r0	jsr	pc,putchar	jsr	pc,push	jmp	loop//sqz:	mov	savk,r0	jsr	pc,putchar	jsr	pc,push	jmp	loop.bsssqtemp:	.=.+2.text///	case [ for subroutine definition/case133:	clr	-(sp)	clr	r0	jsr	pc,allocate	jsr	pc,push1:	jsr	pc,readc	cmp	r0,$']	bne	3f	tst	(sp)	beq	1f	dec	(sp)	br	2f3:	cmp	r0,$'[	bne	2f	inc	(sp)2:	jsr	pc,putchar	br	1b/1:	tst	(sp)+	jmp	loop///	case x for execute top of stack/case170:	jsr	pc,in170	jmp	loop/in170:	jsr	pc,pop	jes	eh	mov	r1,-(sp)	tst	*readptr	beq	1f	mov	*readptr,r1	cmp	r(r1),w(r1)	bne	1f	jsr	pc,release	br	2f1:	add	$2,readptr	cmp	readptr,$readtop	bhis	1f2:	mov	(sp)+,r1	mov	r1,*readptr	beq	2f	jsr	pc,rewind	rts	pc2:	jsr	pc,readc	cmp	r0,$'\n	beq	3f	mov	r0,savec3:	rts	pc1:nderr:	mov	$1,r0	sys	write; 1f; 2f-1f	jmp	reset1:	<Nesting depth.\n>2:	.even/.datareadptr: readstack.bssreadstack: .=.+100.readtop:.text//	case ? for apl box function/case077:	add	$2,readptr	cmp	readptr,$readtop	bhis	nderr	clr	*readptrin077:	mov	source,-(sp)	clr	source	jsr	pc,readc	cmp	r0,$'!	bne	1f	jsr	pc,in041	mov	(sp)+,source	br	in0771:	mov	r0,savec	clr	r0	jsr	pc,allocate2:	jsr	pc,readc	jsr	pc,putchar1:	jsr	pc,readc	jsr	pc,putchar	cmp	r0,$'\\	beq	2b	cmp	r0,$'\n	bne	1b	mov	(sp)+,source	mov	r1,*readptr	jmp	loop///	case < for conditional execution/case074:	jsr	pc,in074	ble	neg074	jmp	aff074///	case !< for conditional execution/in74a:	jsr	pc,in074	bgt	inneg	jmp	inaff/in074:	jsr	pc,in055	/go subtract	jsr	pc,pop	jsr	pc,length	tst	r0	beq	1f	jsr	pc,fsfile	jsr	pc,backspace	jsr	pc,backspace	tst	r01:	rts	pc/aff074:	jsr	pc,release	jsr	pc,in154	/load from register	jmp	case170/neg074:	jsr	pc,release	jsr	pc,readc	jmp	loop///	case = for conditional execution/case075:	jsr	pc,in074	beq	aff074	jmp	neg074///	case != for conditional execution/in75a:	jsr	pc,in074	bne	inaff	jmp	inneg///	case > for conditional execution/case076:	jsr	pc,in074	bge	neg074	jmp	aff074///	case !> for conditional execution/in76a:	jsr	pc,in074	blt	inneg	jmp	inaff/inaff:	jsr	pc,release	jsr	pc,in154	jsr	pc,in170	rts	pc/inneg:	jsr	pc,release	jsr	pc,readc	rts	pc/err:	mov	$1,r0	sys	write; 1f; 2f-1f	jmp	reset1:	<Fatal error\n>; 2: .even/eh1:	jsr	pc,releaseeh:	movb	ch,1f+2	mov	$1,r0	sys	write; 1f; 2f-1f	mov	$readstack,readptr	mov	errstack,sp	jmp	loop.data1:	<(  ) ?\n>2:	.even.text///	routine to read and convert a number from the/	input stream.  Numbers beginnig with 0 are/	converted as octal.  Routine converts/	up to next nonnumeric.//readin:	clr	dp	clr	dpt	clr	r0	jsr	pc,allocate	mov	r1,-(sp)	mov	strptr,r1	jsr	pc,create	jsr	pc,readc1:	cmpb	ch,$'0	blt	3f	cmpb	ch,$'9	bgt	3f	mov	ch,r0	sub	$'0,r04:	tst	dp	beq	8f	cmp	dpt,$99.	beq	5f	inc	dpt8:	mov	chptr,r1	jsr	pc,create	tst	r0	beq	2f	jsr	pc,putchar2:	mov	r1,chptr	mov	(sp),r3	mov	inbas,r2	jsr	pc,mul3	mov	r1,(sp)	mov	r3,r1	jsr	pc,release	mov	(sp),r3	mov	chptr,r2	jsr	pc,add3	mov	r1,(sp)	mov	r3,r1	jsr	pc,release5:	jsr	pc,readc	mov	r0,ch	br	1b3:	cmpb	ch,$'A	blt	1f	cmpb	ch,$'F	bgt	1f	mov	ch,r0	sub	$67,r0	br	4b1:	cmpb	ch,$134		/backslash	bne	1f	jsr	pc,readc	br	5b1:	cmpb	ch,$'.	bne	1f	tst	dp	bne	1f	inc	dp	clr	dpt	br	5b1:	mov	r0,savec//	scale up or down2:	tst	dp	bne	1f	mov	(sp)+,r1	clr	r0	jsr	pc,putchar	rts	pc1:	mov	(sp),r1	jsr	pc,scale	mov	dpt,r0	jsr	pc,putchar	tst	(sp)+	rts	pc/.bssdp:	.=.+2dpt:	.=.+2.text/scale:	mov	dpt,r2	jsr	pc,add0	mov	r1,-(sp)	mov	$1,r0	jsr	pc,allocate	mov	dpt,r0	jsr	pc,putchar	mov	r1,r3	mov	inbas,r2	jsr	pc,exp3	mov	r1,-(sp)	mov	r3,r1	jsr	pc,release	mov	(sp)+,r2	mov	(sp)+,r3	jsr	pc,div3	mov	r1,-(sp)	mov	r2,r1	jsr	pc,release	mov	r3,r1	jsr	pc,release	mov	r4,r1	jsr	pc,release	mov	(sp)+,r1	rts	pc//	routine to read another character from the input/	stream.  If the caller does not want the character,/	it is to be placed in the cell savec./	The routine exits to the system on end of file./	Character is returned in r0.//	jsr	pc,readc/	movb	r0,...//readc:	tst	savec	beq	1f	movb	savec,r0	bic	$177400,r0	clr	savec	rts	pc1:	tst	*readptr	bne	1f2:	mov	source,r0	sys	read; ch; 1	bes	eof	tst	r0	beq	eof	movb	ch,r0	bic	$177400,r0	rts	pc1:	mov	r1,-(sp)	mov	*readptr,r1	jsr	pc,getchar	bes	eof1	bic	$177400,r0	mov	r0,ch	mov	(sp)+,r1	rts	pc/eof:	tst	source	beq	1f	clr	source	br	2b1:	sys	exit/eof1:	mov	*readptr,r1	beq	2f	jsr	pc,release2:	sub	$2,readptr	mov	(sp)+,r1	jmp	readc///	case p for print/case160:	cmp	r5,$pdl	jeq	eh	jsr	pc,in160	jmp	loop//in160:/	mov	$1,r0/	sys	write; sphdr; 4	br	1f/sphdr:	<    >	.even/1:	cmp	r5,$pdl	bne	1f	mov	$1,r0	sys	write; qm; 1	mov	$1,r0	sys	write; nl; 1	rts	pc//	do the conversion/1:	mov	-2(r5),r1	jsr	pc,printf	rts	pc///	case f for print the stack/case146:	mov	r5,-(sp)1:	cmp	r5,$pdl	beq	2f1:	jsr	pc,in160	jsr	pc,pop	cmp	r5,$pdl	bne	1b2:	mov	$stable-2,r21:	tst	(r2)+	cmp	r2,$stable+254.	bhi	1f/	mov	(r2),r3	beq	1b	movb	$'0,7f+3	mov	r2,r0	sub	$stable,r0	asr	r0	movb	r0,7f+13:	mov	$1,r0	sys	write; 7f; 8f-7f.data7:	<" (0)">8:	.even.text	mov	2(r3),r1	jsr	pc,printf	tst	(r3)	beq	1b	incb	7b+3	mov	(r3),r3	br	3b1:	mov	(sp)+,r5	jbr	loop///	routine to convert to decimal and print the/	top element of the stack.//	jsr	pc,printf//printf:	mov	r4,-(sp)	mov	r3,-(sp)	mov	r2,-(sp)	mov	r1,-(sp)	mov	r0,-(sp)	clr	-(sp)	jsr	pc,rewind2:	jsr	pc,getchar	bes	2f	cmp	r0,$143	blos	2b	cmp	r0,$-1	beq	2b	bis	$1,(sp)	br	2b2:	tst	(sp)+	beq	2f	jsr	pc,length	mov	r0,0f	mov	a(r1),3f	mov	$1,r0	sys	0; 9f.data9:	sys	write; 3:.=.+2; 0:.=.+2.text	jbr	prout2:	jsr	pc,fsfile	jsr	pc,backspace	bec	1f	mov	$1,r0	sys	write; asczero; 1	jbr	prout1:	jsr	pc,length	mov	r1,-(sp)	jsr	pc,allocate	mov	(sp),r0	mov	r1,(sp)	jsr	pc,move	mov	ll,count/	inc	count	jsr	pc,fsfile	jsr	pc,backspace	mov	r0,savk	dec	w(r1)	jsr	pc,backspace	cmpb	r0,$-1	bne	2f	mov	basptr,r1	jsr	pc,fsfile	jsr	pc,backspace	cmp	r0,$-1	beq	2f	mov	(sp),r1	jsr	pc,chsign	mov	$'-,ch	jsr	pc,wrchar	br	1f2:/	mov	$' ,ch/	jsr	pc,wrchar1:	mov	strptr,r1	jsr	pc,create	mov	basptr,r1	jsr	pc,length	cmp	r0,$1	jlo	dingout	bne	1f	jsr	pc,rewind	jsr	pc,getchar	cmp	r0,$1.	jeq	unout	cmp	r0,$-1	jeq	dingout	cmp	r0,$10.	jeq	tenout1:	mov	log10,r1	mul	savk,r1	clr	r0	div	logo,r0	mov	r0,dout	clr	ct1:	mov	(sp),r3	mov	savk,r2	jsr	pc,getdec	mov	r1,decimal	clr	dflg	mov	(sp),r1	mov	savk,r2	jsr	pc,removc	mov	r1,(sp)1:	mov	(sp),r3	mov	basptr,r2	jsr	pc,div3	mov	r1,r2	mov	(sp),r1	jsr	pc,release	mov	r2,(sp)	mov	r4,r1	jsr	pc,*outdit	mov	(sp),r1	jsr	pc,length	bne	1b/	mov	strptr,r1	jsr	pc,fsfile1:	jsr	pc,backspace	bes	1f	mov	r0,ch	jsr	pc,wrchar	br	1b1:	mov	(sp)+,r1	jsr	pc,release	tst	savk	bne	1f	mov	decimal,r1	jsr	pc,release	br	prout1:	mov	dot,ch	jsr	pc,wrchar	mov	strptr,r1	jsr	pc,create	mov	decimal,-(sp)	inc	dflg1:	mov	(sp),r3	mov	basptr,r2	jsr	pc,mul3	mov	r1,(sp)	mov	r3,r1	jsr	pc,release	mov	(sp),r3	mov	savk,r2	jsr	pc,getdec	mov	r1,(sp)	mov	r3,r1	mov	savk,r2	jsr	pc,removc	jsr	pc,*outdit	mov	strptr,r1	inc	ct	cmp	ct,dout	blo	1b	mov	(sp)+,r1	jsr	pc,release	mov	strptr,r1	jsr	pc,rewind1:	jsr	pc,getchar	bes	1f	mov	r0,ch	jsr	pc,wrchar	br	1b1://	cleanup, print new line and return/prout:	mov	$1,r0	sys	write; nl; 1	mov	(sp)+,r0	mov	(sp)+,r1	mov	(sp)+,r2	mov	(sp)+,r3	mov	(sp)+,r4	rts	pc////	r2 = count/	r3 = pointer (not released)/.bssdflg:	.=.+2dout:	.=.+2logo:	.=.+2log10:	.=.+2decimal:	.=.+2.textgetdec:	mov	r3,-(sp)	mov	r3,r1	jsr	pc,rewind	jsr	pc,length	jsr	pc,allocate	mov	r1,-(sp)1:	cmp	r2,$1	blt	1f	mov	2(sp),r1	jsr	pc,getchar	mov	(sp),r1	jsr	pc,putchar	mov	r1,(sp)	sub	$2,r2	br	1b1:	tst	r2	beq	1f	mov	tenptr,r2	mov	(sp),r3	jsr	pc,mul3	mov	r1,(sp)	mov	r3,r1	jsr	pc,length	jsr	pc,release	mov	r0,r3	jsr	pc,allocate	mov	r1,-(sp)	mov	2(sp),r1	jsr	pc,rewind2:	tst	r3	beq	2f	jsr	pc,getchar	mov	(sp),r1	jsr	pc,putchar	mov	r1,(sp)	dec	r3	mov	2(sp),r1	br	2b2:	clr	r0	mov	(sp),r1	jsr	pc,putchar	mov	2(sp),r1	jsr	pc,release	mov	(sp),r3	mov	tenptr,r2	jsr	pc,div3	mov	r1,(sp)	mov	r3,r1	jsr	pc,release	mov	r4,r1	jsr	pc,release	mov	(sp)+,r1	tst	(sp)+	mov	(sp)+,r3	rts	pc1:	mov	(sp)+,r1	mov	(sp)+,r3	rts	pctenout:	mov	savk,ct	mov	$2,r0	jsr	pc,allocate	mov	r1,-(sp)	mov	2(sp),r1	jsr	pc,fsfile	jsr	pc,backspace	mov	r0,r3	clr	r2	dvd	$10.,r2	beq	1f3:	add	$60,r2	mov	r2,r0	mov	(sp),r1	jsr	pc,putchar	mov	r1,(sp)1:	mov	(sp),r1	add	$60,r3	mov	r3,r0	jsr	pc,putchar	mov	2(sp),r11:	jsr	pc,backspace	bec	2f	mov	(sp),r1	jsr	pc,length	cmp	r0,ct	beq	4f	blo	5f	sub	ct,r0	mov	r0,ct1:	jsr	pc,getchar	mov	r0,ch	jsr	pc,wrchar	dec	ct	bne	1b	jsr	pc,getchar	bes	6f	jsr	pc,backspace4:	movb	dot,ch	jsr	pc,wrchar1:	jsr	pc,getchar	bes	1f	mov	r0,ch	jsr	pc,wrchar	br	1b5:	sub	r0,ct	movb	dot,ch	jsr	pc,wrchar	mov	$60,ch5:	jsr	pc,wrchar	dec	ct	bne	5b	br	1b1:6:	mov	(sp)+,r1	jsr	pc,release	mov	(sp)+,r1	jsr	pc,release	jbr	prout2:	mov	r0,r3	clr	r2	dvd	$10.,r2	br	3bdot:	<.>	.evenct:	.=.+2//dingout:	clr	-(sp)	br	1funout:	mov	$1,-(sp)1:	mov	2(sp),r1	mov	savk,r2	jsr	pc,removc	mov	r1,2(sp)	mov	strptr,r1	jsr	pc,create	mov	$-1,r0	jsr	pc,putchar	mov	r1,r31:	mov	2(sp),r1	jsr	pc,length	beq	1f	mov	r1,r2	jsr	pc,add3	mov	r1,2(sp)	mov	r2,r1	jsr	pc,release	mov	$1,r0	tst	(sp)	beq	2f	mov	$'1,ch	jsr	pc,wrchar	br	1b2:	tst	delflag	jne	in177	sys	write; ding; 3	br	1b1:	tst	(sp)+	mov	(sp)+,r1	jsr	pc,release	jmp	prout/ding:	<>			/<bell prefix form feed>sp5:	<\\\n     >minus:	<->one:	<1>	.even.bsscount:	.=.+2.text/bigout:	mov	r1,-(sp)	/big digit	tst	dflg	beq	1f	clr	r0	jsr	pc,allocate	mov	r1,tptr1:	mov	strptr,r1	jsr	pc,length	add	fw,r0	dec	r0	mov	r0,-(sp)	/end of field	clr	-(sp)		/negative	mov	4(sp),r1	jsr	pc,length	bne	2f	mov	$'0,r0	tst	dflg	beq	3f	mov	tptr,r1	jsr	pc,putchar	mov	r1,tptr	br	1f3:	mov	strptr,r1	jsr	pc,putchar	br	1f2:	mov	4(sp),r1	/digit	jsr	pc,fsfile	jsr	pc,backspace	bpl	2f	mov	$1,(sp)		/negative	jsr	pc,chsign2:	mov	4(sp),r3	/digit	mov	r3,r1	jsr	pc,length	beq	1f	mov	tenptr,r2	jsr	pc,div3	mov	r1,4(sp)	/digit	mov	r3,r1	jsr	pc,release	mov	r4,r1	jsr	pc,rewind	jsr	pc,getchar	jsr	pc,release	add	$'0,r0	tst	dflg	beq	3f	mov	tptr,r1	jsr	pc,putchar	mov	r1,tptr	br	2b3:	mov	strptr,r1	jsr	pc,putchar	br	2b1:	tst	dflg	beq	4f	mov	tptr,r1	jsr	pc,length	cmp	r0,fw1	bhis	2f	mov	fw1,r1	sub	r0,r1	mov	r1,-(sp)	mov	strptr,r13:	mov	$'0,r0	jsr	pc,putchar	dec	(sp)	bne	3b	tst	(sp)+2:	mov	tptr,r1	jsr	pc,fsfile2:	mov	tptr,r1	jsr	pc,backspace	bes	2f	mov	strptr,r1	jsr	pc,putchar	br	2b2:	mov	tptr,r1	jsr	pc,release	br	1f4:	mov	strptr,r1	jsr	pc,length	cmp	r0,2(sp)	/end of field	bhis	1f	mov	$'0,r0	jsr	pc,putchar	br	1b1:	tst	(sp)		/negative	beq	1f	mov	$'-,r0	mov	strptr,r1	dec	w(r1)	jsr	pc,putchar1:	mov	strptr,r1	mov	$' ,r0	jsr	pc,putchar	tst	(sp)+	tst	(sp)+	mov	(sp)+,r1	jsr	pc,release	rts	pc/.bsstptr:	.=.+2tenptr:	.=.+2.text///hexout:	mov	r1,-(sp)	jsr	pc,rewind	jsr	pc,getchar	cmp	r0,$16.	blo	1f	jmp	err1:	add	$60,r0	cmp	r0,$'9	blos	2f	add	$'A-'9-1,r02:	mov	strptr,r1	jsr	pc,putchar	mov	(sp)+,r1	jsr	pc,release	rts	pc//wrchar:	tst	delflag	jne	in177	mov	$1,r0	tst	count	bne	7f	sys	write; sp5; 2	mov	ll,count	mov	$1,r07:	dec	count	sys	write; ch; 1	rts	pc///	case P for print an ascii string//case120:	jsr	pc,pop	jes	eh	jsr	pc,length	mov	r0,0f	mov	a(r1),3f	mov	$1,r0	sys	0; 9f	jsr	pc,release	jmp	loop.data9:	sys	write; 3:.=.+2; 0:.=.+2.text///	here for unimplemented stuff/junk:	movb	r0,1f	mov	$1,r0	sys	write; 1f; 2f-1f	jmp	loop.data1:	<0 not in switch.\n>2:	.even.text////	routine to place one word onto the pushdown list/	Error exit to system on overflow.//push:	mov	r1,(r5)+	cmp	r5,$pdltop	bhis	pdlout	rts	pc/pdlout:	mov	$1,r0	sys	write; 1f; 2f-1f	jmp	reset1:	<Out of pushdown.\n>2:	.even///	routine to remove one word from the pushdown list/	carry bit set on empty stack///	jsr	pc,pop/pop:	cmp	r5,$pdl	bhi	1f	clr	r1	sec	rts	pc1:	mov	-(r5),r1	clc	rts	pc////.dataoutdit:	hexout.bsssource: .=.+2savec:	.=.+2ch:	.=.+2.textnl:	<\n>asczero:	<0>qm:	<?\n>	.even/.bsschptr:	.=.+2strptr:	.=.+2basptr:	.=.+2scalptr:	.=.+2errstack:.=.+2/stable:	.=.+512..textcasetab:	case012; 012	/nl	loop;    040	/sp	case041; 041	/!	case045; 045	/%	case052; 052	/*	case053; 053	/+	case055; 055	/-	case060; 056	/.	case057; 057	//	case060; 060	/0	case060; 061	/1	case060; 062	/2	case060; 063	/3	case060; 064	/4	case060; 065	/5	case060; 066	/6	case060; 067	/7	case060; 070	/8	case060; 071	/9	case072; 072	/:	case073; 073	/;	case074; 074	/<	case075; 075	/=	case076; 076	/>	case077; 077	/?	case060; 101	/A	case060; 102	/B	case060; 103	/C	case060; 104	/D	case060; 105	/E	case060; 106	/F	case111; 111	/I	case113; 113	/K	case114; 114	/L	case117; 117	/O	case120; 120	/P	case121; 121	/Q	case123; 123	/S	case166;  126	/V	case170; 130	/X	case172; 132	/Z	case133; 133	/[	case136; 136	/^	case137; 137	/_	case143; 143	/c	case144; 144	/d	case146; 146	/f	case151; 151	/i	case153; 153	/k	case154; 154	/l	case157; 157	/o	case160; 160	/p	case161; 161	/q	case163; 163	/s	case166; 166	/v	case170; 170	/x	case172; 172	/z	0;0/.bsspdl:	.=.+100.pdltop:.textreset:	clr	r0	sys	seek; 0; 21:	clr	r0	sys	read; rathole; 1	bes	1f	tst	r0	beq	1f	cmpb	rathole,$'q	bne	1b1:	sys	exit.bssrathole:	.=.+2.text

⌨️ 快捷键说明

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