📄 stdfunc.asm
字号:
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 + -