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

📄 dc4.s

📁 Version 6 Unix 核心源代码 Version 6 Unix 核心源代码
💻 S
字号:
.globl	getchar.globl	stats.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	getword, putword.globl	length, position.globl	w, r, a, l/testing = 0///	routine to return the length of a string//	mov	...,r1/	jsr	pc,length/	mov	r0,.../length:	mov	w(r1),r0	sub	a(r1),r0	rts	pc///	routine to return the read pointer position//	mov	...,r1/	jsr	pc,position/	mov	r0,.../position:	mov	r(r1),r0	sub	a(r1),r0	rts	pc/////	routine to get a word from the string/	mov	...,r1/	jsr	pc,getword/	mov	r0,.../getword:	jsr	pc,getchar	bes	noch	movb	r0,nchar	jsr	pc,getchar	bec	2f	dec	r(r1)	br	noch2:	movb	r0,nchar+1	mov	nchar,r0	tst	r0		/tst clears c-bit	rts	pc///	routine to put a word onto the string/	mov	...,r1/	mov	...,r0/	jsr	pc,putword/putword:	jsr	pc,putchar	swab	r0	jsr	pc,putchar	swab	r0	rts	pc/.bssnchar:	.=.+2.text////	routine to read 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,getchar/	movb	r0,.../getchar:	jsr	pc,lookchar	bec	2f	rts	pc2:	inc	r(r1)	tst	r0		/tst clears c-bit	rts	pc/noch:	clr	r0	sec	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:	.if	testing	jsr	pc,plausible	inc	stats+6.	.endif	cmp	w(r1),r(r1)	blos	noch	movb	*r(r1),r0	clc	rts	pc/plausible:	cmp	r1,$headers	bhis 9f; 4; 9:	cmp	r1,$headend	blo 9f; 4; 9:	rts	pc////	routine to move the read pointer of a string to a/	specified point.  If the string is not long enough,/	the string is extended//	mov	position,r0/	mov	...,r1/	jsr	pc,seekchar/seekchar:	mov	r1,-(sp)	mov	r0,-(sp)	.if	testing	jsr	pc,plausible	inc	stats+10.	.endif1:	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,move	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:	.if	testing	jsr	pc,plausible	inc	stats+10.	.endif	mov	w(r1),r(r1)	rts	pc///	routine to read a string backwards/	the read pointer is decremented before reading//	mov	...,r1/	jsr	pc,backspace/	mov	r0,.../backspace:	.if	testing	jsr	pc,plausible	inc	stats+6.	.endif	cmp	a(r1),r(r1)	bhis	noch	dec	r(r1)	movb	*r(r1),r0	clc	rts	pc/////	routine to put a character into the string/	pointed to by r1;  character in r0/	r0 and r1 are preserved.//	movb	ch,r0/	mov	...,r1/	jsr	pc,putchar/putchar:	mov	r1,-(sp)	mov	r0,-(sp)	.if	testing	jsr	pc,plausible	inc	stats+8.	.endif1:	cmp	w(r1),l(r1)	blt	3f	mov	w(r1),r0	inc	r0	sub	a(r1),r0	/W-A+1	jsr	pc,allocate	mov	2(sp),r0	/r1	jsr	pc,move	jsr	pc,swap	jsr	pc,release	mov	2(sp),r1	/r1	cmp	w(r1),l(r1)	blt	3f	jmp	err/3:	movb	(sp),*w(r1)	inc	w(r1)	mov	(sp)+,r0	tst	(sp)+	rts	pc//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///	routine to alter a character in the string/	pointed to by r1;  character in r0/	r0 and r1 are preserved.//	movb	ch,r0/	mov	...,r1/	jsr	pc,alterchar/alterchar:	mov	r1,-(sp)	mov	r0,-(sp)	.if	testing	jsr	pc,preposterous	inc	stats+8.	.endif1:	cmp	r(r1),l(r1)	blt	3f	mov	l(r1),r0	inc	r0	sub	a(r1),r0	/W-A+1	jsr	pc,allocate	mov	2(sp),r0	/r1	jsr	pc,move	jsr	pc,swap	jsr	pc,release	mov	2(sp),r1	/r1	cmp	r(r1),l(r1)	blt	3f	jmp	err/3:	movb	(sp),*r(r1)	inc	r(r1)	cmp	r(r1),w(r1)	ble	1f	mov	r(r1),w(r1)1:	mov	(sp)+,r0	tst	(sp)+	rts	pc///	routine to move the contents of one string/	to another.//	mov	source,r0/	mov	dest,r1/	jsr	pc,move//	on return, r1 points to the new string and should/	be saved.  r0 is preserved./move:	mov	r3,-(sp)	mov	r2,-(sp)	mov	r1,-(sp)	mov	r0,-(sp)	mov	w(r0),r2	sub	a(r0),r2	/W-A	mov	l(r1),r3	sub	a(r1),r3	/L-A	cmp	r2,r3	ble	1f	mov	r2,r0	jsr	pc,allocate	mov	2(sp),r0	/r1	jsr	pc,swap	jsr	pc,release	mov	r0,r1	mov	0(sp),r0	/r0/1:	mov	a(r0),(r0)	mov	a(r1),(r1)1:	dec	r2	blt	1f	movb	*(r0),*(r1)	inc	(r0)	inc	(r1)	br	1b//	fix up read ptr of new string/1:	mov	r(r0),r2	sub	a(r0),r2	add	a(r1),r2	mov	r2,r(r1)//	restore and return/	mov	(sp)+,r0	mov	(sp)+,r1	mov	(sp)+,r2	mov	(sp)+,r3	rts	pc///	routine to rewind read pointer of string/	pointed to by r1//	mov	...,r1/	jsr	pc,rewind/rewind:	.if	testing	jsr	pc,plausible	inc	stats+10.	.endif	mov	a(r1),r(r1)	rts	pc//	routine to rewind write pointer of string/	pointed to by r1//	mov	...,r1/	jsr	pc,create/create:	.if	testing	jsr	pc,plausible	inc	stats+10.	.endif	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),r01:	cmp	r0,l(r1)	bhis	1f	clrb	(r0)+	br	1b1:	mov	(sp)+,r0	rts	pc//

⌨️ 快捷键说明

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