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

📄 stdfunc.asm

📁 Turbo Pascal 6.0编译器源码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	mov	[di].exMisc,lvAX
	jmp	short @@5
@@1:	Invoke	CheckProgLoaded
	les	bx,dword ptr [di].exValue
	mov	bx,es:[bx]
	mov	es,DataSegment.Segm
	mov	ax,es:[bx]
	jmp	short @@4
@@2:	push	di
	Invoke	GetTypeName
	mov	bx,di
	pop	di
@@3:	mov	ax,es:[bx].tdSizeOf
@@4:	xor	dx,dx
	mov	[di].exCode,dx
	mov	[di].exLocation,elImmediate
	mov	[di].exRegsUsed,dl
	Invoke	SetValue
@@5:	Invoke	NeedCParen
	Chain	CastLongint
_SizeOf	endp

_TypeOf	proc	near
	Invoke	NeedOParen
	Invoke	GetSymbol
	cmp	CurrentToken,t_Type
	je	@@2
	Invoke	GetReference
	les	bx,[di].exType
	call	Check
	mov	ax,es:[bx].otVMTOffset
	add	[di].exOffset,ax
	test	CompilerFlags.B0,cfDebugging
	jnz	@@1
	Invoke	UseExpr
	mov	[di].exModifier,emWord
	mov	al,lvAX
	Invoke	LoadValue
	mov	ax,0da8ch		; mov	dx,ds
	Invoke	PutWord
	Invoke	DoneExpr
	mov	[di].exLocation,elRegister
	mov	[di].exModifier,emLongint
	or	[di].exRegsUsed,erAX+erDX
	mov	[di].exMisc,lvAX
	jmp	short @@5
@@1:	Invoke	CheckProgLoaded
	les	bx,dword ptr [di].exValue
	mov	ax,es:[bx]
	jmp	short @@4
@@2:	push	di
	Invoke	GetTypeName
	mov	bx,di
	pop	di
	call	Check
	test	CompilerFlags.B0,cfDebugging
	jnz	@@3
	xor	ax,ax
	mov	cx,es:[bx].otVMTAddr
	mov	[di].exCode,ax
	mov	[di].exRegsUsed,al
	mov	[di].exLocation,elAddress
	mov	[di].exModifier,emLongint
	mov	[di].exMisc,efDS+efConst
	mov	[di].exOffset,ax
	mov	[di].exMap,cx
	mov	[di].exSegment,es
	jmp	short @@5
@@3:	Invoke	CheckProgLoaded
	mov	bx,es:[bx].otVMTAddr
	add	bx,es:uhConstMap
	mov	ax,es:[bx]
	cmp	ax,-1
	je	@@6
@@4:	mov	dx,DataSegment.Segm
	mov	[di].exCode,0
	mov	[di].exLocation,elImmediate
	mov	[di].exRegsUsed,0
	Invoke	SetValue
@@5:	Invoke	NeedCParen
	Chain	CastPointer

Check	proc	near
	cmp	es:[bx].tdType,ttObject
	jne	@@1
	cmp	es:[bx].otVMTSize,0
	je	@@1
	ret
@@1:	mov	ax,147
	Chain	CompileError
Check	endp

@@6:	mov	ax,139
	Chain	CompileError
_TypeOf	endp

_Sqrt	proc	near
	push	ax
	Invoke	GetNumParam
	pop	si
ZZT	label	near
	test	CompilerOptions,co8087
	jz	@@1
	push	cs:[si]
	Invoke	ConvInt2Ext
	Invoke	ConvReal2Ext
	Invoke	PushExt
	Invoke	UseExpr
	jmp	short @@2
@@1:	push	cs:[si+2]
	Invoke	ConvInt2Real
	Invoke	ConvExt2Real
	Invoke	UseExpr
	mov	al,lrR1
	Invoke	LoadReal
@@2:	pop	ax
	Invoke	PutSystemCall
	Invoke	DoneExpr
	mov	[di].exRegsUsed,erAll
	ret
_Sqrt	endp

_Trunc	proc	near
	push	ax
	Invoke	GetNumParam
	Invoke	GetVarValue
	pop	si
	cmp	[di].exLocation,elImmediate
	jne	@@2
	Invoke	ConvInt2Ext
	xor	ax,ax
	cmp	si,offset TruncTb
	je	@@1
	inc	ax
@@1:	lea	bx,[di].exValue
	Invoke	TruncExtended
	mov	ax,[bx].W0
	mov	dx,[bx].W2
	Invoke	SetValue
	Chain	CastLongint
@@2:	call	ZZT
	mov	[di].exLocation,elRegister
	mov	[di].exModifier,emLongint
	mov	[di].exMisc,lvAX
	Chain	CastLongint
_Trunc	endp

_Pi	proc	near
	mov	[di].exCode,0
	mov	[di].exLocation,elImmediate
	mov	[di].exModifier,emExtended
	mov	[di].exRegsUsed,0
	mov	[di].exValue.W0,0c235h
	mov	[di].exValue.W2,2168h
	mov	[di].exValue.W4,0daa2h
	mov	[di].exValue.W6,0c90fh
	mov	[di].exValue.W8,4000h
	Chain	CastExtended
_Pi	endp

_Random	proc	near
	Invoke	CheckOParen
	jnz	@@1
	Invoke	GetIntExpr
	Invoke	NeedCParen
	Invoke	CastWord
	Invoke	PushValue
	Invoke	UseExpr
	mov	ax,_RandInt
	Invoke	PutSystemCall
	Invoke	DoneExpr
	mov	[di].exLocation,elRegister
	mov	[di].exModifier,emWord
	mov	[di].exRegsUsed,erAll
	mov	[di].exMisc,lvAX
	Chain	CastLongint
@@1:	test	CompilerOptions,co8087
	jnz	@@2
	mov	ax,_RandReal
	Invoke	PutSystemCall
	Invoke	DoneExpr
	mov	[di].exLocation,elRegister
	mov	[di].exModifier,emReal
	mov	[di].exRegsUsed,erAll
	Chain	CastReal
@@2:	mov	ax,_RandFloat+fnNeed8087
	Invoke	PutSystemCall
	Invoke	DoneExpr
	mov	[di].exLocation,elStack
	mov	[di].exModifier,emExtended
	mov	[di].exRegsUsed,erAll
	Chain	CastExtended
_Random	endp

_NewFunc	proc	near
	Invoke	NeedOParen
	push	di
	Invoke	GetTypeName
	mov	bx,di
	pop	di
	cmp	es:[bx].tdType,ttPointer
	jne	@@1
	Invoke	_New
	Chain	NeedCParen
@@1:	mov	ax,33
	Chain	CompileError
_NewFunc	endp

_MemAvail	proc	near
	xchg	ax,si
	test	CompilerFlags.B0,cfDebugging
	jnz	@@1
	mov	ax,cs:[si]
	Invoke	PutSystemCall
	Invoke	DoneExpr
	mov	[di].exLocation,elRegister
	mov	[di].exModifier,emLongint
	mov	[di].exRegsUsed,erAll
	mov	[di].exMisc,lvAX
	Chain	CastLongint
@@1:	Invoke	CheckProgLoaded
	call	word ptr cs:[si+2]
	mov	[di].exCode,0
	mov	[di].exLocation,elImmediate
	mov	[di].exRegsUsed,0
	Invoke	SetValue
	Chain	CastLongint

MemAvailProc	proc	near
	lea	bx,@@4
	jmp	short Avail
@@1:	add	dx,1000h
	jmp	short @@3
@@2:	add	ax,[si+4]
	jc	@@1
@@3:	add	dx,[si+6]
	lds	si,[si]
@@4:	mov	bx,ds
	cmp	bx,cx
	jne	@@2
	ret
MemAvailProc	endp

MaxAvailProc	proc	near
	lea	bx,@@4
	jmp	short Avail
@@1:	cmp	dx,[si+6]
	ja	@@3
	jb	@@2
	cmp	ax,[si+4]
	jae	@@3
@@2:	mov	ax,[si+4]
	mov	dx,[si+6]
@@3:	lds	si,[si]
@@4:	mov	bx,ds
	cmp	bx,cx
	jne	@@1
	ret
MaxAvailProc	endp

Avail	proc	near
	push	ds
	lds	si,DataSegment
	mov	ax,[si]._HeapEnd.Offs
	mov	dx,[si]._HeapEnd.Segm
	sub	ax,[si]._HeapPtr.Offs
	sbb	dx,[si]._HeapPtr.Segm
	and	ax,0fh
	mov	cx,[si]._HeapPtr.Segm
	lds	si,[si]._FreeList
	call	bx
	mov	cl,4
	rol	dx,cl
	mov	cx,dx
	and	cl,0f0h
	and	dx,0fh
	add	ax,cx
	adc	dx,0
	pop	ds
	ret
Avail	endp

_MemAvail	endp

_Length	proc	near
	Invoke	NeedOParen
	Invoke	GetStringExpr
	Invoke	NeedCParen
	Invoke	MarkReadOnly
	Chain	StringLength
_Length	endp

_Pos	proc	near
	Loc	S,byte,<size TExpr>
	Entry
	Invoke	NeedOParen
	Invoke	PushStringExpr
	push	di
	Invoke	NeedComma
	lea	di,S
	Invoke	PushStringExpr
	Invoke	NeedCParen
	pop	di
	Invoke	UseExpr
	mov	ax,S.exCode
	Invoke	UseGoal
	mov	ax,_SPos
	Invoke	PutSystemCall
	Invoke	DoneExpr
	mov	[di].exLocation,elRegister
	mov	[di].exModifier,emInteger
	mov	[di].exRegsUsed,erAll
	mov	[di].exMisc,lvAX
	Invoke	CastLongint
	Exit
_Pos	endp

_Copy	proc	near
	Loc	Index,byte,<size TExpr>
	Loc	Count,byte,<size TExpr>
	Entry
	Invoke	NeedOParen
	Invoke	PushStringExpr
	push	di
	Invoke	NeedComma
	lea	di,Index
	Invoke	GetIntExpr
	Invoke	CastInt
	Invoke	PushValue
	Invoke	NeedComma
	lea	di,Count
	Invoke	GetIntExpr
	Invoke	CastInt
	Invoke	PushValue
	Invoke	NeedCParen
	pop	di
	mov	ax,256
	Invoke	CreateLocalVar
	Invoke	UseExpr
	mov	ax,Index.exCode
	Invoke	UseGoal
	mov	ax,Count.exCode
	Invoke	UseGoal
	mov	ax,_SCopy
	Invoke	PutSystemCall
	Invoke	DoneExpr
	mov	[di].exRegsUsed,erAll
	Exit
_Copy	endp

_Concat	proc	near
	Loc	S,byte,<size TExpr>
	Entry
	Invoke	NeedOParen
	Invoke	GetStringExpr
	Invoke	LoadString
@@1:	Invoke	CheckComma
	jnz	@@2
	push	di
	lea	di,S
	Invoke	PushStringExpr
	pop	di
	Invoke	UseExpr
	mov	ax,S.exCode
	Invoke	UseGoal
	mov	ax,_SConcat
	Invoke	PutSystemCall
	Invoke	DoneExpr
	mov	[di].exRegsUsed,erAll
	jmp	@@1
@@2:	Invoke	NeedCParen
	Exit
_Concat	endp

_ParamStr	proc	near
	Invoke	GetIntParam
	Invoke	CastInt
	Invoke	PushValue
	mov	ax,256
	Invoke	CreateLocalVar
	Invoke	UseExpr
	mov	ax,_GetParStr
	Invoke	PutSystemCall
	Invoke	DoneExpr
	mov	[di].exRegsUsed,erAll
	Chain	CastString
_ParamStr	endp

_ParamCount	proc	near
	Invoke	PutSystemCall
	Invoke	DoneExpr
	mov	[di].exLocation,elRegister
	mov	[di].exModifier,emInteger
	mov	[di].exRegsUsed,erAll
	mov	[di].exMisc,lvAX
	Chain	CastLongint
_ParamCount	endp

_IOResult	proc	near
	test	CompilerFlags.B0,cfDebugging
	jnz	@@1
	call	_ParamCount
	mov	[di].exRegsUsed,erAX
	ret
@@1:	Invoke	CheckProgLoaded
	les	bx,DataSegment
	mov	ax,es:[bx]._InOutRes
	cwd
	mov	[di].exCode,0
	mov	[di].exLocation,elImmediate
	mov	[di].exRegsUsed,0
	Invoke	SetValue
	Chain	CastLongint
_IOResult	endp

_Eof	proc	near
	push	ax
	Invoke	CheckOParen
	jz	@@1
	xor	ax,ax
	mov	dx,_Input
	Invoke	DefaultFile
	jmp	short @@3
@@1:	Invoke	PushFileRef
	cmp	es:[bx].tdType,ttText
	je	@@2
	pop	ax
	cmp	ax,_GetTEof
	jne	@@4
	mov	ax,_GetFEof
	push	ax
@@2:	Invoke	NeedCParen
	Invoke	UseExpr
@@3:	pop	ax
	Invoke	PutSystemCall
	Invoke	CheckIOResult
	Invoke	DoneExpr
	mov	[di].exLocation,elRegister
	mov	[di].exModifier,emBoolean
	mov	[di].exRegsUsed,erAll
	mov	[di].exMisc,lvAX
	Chain	CastBoolean
@@4:	mov	ax,63
	Chain	CompileError
_Eof	endp

_FilePos	proc	near
	push	ax
	Invoke	NeedOParen
	Invoke	PushFileRef
	cmp	es:[bx].tdType,ttFile
	jne	@@1
	Invoke	NeedCParen
	Invoke	UseExpr
	pop	ax
	Invoke	PutSystemCall
	Invoke	CheckIOResult
	Invoke	DoneExpr
	mov	[di].exLocation,elRegister
	mov	[di].exModifier,emLongint
	mov	[di].exRegsUsed,erAll
	mov	[di].exMisc,lvAX
	Chain	CastLongint
@@1:	mov	ax,63
	Chain	CompileError
_FilePos	endp

	end

⌨️ 快捷键说明

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