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

📄 form5.s

📁 Version 6 Unix 核心源代码 Version 6 Unix 核心源代码
💻 S
字号:
.globl b1.globl hblk.globl headers.globl	initl.globl asmem.globl b1s.globl b1e.globl w1.globl stats.globl	lookchar.globl	flush.globl	fsfile.globl	seekchar.globl	backspace.globl	alterchar.globl	zero.globl	getchar.globl	putchar.globl	copy.globl	rewind.globl	create.globl	allocate.globl	release.globl	collect.globl	w,r,a,l.globl	getword.globl	putword.globl	backword.globl	alterword///	routine to read next character from string/	pointer to by r1; character returned in r0/	c-bit set if character not availiable (eof)//	mov	...,r1/	jsr	pc,getchar/	movb	r0,.../getchar:	jsr	pc,lookchar	bes	1f	inc	r(r1)	tst	r0		/clears c-bit1:	rts	pc///	routine to read a string backwards/	the read pointer is decremented before reading//	mov	...,r1/	jsr	pc,backspace/	mov	r0,.../backspace:	cmp	a(r1),r(r1)	bhis	nochc	dec	r(r1)	jsr	pc,lookchar	rts	pcnochc:	clr	r0	sec	rts	pc///	routine to put a word onto the string//	mov	...,r1/	mov	...,r0/	jsr	pc,putword/putword:	mov	r0,-(sp)	sub	$hblk,r0	jsr	pc,putchar	swab	r0	jsr	pc,putchar	mov	(sp)+,r0	rts	pc///	routine to get a word from the string//	mov	...,r1/	jsr	pc,getword/	mov	r0,.../getword:	jsr	pc,lookchar	bes	1f	movb	r0,nchar	inc	r(r1)	jsr	pc,lookchar	bes	1f	movb	r0,nchar+1	inc	r(r1)	mov	nchar,r0	add	$hblk,r01:	rts	pc///	routine to alter the word pointed to by r(r1)/	by replacing the word there with r0//	mov	wd,r0/	mov	...,r1/	jsr	pc,alterword/alterword:	mov	r0,-(sp)	sub	$hblk,r0	jsr	pc,alterchar	swab	r0	jsr	pc,alterchar	mov	(sp)+,r0	rts	pc///	routine to get words backwards from string//	mov	...,r1/	jsr	pc,backword/	mov	r0,.../backword:	cmp	a(r1),r(r1)	bhis	nochw	dec	r(r1)	jsr	pc,lookchar	movb	r0,nchar+1	cmp	a(r1),r(r1)	bhis	nochw	dec	r(r1)	jsr	pc,lookchar	movb	r0,nchar	mov	nchar,r0	add	$hblk,r0	rts	pc/nochw:	clr	r0	sec	rts	pc///	routine to copy the contents of one string/	to another.//	mov	source,r0/	mov	dest,r1/	jsr	pc,copy/	mov	r1,...//	on return, r1 points to the new string and should/	be saved.  r0 is preserved./copy:	inc	stats+12.	mov	r0,-(sp)	mov	r1,-(sp)	mov	r2,-(sp)	mov	r3,-(sp)	mov	w(r0),r2	sub	a(r0),r2	/W-A (old)	mov	l(r1),r3	sub	a(r1),r3	/L-A (new)	cmp	r2,r3	blos	1f	mov	r2,r0	jsr	pc,allocate	mov	4(sp),r0	/new	jsr	pc,swap	jsr	pc,release	mov	r0,r1	mov	0(sp),r0	/old1:	mov	a(r1),w(r1)	/rewind w pointer	cmp	r2,$512.	blos	copy1		/is a short string/	jsr	pc,flush	jsr	pc,reset/	mov	a(r0),-(sp)4:	mov	(sp),0f	mov	afi,r0	sys	seek;0:.. ;0	/set input pointer	cmp	r2,$512.	blos	2f	mov	$512.,r3	/# output this time	mov	r3,0f	mov	r3,3f	add	r3,(sp)	sub	r3,r2	/# left to output	br	1f2:	mov	r2,0f	mov	r2,3f	mov	r2,r3	clr	r21:	mov	afi,r0	sys	read;b1;0:..	bes	bad	cmp	r0,r3	bne	bad	mov	afout,r0	mov	(r1),0f	add	r3,(r1)	sys	seek;0:.. ;0	sys	write;b1;3:..	bes	bad	tst	r2	bgt	4b	tst	(sp)+//	fix up read ptr of new string/copy2:	mov	6(sp),r0	/restore r0	mov	r(r0),r2	sub	a(r0),r2	add	a(r1),r2	mov	r2,r(r1)//	restore and return/	mov	(sp)+,r3	mov	(sp)+,r2	mov	(sp)+,r1	mov	(sp)+,r0	rts	pc/bad:	mov	$1,r0	sys write;1f;2f-1f	41:	<error on copy\n>2:	.even/swap:	mov	w(r1),-(sp)	mov	w(r0),w(r1)	mov	(sp),w(r0)	mov	r(r1),(sp)	mov	r(r0),r(r1)	mov	(sp),r(r0)	mov	a(r1),(sp)	mov	a(r0),a(r1)	mov	(sp),a(r0)	mov	l(r1),(sp)	mov	l(r0),l(r1)	mov	(sp)+,l(r0)	rts	pc//	copy a short string/copy1:	mov	r(r0),-(sp)	mov	a(r0),r(r0)	mov	nchar,-(sp)	mov	r0,r2		/old	mov	r1,r3		/new1:	mov	r2,r1	jsr	pc,getchar	bes	1f	mov	r3,r1	jsr	pc,putchar	br	1b1:	mov	r2,r0	mov	(sp)+,nchar	mov	(sp)+,r(r0)	mov	r3,r1	br	copy2//////	routine to rewind read pointer of string/	pointed to by r1//	mov	...,r1/	jsr	pc,rewind/rewind:	mov	a(r1),r(r1)	rts	pc///	routine to rewind write pointer of string/	pointed to by r1//	mov	...,r1/	jsr	pc,create/create:	mov	a(r1),w(r1)	mov	a(r1),r(r1)	rts	pc///	routine to zero a string//	mov	...,r1/	jsr	pc,zero/zero:	mov	r0,-(sp)	.if testing	jsr	pc,preposterous	.endif	mov	a(r1),w(r1)	clrb	r01:	cmp	w(r1),l(r1)	bhis	1f	jsr	pc,putchar	br	1b1:	mov	a(r1),w(r1)	mov	(sp)+,r0	rts	pc////	routine to move the read pointer of a string to the/	relative position indicated by r0.  the string is/	extended if necessary - there is no error return.//	mov	position,r0/	mov	...,r1/	jsr	pc,seekchar/seekchar:	mov	r1,-(sp)	mov	r0,-(sp)	.if testing	jsr	pc,preposterous	.endif	inc	stats+10.1:	mov	(sp),r0	add	a(r1),r0	cmp	r0,l(r1)	bhi	3f	mov	r0,r(r1)	cmp	r0,w(r1)	blo	1f	mov	r0,w(r1)	br	1f3:	mov	(sp),r0	jsr	pc,allocate	mov	2(sp),r0	jsr	pc,copy	jsr	pc,swap	jsr	pc,release	mov	2(sp),r1	br	1b1:	mov	(sp)+,r0	mov	(sp)+,r1	rts	pc///	routine to move read pointer of string to end of string//	mov	...,r1/	jsr	pc,fsfile/fsfile:	mov	r0,-(sp)	.if testing	jsr	pc,preposterous	.endif	inc	stats+10.	mov	w(r1),r(r1)	mov	(sp)+,r0	rts	pc///	routine to place the character in r0 at the current/	position of the read pointer - the read pointer/	is not moved.//	movb	ch,r0/	mov	...,r1/	jsr	pc,alterchar/	mov	r1,.../alterchar:	mov	r2,-(sp)	mov	r1,-(sp)	mov	r0,nchar	.if testing	jsr	pc,preposterous	.endif	inc	stats+8.1:	cmp	r(r1),l(r1)	/W,L	blo	3f	mov	l(r1),r0	inc	r0	sub	a(r1),r0	/W-A+1	jsr	pc,allocate	mov	(sp),r0	jsr	pc,copy	jsr	pc,swap	jsr	pc,release	mov	(sp),r13:	mov	r(r1),r0	jsr	pc,bufchar	bec	2f	jsr	pc,getbuf2:	movb	nchar,(r0)	mov	$1,w1(r2)	mov	nchar,r0	/to preserve r0 for user	inc	r(r1)	cmp	r(r1),w(r1)	blos	3f	mov	r(r1),w(r1)3:	mov	(sp)+,r1	mov	(sp)+,r2	rts	pc///	routine to look at next character from string/	pointed to by r1;  character returned in r0/	c-bit set if character not available (end of file)/	r1 is preserved//	mov	...,r1/	jsr	pc,lookchar/	movb	r0,.../lookchar:	mov	r2,-(sp)	inc	stats+6.	.if testing	jsr	pc,preposterous	.endif	cmp	w(r1),r(r1)	/W,R	blos	noch	mov	r(r1),r0	jsr	pc,bufchar	bec	2f	jsr	pc,getbuf/2:	inc	flag	bne	2f	jsr	pc,fixct	br	1f2:	mov	flag,u1(r2)1:	mov	(sp)+,r2	movb	(r0),r0	tst	r0	/clears c-bit	rts	pc/noch:	mov	(sp)+,r2	clr	r0	sec	rts	pc///	routine to put a character into the string/	pointed to by r1;  character in r0/	r0 is preserved; r1 points to the string/	after return and must be saved.//	movb	ch,r0/	mov	...,r1/	jsr	pc,putchar/	mov	r1,.../putchar:	mov	r2,-(sp)	mov	r1,-(sp)	mov	r0,nchar	.if testing	jsr	pc,preposterous	.endif	inc	stats+8.1:	cmp	w(r1),l(r1)	/W,L	blo	3f	mov	w(r1),r0	inc	r0	sub	a(r1),r0	/W-A+1	jsr	pc,allocate	mov	(sp),r0	jsr	pc,copy	jsr	pc,swap	jsr	pc,release	mov	(sp),r13:	mov	w(r1),r0	jsr	pc,bufchar	bec	2f	jsr	pc,getbuf2:	movb	nchar,(r0)	mov	$1,w1(r2)	mov	nchar,r0	/to preserve r0 for user	inc	w(r1)	inc	flag	bne	2f	jsr	pc,fixct	br	1f2:	mov	flag,u1(r2)1:	mov	(sp)+,r1	mov	(sp)+,r2	rts	pc///	routine to flush contents of all buffers.//	jsr	pc,flush/flush:	mov	r1,-(sp)	mov	r2,-(sp)	mov	r3,-(sp)	clr	r31:	cmp	r3,$numb	bhis	1f	mov	r3,r2	asl	r2	tst	w1(r2)	ble	2f	mov	r3,r1	ashc	$9.,r1	bic	$777,r1	add	$b1,r1	jsr	pc,clean2:	inc	r3	br	1b1:	mov	(sp)+,r3	mov	(sp)+,r2	mov	(sp)+,r1	rts	pc//reset:	mov	r3,-(sp)	mov	r2,-(sp)	clr	r31:	cmp	r3,$numb	bge	1f	mov	r3,r2	asl	r2	mov	$-1.,w1(r2)	clr	b1s(r2)	clr	b1e(r2)	clr	u1(r2)	inc	r3	br	1b1:	clr	flag	mov	(sp)+,r2	mov	(sp)+,r3	rts	pc///	routine to read from disc to a buffer/	wcing the buffer if necessary//	mov	disc addr,r0/	mov	buffer addr,r2/	jsr	pc,getb//	on return r0 = addr of byte in buffer/getb:	mov	r3,-(sp)	mov	r1,-(sp)	mov	r0,-(sp)	mov	r2,r3	asr	r3	mov	r3,r1	ashc	$9.,r1	bic	$777,r1	add	$b1,r1	tst	w1(r2)	/ w	ble	1f	jsr	pc,clean1:	mov	(sp),r0	bic	$777,r0		/get lowest multiple of 512.	mov	r0,0f	mov	r0,b1s(r2)	/set start	mov	afi,r0	sys	seek;0:..;0	mov	r1,0f	sys	read;0:..;512.	mov	b1s(r2),b1e(r2)	add	$512.,b1e(r2)	/ set end	clr	w1(r2)		/clear w	mov	(sp)+,r0	sub	b1s(r2),r0	add	r1,r0		/ set r0=byte addr in buffer	mov	(sp)+,r1	mov	(sp)+,r3	rts	pc///	routine to wc a buffer//	mov	buffer addr,r2/	mov	buffer addr+6,r1	beginning of buffer/	jsr	pc,clean/clean:	inc	stats+24.	mov	r0,-(sp)	mov	b1s(r2),0f	mov	afout,r0	sys	seek;0:..;0	mov	r1,0f	sys	write;0:..;512.	clr	w1(r2)	/clear w	mov	(sp)+,r0	rts	pc///	routine to get buffer addr of byte whose disc/	addr is in r0 - also returns addr of write/	flag for buffer in r2//	mov	disc addr,r0/	jsr	pc,bufchar/	mov	(r0),r0	for read/	inc	(r2)	for write must inc w//	c-bit set if char not in either buffer/bufchar:	mov	r1,-(sp)	mov	r3,-(sp)	clr	r31:	mov	r3,r2	asl	r2	cmp	r0,b1s(r2)	blo	2f	cmp	r0,b1e(r2)	bhis	2f	sub	b1s(r2),r0	mov	r3,r1	ashc	$9.,r1	bic	$777,r1	add	r1,r0	add	$b1,r0	mov	(sp)+,r3	mov	(sp)+,r1	clc	rts	pc2:	inc	r3	cmp	r3,$numb	blt	1b	mov	(sp)+,r3	mov	(sp)+,r1	sec	rts	pc///	routine to get a buffer//	mov	disc addr,r0/	jsr	pc,getbuf/	mov	(r0),r0		(for read)/	inc	(r2)		must inc w for w/getbuf:	mov	r4,-(sp)	mov	r3,-(sp)	mov	$2,r3	clr	r2	mov	$1,r41:	cmp	r4,$numb	bge	1f	cmp	u1(r3),u1(r2)	bhis	2f	mov	r3,r22:	inc	r4	add	$2.,r3	br	1b1:	mov	r2,r3	jsr	pc,getb	add	$stats+14.,r3	inc	(r3)	mov	(sp)+,r3	mov	(sp)+,r4	rts	pc///	this routine renumbers the time used cell u1(r2)/	of the buffers when the clock overflows/fixct:	mov	r1,-(sp)	mov	r3,-(sp)	mov	$numb,r1	mov	$numb,flag2:	mov	r1,u1(r2)	dec	r1	bge	1f	mov	(sp)+,r3	mov	(sp)+,r1	rts	pc1:	clr	r2	mov	$2,r31:	cmp	r3,$numb2	bge	2b	cmp	u1(r3),u1(r2)	blo	2f	mov	r3,r22:	add	$2,r3	br	1b

⌨️ 快捷键说明

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