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

📄 stdproc.asm

📁 Turbo Pascal 6.0编译器源码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	Invoke	PushStringExpr
	Invoke	NeedCParen
	Invoke	UseExpr
	pop	ax
	Invoke	PutSystemCall
	Invoke	CheckIOResult
	Invoke	DoneGoal
	Exit
_ChDir	endp

_Assign	proc	near
	Loc	F,byte,<size TExpr>
	Loc	S,byte,<size TExpr>
	Entry
	Invoke	NeedOParen
	lea	di,F
	Invoke	PushFileRef
	Invoke	NeedComma
	lea	di,S
	Invoke	PushStringExpr
	Invoke	NeedCParen
	mov	ax,F.exCode
	Invoke	UseGoal
	mov	ax,S.exCode
	Invoke	UseGoal
	mov	ax,_AssignFile
	les	bx,F.exType
	cmp	es:[bx].tdType,ttFile
	je	@@1
	mov	ax,_AssignText
@@1:	Invoke	PutSystemCall
	Invoke	DoneGoal
	Exit
_Assign	endp

_SetTextBuf	proc	near
	Loc	F,byte,<size TExpr>
	Loc	Buf,byte,<size TExpr>
	Loc	_Size,byte,<size TExpr>
	Entry
	Invoke	NeedOParen
	lea	di,F
	Invoke	PushFileRef
	cmp	es:[bx].tdType,ttText
	jne	@@3
	Invoke	NeedComma
	lea	di,Buf
	Invoke	PushReference
	lea	di,_Size
	Invoke	CheckComma
	jnz	@@1
	Invoke	GetIntExpr
	Invoke	CastWord
	Invoke	PushValue
	jmp	short @@2
@@1:	mov	ax,es:[bx].tdSizeOf
	Invoke	PushWord
	Invoke	DoneExpr
@@2:	Invoke	NeedCParen
	mov	ax,F.exCode
	Invoke	UseGoal
	mov	ax,Buf.exCode
	Invoke	UseGoal
	mov	ax,_Size.exCode
	Invoke	UseGoal
	mov	ax,_BufferText
	Invoke	PutSystemCall
	Invoke	CheckIOResult
	Invoke	DoneGoal
	Exit
@@3:	mov	ax,63
	Chain	CompileError
_SetTextBuf	endp

_Reset	proc	near
	Loc	F,byte,<size TExpr>
	Loc	Recsize,byte,<size TExpr>
	Entry
	push	ax
	Invoke	NeedOParen
	lea	di,F
	Invoke	PushFileRef
	lea	di,Recsize
	mov	[di].exCode,0
	cmp	es:[bx].tdType,ttText
	je	@@3
	cmp	es:[bx].ftBase.Offs,0
	jne	@@1
	Invoke	CheckComma
	mov	ax,128
	jnz	@@2
	Invoke	GetIntExpr
	Invoke	CastWord
	Invoke	PushValue
	jmp	short @@3
@@1:	mov	ax,es:[bx].ftBase.Offs
	mov	bx,es:[bx].ftBase.Segm
	mov	es,es:[bx]
	mov	bx,ax
	mov	ax,es:[bx].tdSizeOf
@@2:	Invoke	PushWord
	Invoke	DoneExpr
@@3:	Invoke	NeedCParen
	mov	ax,F.exCode
	Invoke	UseGoal
	mov	ax,Recsize.exCode
	Invoke	UseGoal
	pop	ax
	les	bx,F.exType
	cmp	es:[bx].tdType,ttFile
	je	@@4
	add	ax,_ResetText-_ResetFile
@@4:	Invoke	PutSystemCall
	Invoke	CheckIOResult
	Invoke	DoneGoal
	Exit
_Reset	endp

_Append	proc	near
	Loc	F,byte,<size TExpr>
	Entry
	push	ax
	Invoke	NeedOParen
	lea	di,F
	Invoke	PushFileRef
	cmp	es:[bx].tdType,ttText
	jne	@@1
	Invoke	NeedCParen
	mov	ax,F.exCode
	Invoke	UseGoal
	pop	ax
	Invoke	PutSystemCall
	Invoke	CheckIOResult
	Invoke	DoneGoal
	Exit
@@1:	mov	ax,63
	Chain	CompileError
_Append	endp

_Truncate	proc	near
	Loc	F,byte,<size TExpr>
	Entry
	Invoke	NeedOParen
	lea	di,F
	Invoke	PushFileRef
	cmp	es:[bx].tdType,ttFile
	jne	@@1
	Invoke	NeedCParen
	mov	ax,F.exCode
	Invoke	UseGoal
	mov	ax,_TruncFile
	Invoke	PutSystemCall
	Invoke	CheckIOResult
	Invoke	DoneGoal
	Exit
@@1:	mov	ax,63
	Chain	CompileError
_Truncate	endp

_Close	proc	near
	Loc	F,byte,<size TExpr>
	Entry
	Invoke	NeedOParen
	lea	di,F
	Invoke	PushFileRef
	Invoke	NeedCParen
	mov	ax,F.exCode
	Invoke	UseGoal
	mov	ax,_CloseFile
	les	bx,F.exType
	cmp	es:[bx].tdType,ttFile
	je	@@1
	mov	ax,_CloseText
@@1:	Invoke	PutSystemCall
	Invoke	CheckIOResult
	Invoke	DoneGoal
	Exit
_Close	endp

_Seek	proc	near
	Loc	F,byte,<size TExpr>
	Loc	N,byte,<size TExpr>
	Entry
	Invoke	NeedOParen
	lea	di,F
	Invoke	PushFileRef
	cmp	es:[bx].tdType,ttFile
	jne	@@1
	Invoke	NeedComma
	lea	di,N
	Invoke	GetIntExpr
	Invoke	CastLong
	Invoke	PushValue
	Invoke	NeedCParen
	mov	ax,F.exCode
	Invoke	UseGoal
	mov	ax,N.exCode
	Invoke	UseGoal
	mov	ax,_SeekFile
	Invoke	PutSystemCall
	Invoke	CheckIOResult
	Invoke	DoneGoal
	Exit
@@1:	mov	ax,63
	Chain	CompileError
_Seek	endp

_Erase	proc	near
	Loc	F,byte,<size TExpr>
	Entry
	Invoke	NeedOParen
	lea	di,F
	Invoke	PushFileRef
	Invoke	NeedCParen
	mov	ax,F.exCode
	Invoke	UseGoal
	mov	ax,_EraseFile
	Invoke	PutSystemCall
	Invoke	CheckIOResult
	Invoke	DoneGoal
	Exit
_Erase	endp

_Rename	proc	near
	Loc	F,byte,<size TExpr>
	Loc	Newname,byte,<size TExpr>
	Entry
	Invoke	NeedOParen
	lea	di,F
	Invoke	PushFileRef
	Invoke	NeedComma
	lea	di,Newname
	Invoke	PushStringExpr
	Invoke	NeedCParen
	mov	ax,F.exCode
	Invoke	UseGoal
	mov	ax,Newname.exCode
	Invoke	UseGoal
	mov	ax,_RenameFile
	Invoke	PutSystemCall
	Invoke	CheckIOResult
	Invoke	DoneGoal
	Exit
_Rename	endp

_BlockRead	proc	near
	Loc	F,byte,<size TExpr>
	Loc	Buf,byte,<size TExpr>
	Loc	Count,byte,<size TExpr>
	Loc	Result,byte,<size TExpr>
	Entry
	push	ax
	Invoke	NeedOParen
	lea	di,F
	Invoke	PushFileRef
	cmp	es:[bx].tdType,ttFile
	jne	@@3
	cmp	es:[bx].ftBase.Offs,0
	jne	@@3
	Invoke	NeedComma
	lea	di,Buf
	Invoke	PushReference
	Invoke	NeedComma
	lea	di,Count
	Invoke	GetIntExpr
	Invoke	CastWord
	Invoke	PushValue
	lea	di,Result
	Invoke	CheckComma
	jz	@@1
	mov	ax,0c031h    		; xor	ax,ax
	Invoke	PutWord
	mov	ax,5050h		; push	ax	push	ax
	Invoke	PutWord
	Invoke	DoneExpr
	jmp	short @@2
@@1:	Invoke	PushIntRef
@@2:	Invoke	NeedCParen
	mov	ax,F.exCode
	Invoke	UseGoal
	mov	ax,Buf.exCode
	Invoke	UseGoal
	mov	ax,Count.exCode
	Invoke	UseGoal
	mov	ax,Result.exCode
	Invoke	UseGoal
	pop	ax
	Invoke	PutSystemCall
	Invoke	CheckIOResult
	Invoke	DoneGoal
	Exit
@@3:	mov	ax,63
	Chain	CompileError
_BlockRead	endp

_Write	proc	near
	Loc	StoredCall,word,1
	Loc	File,word,1
	Loc	Value,byte,<size TExpr>
	Loc	_Width,byte,<size TExpr>
	Loc	Decimals,byte,<size TExpr>
	Loc	Buffer,word,64
	Entry
	mov	StoredCall,ax
	mov	File,0
	mov	Buffer[0],0
	Invoke	CheckOParen
	jz	@@1
	jmp	@@16
@@1:	lea	di,Value
	Invoke	GetExpr
	les	bx,[di].exType
	cmp	es:[bx].tdType,ttFile
	je	@@2
	cmp	es:[bx].tdType,ttText
	jne	@@5
@@2:	Invoke	PushAddr
	mov	ax,[di].exCode
	les	bx,[di].exType
	cmp	es:[bx].tdType,ttFile
	je	@@3
	mov	File,ax
	jmp	@@14
@@3:	mov	cx,StoredCall
	mov	dx,_WriteFile
	Invoke	RWTypedFile
	jmp	@@17
@@4:	lea	di,Value
	Invoke	GetExpr
@@5:	Invoke	LoadPackedChar
	mov	Decimals.exCode,0
	les	bx,[di].exType
	mov	al,es:[bx].tdType
	cmp	al,ttString
	jne	@@6
	Invoke	PutImmedString
	Invoke	PushAddr
	lea	di,_Width
	xor	ax,ax
	Invoke	FormatModifier
	mov	ax,_WriteStr
	jmp	@@13
@@6:	cmp	al,tt8087
	je	@@7
	cmp	al,ttReal
	jne	@@9
@@7:	test	CompilerOptions,co8087
	jz	@@8
	Invoke	ConvReal2Ext
	Invoke	PushExt
	lea	di,_Width
	mov	ax,23
	Invoke	FormatModifier
	lea	di,Decimals
	mov	ax,-1
	Invoke	FormatModifier
	mov	ax,_WriteFloat+fnNeed8087
	jmp	short @@13
@@8:	Invoke	ConvExt2Real
	Invoke	PushReal
	lea	di,_Width
	mov	ax,17
	Invoke	FormatModifier
	lea	di,Decimals
	mov	ax,-1
	Invoke	FormatModifier
	mov	ax,_WriteReal
	jmp	short @@13
@@9:	cmp	al,ttInteger
	jne	@@10
	Invoke	CastLong
	Invoke	PushValue
	lea	di,_Width
	xor	ax,ax
	Invoke	FormatModifier
	mov	ax,_WriteInt
	jmp	short @@13
@@10:	cmp	al,ttBoolean
	jne	@@11
	Invoke	PushValue
	lea	di,_Width
	xor	ax,ax
	Invoke	FormatModifier
	mov	ax,_WriteBool
	jmp	short @@13
@@11:	cmp	al,ttChar
	jne	@@12
	Invoke	PushValue
	lea	di,_Width
	xor	ax,ax
	Invoke	FormatModifier
	mov	ax,_WriteChar
	jmp	short @@13
@@12:	mov	ax,64
	Chain	CompileError
@@13:	push	ax
	mov	ax,Value.exCode
	Invoke	UseGoal
	mov	ax,_Width.exCode
	Invoke	UseGoal
	mov	ax,Decimals.exCode
	Invoke	UseGoal
	pop	ax
	Invoke	PutSystemCall
	Invoke	DoneGoal
	lea	bx,Buffer
	Invoke	AddGoal
@@14:	Invoke	CheckComma
	jnz	@@15
	jmp	@@4
@@15:	Invoke	NeedCParen
@@16:	mov	ax,File
	mov	dx,_Output
	Invoke	DefaultFile
	lea	bx,Buffer
	Invoke	FlushGoals
	mov	ax,StoredCall
	Invoke	PutSystemCall
	Invoke	CheckIOResult
	Invoke	DoneGoal
@@17:	Exit
_Write	endp

_Read	proc	near
	Loc	StoredCall,word,1
	Loc	File,word,1
	Loc	Value,byte,<size TExpr>
	Loc	Result,byte,<size TExpr>
	Loc	Buffer,word,64
	Entry
	mov	StoredCall,ax
	mov	File,0
	mov	Buffer[0],0
	Invoke	CheckOParen
	jz	@@1
	jmp	@@15
@@1:	lea	di,Value
	Invoke	GetReference
	les	bx,[di].exType
	cmp	es:[bx].tdType,ttFile
	je	@@2
	cmp	es:[bx].tdType,ttText
	jne	@@5
@@2:	Invoke	PushAddr
	mov	ax,[di].exCode
	les	bx,[di].exType
	cmp	es:[bx].tdType,ttFile
	je	@@3
	mov	File,ax
	jmp	@@13
@@3:	mov	cx,StoredCall
	mov	dx,_ReadFile
	Invoke	RWTypedFile
	jmp	@@16
@@4:	lea	di,Value
	Invoke	GetReference
@@5:	Invoke	CastReal2Ext
	cmp	al,ttString
	jne	@@6
	Invoke	PushAddr
	Invoke	UseExpr
	les	bx,[di].exType
	mov	ax,es:[bx].tdSizeOf
	dec	ax
	Invoke	PushWord
	mov	ax,_ReadStr
	Invoke	PutSystemCall
	Invoke	DoneGoal
	jmp	@@12
@@6:	lea	di,Result
	cmp	al,tt8087
	jne	@@7
	mov	[di].exType.Offs,_Extended
	mov	[di].exLocation,elStack
	mov	[di].exModifier,emExtended
	mov	ax,_ReadFloat+fnNeed8087
	jmp	short @@11
@@7:	cmp	al,ttReal
	jne	@@8
	mov	[di].exType.Offs,_Real
	mov	[di].exLocation,elRegister
	mov	[di].exModifier,emReal
	mov	ax,_ReadReal
	jmp	short @@11
@@8:	cmp	al,ttInteger
	jne	@@9
	mov	[di].exType.Offs,_Longint
	mov	[di].exLocation,elRegister
	mov	[di].exModifier,emLongint
	mov	[di].exMisc,lvAX
	mov	ax,_ReadInt
	jmp	short @@11
@@9:	cmp	al,ttChar
	jne	@@10
	mov	[di].exType.Offs,_Char
	mov	[di].exLocation,elRegister
	mov	[di].exModifier,emByte
	mov	[di].exMisc,lvAX
	mov	ax,_ReadChar
	jmp	short @@11
@@10:	mov	ax,64
	Chain	CompileError
@@11:	Invoke	PutSystemCall
	Invoke	DoneExpr
	mov	ax,SystemUnit
	mov	[di].exType.Segm,ax
	mov	[di].exRegsUsed,erAll
	lea	si,Value
	Invoke	AssignmentCast
	Invoke	CastOrdinal
	xchg	si,di
	Invoke	Store
	mov	ax,[di].exCode
@@12:	lea	bx,Buffer
	Invoke	AddGoal
@@13:	Invoke	CheckComma
	jnz	@@14
	jmp	@@4
@@14:	Invoke	NeedCParen
@@15:	mov	ax,File
	mov	dx,_Input
	Invoke	DefaultFile
	lea	bx,Buffer
	Invoke	FlushGoals
	mov	ax,StoredCall
	Invoke	PutSystemCall
	Invoke	CheckIOResult
	Invoke	DoneGoal
@@16:	Exit
_Read	endp

RWTypedFile	proc	near
	Loc	File,word,1
	Loc	RWProc,word,1
	Loc	BaseType,dword,1
	Loc	Value,byte,<size TExpr>
	Loc	Buffer,word,64
	Entry
	mov	File,ax
	mov	RWProc,dx
	cmp	cx,_ReadLine
	je	@@2
	cmp	cx,_WriteLine
	je	@@2
	cmp	es:[bx].ftBase.Offs,0
	je	@@2
	mov	ax,es:[bx].ftBase.Offs
	mov	bx,es:[bx].ftBase.Segm
	mov	bx,es:[bx]
	mov	BaseType.Offs,ax
	mov	BaseType.Segm,bx
	mov	Buffer[0],0
	Invoke	NeedComma
@@1:	lea	di,Value
	Invoke	PushReference
	cmp	bx,BaseType.Offs
	jne	@@3
	mov	dx,es
	cmp	dx,BaseType.Segm
	jne	@@3
	Invoke	UseExpr
	mov	ax,RWProc
	Invoke	PutSystemCall
	Invoke	DoneGoal
	lea	bx,Buffer
	Invoke	AddGoal
	Invoke	CheckComma
	jz	@@1
	Invoke	NeedCParen
	mov	ax,File
	Invoke	UseGoal
	lea	bx,Buffer
	Invoke	FlushGoals
	mov	ax,0c483h		; add	sp,4
	Invoke	PutWord
	mov	al,4
	Invoke	PutByte
	Invoke	CheckIOResult
	Invoke	DoneGoal
	Exit
@@2:	mov	ax,63
	Chain	CompileError
@@3:	mov	ax,26
	Chain	CompileError
RWTypedFile	endp

FormatModifier	proc	near
	push	ax
	mov	al,tColon
	Invoke	CheckToken
	pop	ax
	jnz	@@1
	Invoke	GetIntExpr
	Invoke	CastInt
	Chain	PushValue
@@1:	Invoke	PushWord
	Chain	DoneExpr
FormatModifier	endp

	end

⌨️ 快捷键说明

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