mkdir.s

来自「UNIX v6源代码 这几乎是最经典的unix版本 unix操作系统设计和莱」· S 代码 · 共 92 行

S
92
字号
/ makdir -- make a directory	sys	getuid	mov	r0,uid	mov	sp,r5	tst	(r5)+loop:	tst	(r5)+	dec	(sp)	bgt	1f	sys	exit1:	mov	(r5),r0	mov	$buf1,r1	mov	$buf2,r2	clr	r31:	movb	(r0)+,r4	beq	2f	movb	r4,(r1)+	movb	r4,(r2)+	cmpb	r4,$'/	bne	1b	mov	r2,r3	br	1b2:	movb	$'/,(r1)+	movb	$'.,(r1)+	clrb	(r1)	mov	$dot,dir	tst	r3	beq	1f	mov	$buf2,dir	clrb	(r3)	cmp	r3,$buf2+1	beq	1f	clrb	-(r3)		/ ???1:	tstb	uid	beq	2f	sys	stat; dir:..; stbuf	/ status of parent dir	bes	error	mov	stbuf+4,r0	cmpb	uid,stbuf+7	bne	1f	ash	$-6,r01:	ror	r0	ror	r0	bcc	error			/ no write permission in parent2:	mov	(r5),0f	sys	makdir; 0:..; 140777; 0	bes	error			/ prob already exists	mov	(r5),0f	sys	chown; 0:..; uid:..	mov	(r5),0f	sys	link; 0:..; buf1	bes	error	movb	$'.,(r1)+	clrb	(r1)	mov	dir,0f	sys	link; 0:..; buf1	bec	looperror:	mov	(r5),r0	mov	r0,0f	clr	0f+21:	tstb	(r0)+	beq	1f	inc	0f+2	br	1b1:	mov	$1,r0	sys	write; 0:..; ..	mov	$1,r0	sys	write; ques; 3	br	loopdot:	<.\0>ques:	< ?\n>	.even.bssbuf1:	.=.+100.buf2:	.=.+100.stbuf:	.=.+40.

⌨️ 快捷键说明

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