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

📄 ar.s

📁 UNIX v6源代码 这几乎是最经典的unix版本 unix操作系统设计和莱昂氏unix源代码分析都是用的该版
💻 S
字号:
/ ar -- archive/library	mov	(sp)+,r0	sub	$2,r0	ble	userr	tst	(sp)+	mov	(sp)+,r1	clr	r21:	tstb	(r1)	beq	1f	cmpb	(r1),$'v	bne	2f	inc	r1	incb	vflg	br	1b2:	tst	r2	bne	userr	movb	(r1)+,r2	br	1b1:	tst	r2	beq	userr	mov	$arglst,r11:	mov	(sp)+,(r1)+	dec	r0	bgt	1b	clr	(r1)+	mov	$swlst,r11:	cmp	r2,(r1)+	beq	1f	tst	(r1)+	bne	1b	br	userr1:	jmp	*(r1)swlst:	'r; comr	'u; comu	'd; comd	'x; comx	't; comt	 0; 0userr:	jsr	r5,diag		<bad usage\n\0>	.evenputc:	movb	r0,ch	mov	$1,r0	sys	write; ch; 1	rts	r5print:	movb	(r1)+,r0	beq	1f	jsr	r5,putc	br	print1:	rts	r5diag:	mov	r5,r1	jsr	r5,print	tst	tfo	beq	1f	sys	unlink; tfil1:	sys	exitgetaf:	mov	arglst,0f	sys	open; 0:..; 0	bes	1f	mov	r0,afi	sys	read; buf; 2	cmp	buf,magic	bne	magerr	tst	(r5)+1:	rts	r5magerr:	mov	arglst,r1	jsr	r5,print	jsr	r5,diag		< -- not in archive format\n\0>	.evenmktmp:	sys	stat; tfil; buf	bes	1f	incb	tfil+8	cmpb	tfil+8,$'z	blo	mktmp	br	tferr1:	sys	signal; 2; 1	ror	r0	bcs	1f	sys	signal; 2; done1:	sys	creat; tfil; 600	bes	tferr	mov	r0,tfo	sys	open; tfil; 0	bes	tferr	mov	r0,tfi	rts	r5tferr:	jsr	r5,diag		<cannot open temp file\n\0>	.evengetdir:	mov	afi,r0	sys	read; dir; 16.	cmp	r0,$16.	bne	1f	jsr	r5,mvname	tst	(r5)+1:	rts	r5mvname:	mov	name,rname	mov	name+2,rname+2	mov	name+4,rname+4	mov	name+6,rname+6	rts	r5skip:	mov	size,r0	inc	r0	bic	$1,r0	mov	r0,0f	mov	afi,r0	sys	seek; 0:..; 1	rts	r5trim:	mov	r0,r21:	tstb	(r0)	beq	1f	cmpb	(r0)+,$'/	beq	trim	br	1b1:	rts	r5match:	mov	$arglst+2,r11:	mov	(r1)+,r0	beq	1f	cmp	r0,$-1	beq	1b	jsr	r5,trim	mov	$name,r02:	cmp	r0,$name+8.	beq	2f	cmpb	(r0),(r2)+	bne	1b	tstb	(r0)+	bne	2b2:	cmp	(r5)+,-(r1)1:	rts	r5mvfil:	mov	(r1),9f	mov	(r1),0f	sys	stat; 0:..; buf	bes	operr	sys	open; 9:..; 0	bes	operr	mov	r0,fio	mov	(r1),r0	mov	$-1,(r1)	jsr	r5,trim	mov	$name,r01:	cmp	r0,$name+8.	beq	1f	movb	(r2)+,(r0)+	bne	1b1:	mov	buf+32.,mtim	mov	buf+34.,mtim+2	movb	buf+7.,ouid	movb	buf+4.,mode	mov	buf+10.,size	mov	tfo,r0	sys	write; dir; 16.	mov	size,r21:	mov	fio,r0	sys	read; buf; 512.	sub	r0,r2	mov	r0,0f	beq	1f	mov	tfo,r0	sys	write; buf; 0:..	br	1b1:	tst	r2	bne	phserr	bit	$1,size	beq	1f	mov	tfo,r0	sys	seek; 1; 11:	mov	fio,r0	sys	close	jsr	r5,mvname	rts	r5operr:	mov	9b,r1	jsr	r5,print	jsr	r5,diag		< -- cannot open\n\0>	.evenphserr:	mov	9b,r1	jsr	r5,print	jsr	r5,diag		< -- phase error\n\0>	.evencopyfl:	mov	tfo,r0	sys	write; dir; 16.	mov	size,r1	mov	$rname,9b1:	mov	r1,0f	beq	1f	cmp	r1,$512.	blo	2f	mov	$512.,0f2:	mov	afi,r0	sys	read; buf; 0:..	sub	r0,r1	mov	r0,0f	beq	phserr	mov	tfo,r0	sys	write; buf; 0:..	br	1b1:	bit	$1,size	beq	1f	mov	afi,r0	sys	seek; 1; 1	mov	tfo,r0	sys	seek; 1; 11:	rts	r5xtract:/	movb	mode,0f	sys	creat; rname; 0:666	bes	noxerr	mov	r0,fio	mov	size,r1	mov	$rname,9b1:	mov	r1,0f	beq	1f	cmp	r1,$512.	blo	2f	mov	$512.,0f2:	mov	afi,r0	sys	read; buf; 0:..	sub	r0,r1	mov	r0,0f	beq	phserr	mov	fio,r0	sys	write; buf; 0:..	br	1b1:	mov	fio,r0	sys	close	bit	$1,size	beq	1f	mov	afi,r0	sys	seek; 1; 11:	mov	r0,-(sp)	mov	r1,-(sp)	mov	mtim+2,r1	mov	mtim,r0/	sys	mdate	mov	(sp)+,r1	mov	(sp)+,r1	rts	r5noxerr:	mov	$rname,r1	jsr	r5,print	jsr	r5,diag		< -- cannot create\n\0>	.eventable:	mov	$rname,r1	jsr	r5,print	mov	$'\n,r0	jsr	r5,putc	rts	r5mesg:	mov	r1,-(sp)	mov	(r5)+,r0	tstb	vflg	beq	1f	jsr	r5,putc	mov	$' ,r0	jsr	r5,putc	mov	$rname,r1	jsr	r5,print	mov	$'\n,r0	jsr	r5,putc1:	mov	(sp)+,r1	rts	r5oldnew:	sys	stat; rname; buf	bes	1f	cmp	buf+32.,mtim	blo	1f	bhi	2f	cmp	buf+34.,mtim+2	blos	1f2:	tst	(r5)+	mov	$rname,tname	mov	$tname,r11:	rts	r5comr:	jsr	r5,mktmp	jsr	r5,getaf		br copfl1:	jsr	r5,getdir		br copfl	jsr	r5,match		br 2f	jsr	r5,mesg; 'r	jsr	r5,skip	jsr	r5,mvfil	br	1b2:	jsr	r5,copyfl	jsr	r5,mesg; 'c	br	1bcomu:	jsr	r5,mktmp	jsr	r5,getaf		br noaf1:	jsr	r5,getdir		br copfl	tst	arglst+2	beq	2f	jsr	r5,match		br 3f	mov	$-1,(r1)2:	jsr	r5,oldnew		br 3f	jsr	r5,mesg; 'r	jsr	r5,skip	jsr	r5,mvfil	br	1b3:	jsr	r5,copyfl	jsr	r5,mesg; 'c	br	1bcomd:	jsr	r5,mktmp	jsr	r5,getaf		br noaf1:	jsr	r5,getdir		br 1f	jsr	r5,match		br 2f	mov	$-1,(r1)	jsr	r5,skip	jsr	r5,mesg; 'd	br	1b2:	jsr	r5,copyfl	jsr	r5,mesg; 'c	br	1b1:	jsr	r5,nfound	br	copflnoaf:	jsr	r5,diag		<no archive file\n\0>	.evencrterr:	jsr	r5,diag		<cannot create archive file\n\0>	.evencopfl:	mov	$arglst,r1	mov	(r1)+,0f1:	tst	(r1)+	beq	1f	cmp	-2(r1),$-1	beq	1b	tst	-(r1)	jsr	r5,mvfil	jsr	r5,mesg; 'a	br	1b1:	sys	signal; 2; 1 / no interrupts during copy back	sys	creat; 0:..; 666	bes	crterr	mov	r0,afo	sys	write; magic; 21:	mov	tfi,r0	sys	read; buf; 512.	mov	r0,0f	beq	done	mov	afo,r0	sys	write; buf; 0:..	br	1bdone:	jsr	r5,diag		<\0>	.evencomx:	jsr	r5,getaf		br noaf1:	jsr	r5,getdir		br 1f	tst	arglst+2	beq	3f	jsr	r5,match		br 2f	mov	$-1,(r1)3:	jsr	r5,xtract	jsr	r5,mesg; 'x	br	1b2:	jsr	r5,skip	br	1b1:	jsr	r5,nfound	br	donecomt:	jsr	r5,getaf		br noaf1:	jsr	r5,getdir		br 1f	tst	arglst+2	beq	2f	jsr	r5,match		br 3f	mov	$-1,(r1)2:	jsr	r5,table3:	jsr	r5,skip	br	1b1:	jsr	r5,nfound	br	donenfound:	mov	$arglst+2,r21:	mov	(r2)+,r1	beq	1f	cmp	r1,$-1	beq	1b	mov	$-1,-(r2)	jsr	r5,print	mov	$notfnd,r1	jsr	r5,print	br	1b1:	rts	r5notfnd:	< -- not found\n\0>	.eventfil:	</tmp/vtma\0>	.evenmagic:	-147.	.bssafi:	.=.+2afo:	.=.+2tfi:	.=.+2tfo:	.=.+2fio:	.=.+2rname:	.=.+9.ch:	.=.+1vflg:	.=.+1	.eventname:	.=.+2dir:	name: .=.+8.	mtim: .=.+4	ouid: .=.+1	mode: .=.+1	size: .=.+2arglst:	.=.+200.buf:	.=.+512.

⌨️ 快捷键说明

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