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

📄 compile.asm

📁 Turbo Pascal 6.0编译器源码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	add	di,seName
@@3:	mov	es,UsedUnit
	mov	ax,FirstUnit
	xchg	ax,es:uhNext
	mov	UsedUnit,ax
	mov	FirstUnit,es
	dec	CurDepth
	mov	ax,SavedDepth2
	cmp	ax,CurDepth
	jne	@@4
	push	di
	Invoke	RestoreState
	pop	di
@@4:	mov	es,FirstUnit
	or	di,di
	ret
UseUnit	endp

LoadUnit	proc	near
	Loc	SourceTime,dword,1
	Loc	UnitTime,dword,1
	Loc	NameLen,word,1
	Loc	UName,byte,64
	Loc	SourceName,byte,80
	Loc	TpuName,byte,80
	Entry
	lea	si,UName
	Invoke	CopyPasStr
	mov	ax,FirstUnit
	mov	bx,uhNext
	lea	si,UName
	call	SearchUnitName
	jz	@@1
	mov	ax,UsedUnit
	mov	bx,uhNext
	lea	si,UName
	call	SearchUnitName
	jnz	@@2
	mov	di,es:uhName
	mov	bl,es:[di].seName.B0
	mov	bh,0
	cmp	es:[di+size TSymbol+bx].usChecksum,0
	je	@@3
@@1:	jmp	@@15
@@2:	mov	ax,LibraryUnits
	mov	bx,uhLink
	lea	si,UName
	call	SearchUnitName
	jnz	@@6
	mov	ax,FirstUnit
	mov	es:uhNext,ax
	mov	FirstUnit,es
	call	UseUnit
	jnz	@@4
	jmp	@@14
@@3:	mov	ax,68
	jmp	short @@5
@@4:	mov	ax,70
@@5:	lea	di,UName
	push	ds
	pop	es
	Chain	ParamError
@@6:	mov	ax,SavedDepth
	cmp	ax,CurDepth
	je	@@7
	Invoke	SaveState
	or	CompilerFlags.B0,cfUseUnits+cfDisk+cfForceUnit
	mov	ax,CurDepth
	xchg	ax,SavedDepth
	mov	SavedDepth2,ax
@@7:	call	PutHeader
	lea	si,UName
	lea	di,SourceName
	Invoke	DSPas2C
	xor	ax,ax
	mov	dx,ax
	test	CompilerFlags.B0,cfBuild
	jz	@@8
	mov	ax,fePas+fdUnitDir*256
	lea	dx,SourceName
	call	ConvertName
	mov	NameLen,ax
	lea	dx,SourceName
	Invoke	FileTime
	add	ax,1
	adc	dx,0
@@8:	mov	SourceTime.W0,ax
	mov	SourceTime.W2,dx
	or	ax,dx
	jnz	@@10
	lea	si,SourceName
	lea	di,TpuName
	Invoke	CopyDSCStr
	mov	ax,feTpu+feForceExt+(fdOutputDir+fdNoEditor)*256
	lea	dx,TpuName
	call	ConvertName
	lea	dx,TpuName
	Invoke	FileTime
	and	ax,dx
	inc	ax
	jnz	@@9
	lea	si,SourceName
	lea	di,TpuName
	Invoke	CopyDSCStr
	mov	ax,feTpu+feForceExt+fdUnitDir*256
	lea	dx,TpuName
	call	ConvertName
@@9:	lea	dx,TpuName
	call	ReadUnit
	lea	si,UName
	call	MatchName
	call	UseUnit
	mov	al,0
	jz	@@13
	jmp	@@4
@@10:	lea	si,SourceName
	lea	di,TpuName
	Invoke	CopyDSCStr
	mov	ax,feTpu+feForceExt+(fdOutputDir+fdNoEditor)*256
	lea	dx,TpuName
	call	ConvertName
	test	CompilerFlags.B0,cfMake
	jz	@@12
	lea	dx,TpuName
	Invoke	FileTime
	add	ax,1
	adc	dx,0
	mov	UnitTime.W0,ax
	mov	UnitTime.W2,dx
	sub	ax,SourceTime.W0
	sbb	dx,SourceTime.W2
	jc	@@12
	lea	dx,TpuName
	call	ReadUnit
	lea	si,UName
	call	MatchName
	mov	ax,UnitTime.W0
	mov	dx,UnitTime.W2
	call	CheckSources
	jc	@@11
	call	UseUnit
	mov	al,0
	jz	@@13
@@11:	call	ZeroHeader
@@12:	lea	ax,SourceName
	mov	UnitName,ax
	mov	ax,NameLen
	mov	UnitNameLen,ax
	call	CompileFile
	lea	si,UName
	call	MatchName
	mov	al,-1
@@13:	lea	si,TpuName
	Invoke	Add2TpuList
@@14:	mov	es,FirstUnit
	xor	ax,ax
	mov	es:uhOverlayLength,ax
@@15:	Invoke	UpdateCompInfo
	Exit
LoadUnit	endp

ReadUnit	proc	near
	push	dx
	Invoke	OpenHandle
	mov	bx,ax
	mov	es,Dictionary.Segm
	xor	ax,ax
	mov	dx,es
	mov	cx,size TUnitHeader
	push	bx
	push	es:uhNext
	Invoke	ReadHandle
	pop	es:uhNext
	pop	bx dx
	cmp	ax,size TUnitHeader
	jne	@@1
	cmp	es:uhSignature.W0,'PT'
	jne	@@1
	cmp	es:uhSignature.W2,'9U'
	jne	@@1
	mov	ax,es:uhEndTrace
	sub	ax,size TUnitHeader
	mov	cx,ax
	push	bx
	inc	ExactAlloc
	Invoke	GetDictMem
	dec	ExactAlloc
	pop	bx
	mov	ax,di
	mov	dx,es
	push	bx
	Invoke	ReadHandle
	pop	bx
	Chain	CloseHandle
@@1:	mov	ax,72
	Chain	ParamError2
ReadUnit	endp

SearchUnitName	proc	near
@@1:	or	ax,ax
	jz	@@2
	mov	es,ax
	mov	di,es:uhName
	add	di,seName
	mov	cl,[si]
	xor	ch,ch
	inc	cx
	mov	dx,si
	repe	cmpsb
	mov	si,dx
	je	@@3
	mov	ax,es:[bx]
	jmp	@@1
@@2:	dec	ax
@@3:	ret
SearchUnitName	endp

MatchName	proc	near
	mov	es,FirstUnit
	mov	di,es:uhName
	add	di,seName
	mov	cl,[si]
	xor	ch,ch
	inc	cx
	push	si
	repe	cmpsb
	pop	si
	jne	@@1
	ret
@@1:	mov	ax,69
	mov	di,si
	push	ds
	pop	es
	Chain	ParamError
MatchName	endp

CheckSources	proc	near
	Loc	Time,dword,1
	Loc	UName,byte,80
	Entry
	mov	Time.W0,ax
	mov	Time.W2,dx
	mov	es,FirstUnit
	mov	di,es:uhSources
@@1:	mov	bl,es:[di].slName.B0
	mov	bh,0
	lea	di,[di+size TSourceList+bx]
	cmp	di,es:uhTrace
	je	@@3
	push	es di
	add	di,slName
	lea	si,UName
	Invoke	Pas2C
	pop	di es
	mov	ah,es:[di]
	mov	al,0
	lea	dx,UName
	call	ConvertName
	lea	dx,UName
	Invoke	FileTime
	add	ax,1
	adc	dx,0
	cmp	dx,Time.W2
	jb	@@1
	ja	@@2
	cmp	ax,Time.W0
	jbe	@@1
@@2:	stc
@@3:	Exit
CheckSources	endp

CreateFile	proc	near
	mov	si,UnitName
	lea	di,FileNameBuf
	push	ax
	Invoke	CopyDSCStr
	pop	ax
	lea	dx,FileNameBuf
	call	ConvertName
	lea	dx,FileNameBuf
	Invoke	CreateHandle
	mov	FileHandle,ax
	ret
CreateFile	endp

CloseFile	proc	near
	xor	bx,bx
	xchg	bx,FileHandle
	Chain	CloseHandle
CloseFile	endp

ReadObjectFile	proc	near
	mov	al,0
	mov	ah,es:[di]
	push	ax
	add	di,7
	lea	si,FileNameBuf
	Invoke	Pas2C
	pop	ax
	lea	dx,FileNameBuf
	call	ConvertName
	lea	dx,FileNameBuf
	Invoke	OpenHandle
	mov	bx,ax
	push	bx
	call	GetFileSize
	or	dx,dx
	jnz	@@1
	cmp	ax,0fff0h
	ja	@@1
	mov	ObjectFileSize,ax
	Invoke	GetMemOnTop
	mov	ObjectFileSeg,bx
	xor	ax,ax
	mov	dx,bx
	mov	cx,ObjectFileSize
	pop	bx
	push	bx
	Invoke	ReadHandle
	pop	bx
	Chain	CloseHandle
@@1:	mov	ax,45
	lea	dx,FileNameBuf
	Chain	ParamError2
ReadObjectFile	endp

CloseObjectFile	proc	near
	mov	ax,ObjectFileSize
	mov	bx,ObjectFileSeg
	Chain	FreeMemOnTop
CloseObjectFile	endp

BigWrite	proc	near
	push	cx di es
	mov	es,dx
	mov	di,cx
	neg	cx
	and	cx,0fh
	xor	ax,ax
	rep	stosb
	pop	es di cx
	add	cx,0fh
	and	cx,0fff0h
	Chain	WriteHandle
BigWrite	endp

GetFileSize	proc	near
	xor	ax,ax
	xor	dx,dx
	mov	cx,2
	push	bx
	Invoke	SeekHandle
	pop	bx
	push	dx ax
	xor	ax,ax
	xor	dx,dx
	xor	cx,cx
	Invoke	SeekHandle
	pop	ax dx
	ret
GetFileSize	endp

ConvertName	proc	near
	Loc	UName,word,1
	Loc	Temp,byte,224
	Entry
	push	si di es
	mov	UName,dx
	mov	dx,ax
	push	ds
	pop	es
	or	dl,dl
	jz	@@8
	mov	si,UName
@@1:	xor	bx,bx
@@2:	lodsb
	or	al,al
	jz	@@3
	cmp	al,'\'
	je	@@1
	cmp	al,'.'
	jne	@@2
	mov	bx,si
	jmp	@@2
@@3:	or	bx,bx
	jz	@@4
	test	dl,feForceExt
	jz	@@8
	mov	si,bx
@@4:	mov	di,si
	dec	di
	mov	al,'.'
	stosb
	lea	si,Extensions
	and	dl,0fh
@@5:	dec	dl
	jz	@@7
@@6:	lodsb
	or	al,al
	jnz	@@6
	jmp	@@5
@@7:	lodsb
	stosb
	or	al,al
	jnz	@@7
@@8:	mov	bl,dh
	and	bl,0fh
	jnz	@@10
@@9:	xor	dx,dx
	jmp	@@26
@@10:	mov	bh,0
	shl	bx,1
	mov	si,Directories[bx-2]
	cmp	byte ptr [si],0
	je	@@9
	test	dh,fdNoEditor
	jnz	@@17
	mov	dx,UName
	Invoke	FileTime
	and	ax,dx
	inc	ax
	jnz	@@9
@@11:	cmp	byte ptr [si],0
	je	@@9
	lea	di,Temp
	xor	dx,dx
	xor	ah,ah
@@12:	mov	ah,al
	lodsb
	or	al,al
	jz	@@13
	cmp	al,';'
	je	@@14
	stosb
	inc	dx
	jmp	@@12
@@13:	dec	si
@@14:	cmp	ah,':'
	je	@@15
	cmp	ah,'\'
	je	@@15
	mov	al,'\'
	stosb
	inc	dx
@@15:	push	si
	mov	si,UName
@@16:	lodsb
	stosb
	or	al,al
	jnz	@@16
	pop	si
	push	dx
	lea	dx,Temp
	Invoke	FileTime
	and	ax,dx
	inc	ax
	pop	dx
	jz	@@11
	jmp	short @@23
@@17:	lea	di,Temp
	xor	dx,dx
	xor	ah,ah
@@18:	mov	ah,al
	lodsb
	or	al,al
	jz	@@19
	stosb
	inc	dx
	jmp	@@18
@@19:	cmp	ah,':'
	je	@@20
	cmp	ah,'\'
	je	@@20
	mov	al,'\'
	stosb
	inc	dx
@@20:	mov	bx,di
	mov	si,UName
@@21:	lodsb
	stosb
	or	al,al
	jz	@@23
	cmp	al,':'
	je	@@22
	cmp	al,'\'
	jne	@@21
@@22:	mov	di,bx
	jmp	@@21
@@23:	lea	si,Temp
	mov	di,UName
	mov	cx,79
@@24:	lodsb
	or	al,al
	jz	@@25
	stosb
	loop	@@24
@@25:	xor	al,al
	stosb
@@26:	mov	ax,dx
	pop	es di si
	Exit
ConvertName	endp

FileCreate	proc	far
	Entry	far
	call	CreateFile
	Exit
FileCreate	endp

FileClose	proc	far
	Entry	far
	call	CloseFile
	Exit
FileClose	endp

FileWrite	proc	far
	Entry	far
	Invoke	WriteHandle
	Exit
FileWrite	endp

WriteBig	proc	far
	Entry	far
	call	BigWrite
	Exit
WriteBig	endp

GetFlatMem	proc	far
	Entry	far
	Invoke	GetMemOnBottom
	Exit
GetFlatMem	endp

GetProcStackSize	proc	far
	Entry	far
	Invoke	StackRequired
	Exit
GetProcStackSize	endp

FlatMemAvail	proc	far
	Entry	far
	Invoke	GetMemAvail
	Exit
FlatMemAvail	endp

	end

⌨️ 快捷键说明

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