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

📄 f36.s

📁 Version 6 Unix 核心源代码 Version 6 Unix 核心源代码
💻 S
字号:
/// f36 -- expression code generation.globl	lvalue.globl	rvalue.globl	convrt.globl	type.globl	funcappl.globl	name.globl	error.globl	lookup.globl	code.globl	iserror.globl	genop.globl	typ.globl	newline.globl	functn.globl	sizelvalue:	jsr	r5,iserror		rts r5	tst	(r2)	bne	1f	mov	2(r2),r3	jsr	r5,code		<	lval>; .even	br	name1:	mov	r2,-(sp)	cmp	(r2),$32.		/ array appl	bne	1f	jsr	r5,aryappl	dec	r0	bne	2f			/ dim =| 1	tstb	symtab(r3)	blt	2f			/ p-bit, not simple	mov	$"al,r0	br	simpary2:	jsr	r5,code		<	alval\0>; .evenarydope:	jsr	r5,pbit	mov	symtab+2(r3),r2	mov	(r2)+,r0	asl	r0	add	r0,r2	mov	(r2),r0	jsr	r5,code		<; d%d\0>; .even		r0	br	2f1:	jsr	r5,error; 54.	mov	(sp)+,r2	rts	r5simpary:	mov	r3,-(sp)	mov	symtab(r3),r3	bis	$7,r3	jsr	r5,genop	mov	(sp)+,r3	jsr	r5,size	jsr	r5,code		<; %d.\0>; .even		r0	br	2fname:	mov	r2,-(sp)	jsr	r5,pbit2:	jsr	r5,code		<; \0>; .even	bit	$100,symtab(r3)		/ common	beq	1f	mov	symtab+4(r3),r2	jsr	r5,code		<%n+\0>; .even		r21:	movb	symtab(r3),r2	bic	$!70,r2	cmp	r2,$30			/ external	bne	1f	jsr	r5,code		<%n.\n\0>; .even		r3	br	2f1:	jsr	r5,code		<%n_\n\0>; .even		r32:	mov	symtab(r3),r3	mov	(sp)+,r2	rts	r5rvalue:	jsr	r5,iserror		rts r5	mov	r2,-(sp)	tst	(r2)	bne	1f	mov	2(r2),r3	movb	symtab+1(r3),r2	jsr	r5,code		<	rval%d>; .even		r2	mov	(sp)+,r2	br	name1:	cmp	(r2),$32.	bne	1f	jsr	r5,aryappl	dec	r0	bne	3f	tstb	symtab(r3)	blt	3f	mov	$"ar,r0	br	simpary3:	jsr	r5,code		<	arval\0>; .even	br	arydope1:	cmp	(r2),$34.		/ array appl	bne	1f	jsr	r5,funcappl	mov	(sp)+,r2	mov	2(r2),r3	movb	symtab+1(r3),r0	jsr	r5,code		<%d.\n\0>; .even		r0	mov	symtab(r3),r3	rts	r51:	cmp	(r2),$2	bne	1f	movb	3(r2),r3	mov	4(r2),r2	jsr	r5,code		<	rval%d; c%d\n\0>; .even		r3		r2	mov	(sp)+,r2	mov	2(r2),r3	rts	r51:	cmp	(r2),$24.		/ arith or relat	bhi	1f	mov	2(r2),r2	bne	3f	mov	(sp),r2	sub	$10.,(r2)		/ - bin -> - unary	mov	4(r2),r2	jsr	r5,rvalue	br	2f3:	jsr	r5,rvalue	mov	(sp),r2	mov	r3,-(sp)	mov	4(r2),r2	jsr	r5,type	cmp	*2(sp),$4			/ **	bne	3f	mov	r3,r2	bic	$!7,r2	cmp	r2,$1		/ ** integer	bne	3f	mov	2(sp),r2	sub	$2,(r2)		/ pr -> pi	mov	4(r2),r2	jsr	r5,rvalue	mov	$intcon,r2	jsr	r5,convrt	mov	(sp)+,r3	br	2f3:	mov	(sp),r2	jsr	pc,maxtyp	mov	(sp)+,r3	mov	r2,-(sp)	jsr	r5,convrt	mov	2(sp),r2	mov	4(r2),r2	jsr	r5,rvalue	mov	(sp)+,r2	jsr	r5,convrt	mov	r2,r3	br	2f1:	cmp	(r2),$30.		/ and or not	bhi	1f	mov	2(r2),r2	beq	3f	jsr	r5,rvalue	mov	$logcon,r2	jsr	r5,convrt3:	mov	(sp),r2	mov	4(r2),r2	jsr	r5,rvalue	mov	$logcon,r2	jsr	r5,convrt2:	mov	(sp)+,r2	mov	(r2),r0	cmp	r0,$4	bhis	2f	add	$10.,(r2)		/ back to binary	tst	r0	beq	2f	sub	$8,(r2)		/ back to pr2:	mov	optab(r0),r0	jsr	r5,genop	jsr	r5,newline	cmp	(r2),$14.		/ relat	blo	2f	mov	$logcon,r32:	rts	r51:	jsr	r5,error; 54.	mov	(sp)+,r2	rts	r5pbit:	tstb	symtab(r3)	bge	1f	jsr	r5,code		<p\0>1:	rts	r5funcappl:	mov	r2,-(sp)	mov	functn,r3	jsr	r5,code		<	stsp; ft+%d.\n\0>; .even		r3	mov	r3,-(sp)	add	$2,r3	mov	r3,functn	clr	-(sp)		/ nargs1:	mov	4(r2),r2	beq	2f	inc	(sp)	cmp	(r2),$36.	/ ,	bne	1f	mov	r2,-(sp)	mov	2(r2),r2	mov	6(sp),r3	jsr	r5,fapp1	mov	(sp)+,r2	br	1b1:	mov	4(sp),r3	jsr	r5,fapp12:	mov	(sp)+,r0		/ nargs	mov	(sp)+,r2	mov	(sp)+,r3	mov	2(r3),r3	jsr	r5,code		<	call\0>; .even	jsr	r5,pbit	jsr	r5,code		<; %n.; ft+%d.; %d.; \0>; .even		r3		r2		r0	cmp	functn,functm	ble	1f	mov	functn,functm1:	mov	r2,functn	rts	r5fapp1:	mov	2(r3),r3		/ fetch out function name	mov	symtab+2(r3),r3		/ arg conversion	bne	2f	tst	(r2)	beq	1f	cmp	(r2),$32.	beq	4f	cmp	(r2),$42.		/ lv if funct or name or arry app	beq	1f	cmp	(r2),$2			/ lv if const	bne	2f	mov	4(r2),r3	jsr	r5,code		<	lval; c%d\n\0>		r3	br	3f2:	mov	r3,-(sp)	jsr	r5,rvalue	mov	(sp)+,r2	beq	2f	jsr	r5,convrt2:	mov	functn,r3	jsr	r5,code		<	stsp; ft+%d.\n\0>; .even		r3	add	$2,functn	rts	r51:	clr	(r2)			/ turn func/array names into lvs4:	jsr	r5,lvalue3:	mov	functn,r3	jsr	r5,code		<	stst; ft+%d.\n\0>; .even		r3	add	$2,functn	rts	r5aryappl:	mov	r2,-(sp)	clr	-(sp)		/ arg count2:	inc	(sp)	mov	4(r2),r2	cmp	(r2),$36.	/ ,	bne	2f	mov	r2,-(sp)	mov	2(r2),r2	jsr	r5,rvalue	mov	$intcon,r2	jsr	r5,convrt	mov	(sp)+,r2	br	2b2:	jsr	r5,rvalue	mov	$intcon,r2	jsr	r5,convrt	mov	(sp)+,r0	mov	(sp)+,r2	mov	2(r2),r3	cmp	r0,*symtab+2(r3)	beq	1f	jsr	r5,error; 53.		/ dimension mismatch1:	rts	r5/ converts stack from type in r3 to type in r2convrt:	mov	r2,-(sp)	mov	r3,-(sp)	bic	$![377\<8+7],r2	bic	$![377\<8+7],r3	cmp	r2,r3	beq	1f	jsr	r5,code		<	\0>; .even	jsr	pc,2f	mov	r2,r3	jsr	pc,2f	jsr	r5,code		<\n\0>; .even1:	mov	(sp)+,r3	mov	(sp)+,r2	rts	r52:	mov	r2,-(sp)	mov	r3,r2	clrb	r3	swab	r3	bic	$!7,r2	movb	typ(r2),r2	jsr	r5,code		<%c%d\0>; .even		r2		r3	mov	(sp)+,r2	rts	pctype:	cmp	(r2),$32.	beq	2f	cmp	(r2),$34.	beq	2f	tst	(r2)	bne	1f2:	mov	2(r2),r3	mov	symtab(r3),r3	rts	r51:	cmp	(r2),$2	bne	1f	mov	2(r2),r3	rts	r51:	cmp	(r2),$14.	blo	1f	mov	$logcon,r3	rts	r51:	mov	r2,-(sp)	mov	2(r2),r2	bne	1f	mov	(sp),r2	mov	4(r2),r2	jsr	r5,type	br	2f1:	jsr	r5,type	mov	(sp),r2	mov	r3,-(sp)	mov	4(r2),r2	jsr	r5,type	mov	(sp)+,r2	jsr	pc,maxtyp	mov	r2,r32:	mov	(sp)+,r2	rts	r5maxtyp:	mov	r2,r0	cmp	r2,r3	bhis	2f	mov	r3,r22:	clrb	r2	bic	$!7,r0	bic	$!7,r3	cmp	r0,r3	bhis	2f	mov	r3,r02:	bis	r0,r2	rts	pcoptab:	<ng>	<pi>	<pr>	<dv>	<mp>	<sb>	<ad>	<lt>	<le>	<eq>	<ne>	<gt>	<ge>	<nt>	<an>	<or>

⌨️ 快捷键说明

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