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

📄 emumainalib.s

📁 Vxworks OS source code
💻 S
📖 第 1 页 / 共 3 页
字号:
	#SAVEIN	movl	%esi,s_iptr		#GETEPX  ebx	movl	s_fpsp,%eax		addl	$s_stk,%eax		movl	(%eax),%edi		movl	4(%eax),%edx		movl	8(%eax),%ecx		subl	$s_stk,%eax		shll	$5,%ebx			addb	%bl,%al			addl	$s_stk,%eax		xchgl	%edi,%eax		call	epsub			jmp	rounde		fsubrx:				#ST(i) = ST(i) - ST	#SAVEIN	movl	%esi,s_iptr		#GETEPX  ebx	movl	s_fpsp,%eax		addl	$s_stk,%eax		movl	(%eax),%edi		movl	4(%eax),%edx		movl	8(%eax),%ecx		subl	$s_stk,%eax		shll	$5,%ebx			addb	%bl,%al			addl	$s_stk,%eax		xchgl	%edi,%eax		call	epsubr			jmp	rounde		fdivx:				#ST(i) = ST / ST(i)	#SAVEIN	movl	%esi,s_iptr		#GETEPX  ebx	movl	s_fpsp,%eax		addl	$s_stk,%eax		movl	(%eax),%edi		movl	4(%eax),%edx		movl	8(%eax),%ecx		subl	$s_stk,%eax		shll	$5,%ebx			addb	%bl,%al			addl	$s_stk,%eax		xchgl	%edi,%eax		call	epdiv			jmp	rounde		fdivrx:				#ST(i) = ST(i) / ST	#SAVEIN	movl	%esi,s_iptr		#GETEPX  ebx	movl	s_fpsp,%eax		addl	$s_stk,%eax		movl	(%eax),%edi		movl	4(%eax),%edx		movl	8(%eax),%ecx		subl	$s_stk,%eax		shll	$5,%ebx			addb	%bl,%al			addl	$s_stk,%eax		xchgl	%edi,%eax		call	epdivr			jmp	rounde		fldenv_:			#load environmentfrstor_:			#restore the HW status	movl	%eax,%esi		movl	$h_ctrl,%edi		movl	$3,%ecx			.byte	0x36 #from ss: 	repz				movsl				.byte	0x36 #from ss: 	lodsl			#instruction pointer	movl	%eax,s_iptr		addl	$4,%esi			.byte	0x36 #from ss: 	lodsl			#operand pointer	movl	%eax,s_memp		addl	$4,%esi			movb	h_stat+1,%al		shlb	$2,%al			andl	$0x0e0,%eax		movl	%eax,s_fpsp		cmpb	$0x2c,%dl		jnz	rst5			movl	s_fpsp,%edi		addl	$s_stk,%edi		movl	$8,%ecx		lds2:	movl	%esi,%eax		pushl	%ecx			call	eptoep			#PUTEP	movl	%eax,(%edi)		movl	%edx,4(%edi)		movl	%ecx,8(%edi)		popl	%ecx			addl	$10,%esi		movl	%edi,%eax		subl	$s_stk,%eax		addb	$32,%al			addl	$s_stk,%eax		movl	%eax,%edi		loop	lds2		rst5:	movw	h_ctrl,%ax		notl	%eax			andw	h_stat,%ax		testb	$0x3f,%al		jz	rst7			orw	$0x8080,h_stat	rst7:	movl	$8,%ecx		#prepare to loop over all 8 tags	movw	h_tag,%ax		movl	$s_stk+0x0e0,%edi	ltt3:	rolw	$2,%ax			movb	%al,%dl			andb	$3,%dl			movb	%dl,10(%edi)		subl	$32,%edi		loop	ltt3			ret			fstenv_:			#store environmentfsave_:				#save HW block	pushl	%es		#flat model assumes target is stack	movw	%ss,%cx			movw	%cx,%es			pushl	%eax			movl	$8,%ecx		#prepare to loop over all 8 tags	movl	$s_stk,%edi	stt3:	movb	10(%edi),%bl	#concatenate tags       	shrdw	$2,%bx,%ax		addl	$32,%edi		loop	stt3			movw	%ax,h_tag	#store new tags	popl	%edi			call	stfpsp			movl	$h_ctrl,%esi		movsl				movsl				movsl				movl	s_iptr,%eax	#instruction pointer	stosl				orl	%eax,%eax		jz	stp5			movw	%cs,%ax		stp5:	stosl				movl	s_memp,%eax	#operand pointer	stosl				orl	%eax,%eax		jz	stp7			movw	%es,%ax		stp7:	stosl				popl	%es			cmpb	$0x2e,%dl		jnz	sts9			movl	$8,%ecx			movl	s_fpsp,%eax	sts2:	addl	$s_stk,%eax		movl	(%eax),%esi		movl	4(%eax),%edx		movl	8(%eax),%ebx		subl	$s_stk,%eax		movl	%esi,(%edi)		movl	%edx,4(%edi)		addl	%ebx,%ebx		rcrw	$1,%bx			movw	%bx,8(%edi)		addl	$10,%edi		addb	$32,%al			loop	sts2		finit_:				#initialize hardware block	xorl	%eax,%eax		movl	$0x037f,h_ctrl		movl	%eax,h_stat		movl	$0xffff,h_tag		movl	%eax,s_iptr		movl	%eax,s_memp		movl	$s_stk,%eax		movl	$0,s_fpsp		movl	$8,%ecx		fin4:	movb	$3,10(%eax)		addl	$32,%eax		loop	fin4		sts9:	ret				.globl	fstsw_fstsw_:				#fetch HW status word	movl	%eax,%edi		call	stfpsp			movw	h_stat,%ax		stosw				ret			ffree_:				#change tag to empty	#SAVEIN	movl	%esi,s_iptr		#STIX    ebx	movl	s_fpsp,%eax		shll	$5,%ebx			addb	%bl,%al			addl	$s_stk,%eax		xchgl	%edi,%eax		movb	$3,10(%edi)		ret			fsts:				#ST(i) = ST 	#SAVEIN	movl	%esi,s_iptr		#GETEPX  ebx	movl	s_fpsp,%eax		addl	$s_stk,%eax		movl	(%eax),%edi		movl	4(%eax),%edx		movl	8(%eax),%ecx		subl	$s_stk,%eax		shll	$5,%ebx			addb	%bl,%al			addl	$s_stk,%eax		xchgl	%edi,%eax		#PUTEP   	movl	%eax,(%edi)		movl	%edx,4(%edi)		movl	%ecx,8(%edi)		ret			faddpx:				#ST(i) = ST + ST(i) and pop	#SAVEIN	movl	%esi,s_iptr		#GETEPX  ebx	movl	s_fpsp,%eax		addl	$s_stk,%eax		movl	(%eax),%edi		movl	4(%eax),%edx		movl	8(%eax),%ecx		subl	$s_stk,%eax		shll	$5,%ebx			addb	%bl,%al			addl	$s_stk,%eax		xchgl	%edi,%eax		call	epadd			call	rounde			#STPOP	movl	s_fpsp,%eax		addl	$s_stk,%eax		movb	$3,10(%eax)		addb	$32,s_fpsp		ret			fmulpx:				#ST(i) = ST * ST(i) and pop	#SAVEIN	movl	%esi,s_iptr		#GETEPX  ebx	movl	s_fpsp,%eax		addl	$s_stk,%eax		movl	(%eax),%edi		movl	4(%eax),%edx		movl	8(%eax),%ecx		subl	$s_stk,%eax		shll	$5,%ebx			addb	%bl,%al			addl	$s_stk,%eax		xchgl	%edi,%eax		call	epmul			call	rounde			#STPOP	movl	s_fpsp,%eax		addl	$s_stk,%eax		movb	$3,10(%eax)		addb	$32,s_fpsp		ret			fcompps:			#ST - ST(1) -> codes, pop twice	#SAVEIN	movl	%esi,s_iptr		#STIX1q	movl	s_fpsp,%eax		addb	$32,%al			addl	$s_stk,%eax		xchgl	%edi,%eax		#GETEP   	movl	(%edi),%eax		movl	4(%edi),%edx		movl	8(%edi),%ecx		#STTOP   	movl	s_fpsp,%edi		addl	$s_stk,%edi		call	epcomp			movl	%edi,%eax		movb	$3,10(%eax)		subl	$s_stk,%eax		addb	$32,%al			addl	$s_stk,%eax		movb	$3,10(%eax)		addb	$64,s_fpsp		ret			fsubpx:				#ST(i) = ST - ST(i) and pop	#SAVEIN	movl	%esi,s_iptr		#GETEPX  ebx	movl	s_fpsp,%eax		addl	$s_stk,%eax		movl	(%eax),%edi		movl	4(%eax),%edx		movl	8(%eax),%ecx		subl	$s_stk,%eax		shll	$5,%ebx			addb	%bl,%al			addl	$s_stk,%eax		xchgl	%edi,%eax		call	epsub			call	rounde			#STPOP	movl	s_fpsp,%eax		addl	$s_stk,%eax		movb	$3,10(%eax)		addb	$32,s_fpsp		ret			fsubrpx:			#ST(i) = ST(i) - ST and pop	#SAVEIN	movl	%esi,s_iptr		#GETEPX  ebx	movl	s_fpsp,%eax		addl	$s_stk,%eax		movl	(%eax),%edi		movl	4(%eax),%edx		movl	8(%eax),%ecx		subl	$s_stk,%eax		shll	$5,%ebx			addb	%bl,%al			addl	$s_stk,%eax		xchgl	%edi,%eax		call	epsubr			call	rounde			#STPOP	movl	s_fpsp,%eax		addl	$s_stk,%eax		movb	$3,10(%eax)		addb	$32,s_fpsp		ret			fdivpx:				#ST(i) = ST/ST(i) and pop	#SAVEIN	movl	%esi,s_iptr		#GETEPX  ebx	movl	s_fpsp,%eax		addl	$s_stk,%eax		movl	(%eax),%edi		movl	4(%eax),%edx		movl	8(%eax),%ecx		subl	$s_stk,%eax		shll	$5,%ebx			addb	%bl,%al			addl	$s_stk,%eax		xchgl	%edi,%eax		call	epdivr			call	rounde			#STPOP	movl	s_fpsp,%eax		addl	$s_stk,%eax		movb	$3,10(%eax)		addb	$32,s_fpsp		ret			fdivrpx:			#ST(i) = ST(i)/ST and pop	#SAVEIN	movl	%esi,s_iptr		#GETEPX  ebx	movl	s_fpsp,%eax		addl	$s_stk,%eax		movl	(%eax),%edi		movl	4(%eax),%edx		movl	8(%eax),%ecx		subl	$s_stk,%eax		shll	$5,%ebx			addb	%bl,%al			addl	$s_stk,%eax		xchgl	%edi,%eax		call	epdiv			call	rounde			#STPOP	movl	s_fpsp,%eax		addl	$s_stk,%eax		movb	$3,10(%eax)		addb	$32,s_fpsp		ret			fistw:				#fetch 16-bit integer	#SAVEIX	movl	%eax,s_memp		xchgl	%esi,%eax		movl	%eax,s_iptr		#STTOP   	movl	s_fpsp,%edi		addl	$s_stk,%edi		#GETEP   	movl	(%edi),%eax		movl	4(%edi),%edx		movl	8(%edi),%ecx		call	eptowi			movw	%ax,(%esi)		ret			fistpw:				#fetch 16-bit integer, pop	#SAVEIX	movl	%eax,s_memp		xchgl	%esi,%eax		movl	%eax,s_iptr		#STTOP   	movl	s_fpsp,%edi		addl	$s_stk,%edi		#GETEP   	movl	(%edi),%eax		movl	4(%edi),%edx		movl	8(%edi),%ecx		call	eptowi			movw	%ax,(%esi)		#STPOPq	movb	$3,10(%edi)		addb	$32,s_fpsp		ret			fbldp:				#push 10-byte packed-decimal integer	#SAVEII	movl	%esi,s_iptr		movl	%eax,s_memp		andb	$0x0fd,h_stat+1		call	pdtoep			#STPUSHP	movl	s_fpsp,%ebx		subb	$32,%bl			cmpb	$3,s_stk+10(%ebx)		jnz	stackof			movl	%ebx,s_fpsp		addl	$s_stk,%ebx		movl	%eax,(%ebx)		movl	%edx,4(%ebx)		movl	%ecx,8(%ebx)		ret			fildl:				#push 64-bit integer	andb	$0x0fd,h_stat+1		call	litoep			#STPUSHP	movl	s_fpsp,%ebx		subb	$32,%bl			cmpb	$3,s_stk+10(%ebx)		jnz	stackof			movl	%ebx,s_fpsp		addl	$s_stk,%ebx		movl	%eax,(%ebx)		movl	%edx,4(%ebx)		movl	%ecx,8(%ebx)		ret			fbstpp:				#pop into 10-byte packed-decimal integer	#SAVEII	movl	%esi,s_iptr		movl	%eax,s_memp		#STTOP   	movl	s_fpsp,%edi		addl	$s_stk,%edi		#GETEP   	movl	(%edi),%eax		movl	4(%edi),%edx		movl	8(%edi),%ecx		movl	s_memp,%edi		call	eptopd			#STPOP	movl	s_fpsp,%eax		addl	$s_stk,%eax		movb	$3,10(%eax)		addb	$32,s_fpsp		ret			fistpl:				#pop into 64-bit integer	#SAVEIX	movl	%eax,s_memp		xchgl	%esi,%eax		movl	%eax,s_iptr		#STTOP   	movl	s_fpsp,%edi		addl	$s_stk,%edi		#GETEP   	movl	(%edi),%eax		movl	4(%edi),%edx		movl	8(%edi),%ecx		call	eptoli			movl	%eax,(%esi)		movl	%edx,4(%esi)		#STPOPq	movb	$3,10(%edi)		addb	$32,s_fpsp		ret			fstswax_:			#status word -> ax	call	stfpsp			movw	h_stat,%ax		movw	%ax,s_ax(%ebp)		ret			fsincos_:			#make ST into sin(ST), push cos(ST)	#STTOP   	movl	s_fpsp,%edi		addl	$s_stk,%edi		#GETEP   	movl	(%edi),%eax		movl	4(%edi),%edx		movl	8(%edi),%ecx		call	reduct			pushl	%edi			#STPUSH	xchgl	%edi,%ebx		movl	s_fpsp,%ebx		subb	$32,%bl			xchgl	%edi,%ebx		cmpb	$3,s_stk+10(%edi)		jz	LL2			call	stackof		LL2:	movl	%edi,s_fpsp		addl	$s_stk,%edi		#PUTEP   	movl	%eax,(%edi)		movl	%edx,4(%edi)		movl	%ecx,8(%edi)		popl	%edi			testl	$0x30000,%ecx		jnz	sco11			pushl	%ebx			call	epsin			popl	%ebx			#PUTEP   	movl	%eax,(%edi)		movl	%edx,4(%edi)		movl	%ecx,8(%edi)		#STTOP   	movl	s_fpsp,%edi		addl	$s_stk,%edi		#GETEP   	movl	(%edi),%eax		movl	4(%edi),%edx		movl	8(%edi),%ecx		call	epcos		sco9:	#PUTEP   	movl	%eax,(%edi)		movl	%edx,4(%edi)		movl	%ecx,8(%edi)		ret			sco11:	testl	$0x50000,%ecx		jz	sco9			#PUTEP	movl	%eax,(%edi)		movl	%edx,4(%edi)		movl	%ecx,8(%edi)		movl	$0x3fff,%ecx		movl	$0x80000000,%edx		xorl	%eax,%eax		#STTOP	movl	s_fpsp,%edi		addl	$s_stk,%edi		jmp	sco9		fsin_:				#make ST into sin(ST)	#STTOP   	movl	s_fpsp,%edi		addl	$s_stk,%edi		#GETEP   	movl	(%edi),%eax		movl	4(%edi),%edx		movl	8(%edi),%ecx		call	reduct			testl	$0x30000,%ecx		jnz	sin9			call	epsin		sin9:	#PUTEP   	movl	%eax,(%edi)		movl	%edx,4(%edi)		movl	%ecx,8(%edi)		ret			fcos_:				#make ST into cos(ST)	#STTOP   	movl	s_fpsp,%edi		addl	$s_stk,%edi		#GETEP   	movl	(%edi),%eax		movl	4(%edi),%edx		movl	8(%edi),%ecx		call	reduct			testl	$0x30000,%ecx		jnz	cos11			call	epcos		cos9:	#PUTEP   	movl	%eax,(%edi)		movl	%edx,4(%edi)		movl	%ecx,8(%edi)		ret			cos11:	testl	$0x50000,%ecx		jz	cos9			movl	$0x3fff,%ecx		movl	$0x80000000,%edx		xorl	%eax,%eax		jmp	cos9		NONE_:					#SAVEIN	movl	%esi,s_iptr		ret			# stack overflow handlerstackof:				orw	$stacko,h_stat	#stack overflow	call	exproc			orb	$2,h_stat+1		movl	$0x80027fff,%ecx		movl	$0xc0000000,%edx		xorl	%eax,%eax		subb	$32,s_fpsp		movl	s_fpsp,%ebx		addl	$s_stk,%ebx		movl	%eax,(%ebx)		movl	%edx,4(%ebx)		movl	%ecx,8(%ebx)		ret			# store floating-point stack pointer into the status wordstfpsp:					movb	s_fpsp,%al		shrb	$2,%al			movb	h_stat+1,%ah		andb	$0x0c7,%ah		orb	%ah,%al			movb	%al,h_stat+1		ret			#intrn   endp#emuseg  ends#        END

⌨️ 快捷键说明

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