📄 tdos.pas
字号:
CMP AH,':'
JNE @@1
CMP AL,'a'
JB @@2
CMP AL,'z'
JA @@2
SUB AL,20H
JMP @@2
@@1: DEC SI
DEC SI
MOV AH,19H
INT 21H
ADD AL,'A'
MOV AH,':'
@@2: STOSW
CMP SI,CX
JE @@3
CMP [SI].Byte,'\'
JE @@4
@@3: SUB AL,'A'-1
MOV DL,AL
MOV AL,'\'
STOSB
PUSH SI
PUSH DS
MOV AH,47H
MOV SI,DI
PUSH ES
POP DS
INT 21H
POP DS
POP SI
JC @@4
CMP ES:[DI].Byte,0
JE @@4
PUSH CX
MOV CX,-1
XOR AL,AL
REPNZ SCASB
DEC DI
MOV AL,'\'
STOSB
POP CX
@@4: SUB CX,SI
REP MOVSB
XOR AL,AL
STOSB
LEA DI,ResultC
MOV SI,DI
PUSH ES
POP DS
MOV CX,-1
@@5: LODSB
OR AL,AL
JZ @@8
CMP AL,'\'
JE @@8
CMP AL,'.'
JE @@7
JCXZ @@5
DEC CX
CMP AL,'a'
JB @@6
CMP AL,'z'
JA @@6
SUB AL,20H
@@6: STOSB
JMP @@5
@@7: MOV CX,3
JMP @@6
@@8: CMP [DI-2].Word,'.\'
JNE @@9
DEC DI
DEC DI
JMP @@11
@@9: CMP [DI-2].Word,'..'
JNE @@11
CMP [DI-3].Byte,'\'
JNE @@11
SUB DI,3
CMP [DI-1].Byte,':'
JE @@11
@@10: DEC DI
CMP [DI].Byte,'\'
JNE @@10
@@11: MOV CX,8
OR AL,AL
JNZ @@6
CMP [DI-1].Byte,':'
JNE @@12
MOV AL,'\'
STOSB
@@12: LEA SI,ResultC
MOV AX,DI
SUB AX,SI
CMP AL,79
JB @@13
MOV AL,79
@@13: LES DI,Result
STOSB
CBW
XCHG AX,CX
REP MOVSB
POP DS
end;
procedure SMove; near; assembler;
asm
SUB DX,BX
CMP AX,BX
JB @@1
MOV AX,BX
@@1: STOSB
MOV CX,AX
ADD BX,SI
REP MOVSB
MOV SI,BX
end;
procedure FSplit(Path: PathStr; var Dir: DirStr; var Name: NameStr;
var Ext: ExtStr); assembler;
asm
PUSH DS
LDS SI,Path
CLD
LODSB
MOV DL,AL
XOR DH,DH
MOV BX,DX
OR BX,BX
JZ @@2
@@1: CMP [BX+SI-1].Byte,'\'
JE @@2
CMP [BX+SI-1].Byte,':'
JE @@2
DEC BX
JNZ @@1
@@2: MOV AX,67
LES DI,Dir
CALL SMove
XOR BX,BX
JMP @@4
@@3: CMP [BX+SI].Byte,'.'
JE @@5
INC BX
@@4: CMP BX,DX
JNE @@3
@@5: MOV AX,8
LES DI,Name
CALL SMove
MOV BX,DX
MOV AX,4
LES DI,Ext
CALL SMove
POP DS
end;
function FRename(Path, NewName: PathStr): Integer; assembler;
var
NewNameC, PathC: array[0..79] of Char;
asm
PUSH DS
LDS SI,NewName
LEA DI,NewNameC
CALL Pas2C
PUSH DS
PUSH DX
LDS SI,Path
LEA DI,PathC
CALL Pas2C
POP DI
POP ES
MOV AH,56H
INT 21H
JNC @@1
NEG AX
JMP @@2
@@1: XOR AX,AX
@@2: POP DS
end;
function GetCurDir(Drive: Char): DirStr; assembler;
asm
MOV AL,Drive
OR AL,AL
JNZ @@1
MOV AH,19H
INT 21H
ADD AL,'A'
@@1: MOV DL,AL
LES DI,@Result
MOV AH,':'
CLD
STOSW
MOV AL,'\'
STOSB
PUSH DS
MOV AH,47H
SUB DL,'A'-1
MOV SI,DI
PUSH ES
POP DS
INT 21H
JNC @@2
MOV [SI].Byte,0
@@2: POP DS
LES DI,@Result
CALL C2Pas
end;
function ChDir(Path: PathStr): Integer; assembler;
var
PathC: array[0..79] of Char;
asm
PUSH DS
LDS SI,Path
LEA DI,PathC
CALL Pas2C
MOV AH,3BH
INT 21H
JC @@1
XOR AX,AX
@@1: POP DS
end;
function GetCurDrive: Char; assembler;
asm
MOV AH,19H
INT 21H
ADD AL,'A'
end;
procedure SetCurDrive(Drive: Char); assembler;
asm
MOV AH,0EH
MOV DL,Drive
SUB DL,'A'
INT 21H
end;
function DriveValid(Drive: Char): Boolean; assembler;
asm
MOV DL,Drive
MOV AH,36H
SUB DL,'A'-1
INT 21H
INC AX
JZ @@1
MOV AL,1
@@1:
end;
procedure UnpackTime(P: Longint; var T: DateTime); assembler;
asm
LES DI,T
CLD
MOV AX,P.Word[2]
MOV CL,9
SHR AX,CL
ADD AX,1980
STOSW
MOV AX,P.Word[2]
MOV CL,5
SHR AX,CL
AND AX,0FH
STOSW
MOV AX,P.Word[2]
AND AX,1FH
STOSW
MOV AX,P.Word[0]
MOV CL,11
SHR AX,CL
STOSW
MOV AX,P.Word[0]
MOV CL,5
SHR AX,CL
AND AX,3FH
STOSW
MOV AX,P.Word[0]
AND AX,1FH
SHL AX,1
STOSW
end;
function GetDateTime: Longint; assembler;
asm
MOV AH,2AH
INT 21H
XCHG AX,CX
SUB AX,1980
MOV CL,9
SHL AX,CL
XOR BX,BX
MOV BL,DH
MOV CL,5
SHL BX,CL
OR AX,BX
OR AL,DL
PUSH AX
MOV AH,2CH
INT 21H
XOR AX,AX
MOV BX,CX
XCHG AL,BH
MOV CL,11
SHL AX,CL
XOR BH,BH
MOV CL,5
SHL BX,CL
OR AX,BX
SHR DH,1
OR AL,DH
POP DX
end;
function GetEnv(EnvVar: string): string; assembler;
var
EnvVarC: array[0..31] of Char;
asm
PUSH DS
CLD
LDS SI,EnvVar
LEA DI,EnvVarC
PUSH SS
POP ES
LODSB
CMP AL,31
JBE @@1
MOV AL,31
@@1: CBW
MOV CX,AX
INC AX
MOV DX,AX
JCXZ @@4
@@2: LODSB
CMP AL,'a'
JB @@3
CMP AL,'z'
JA @@3
SUB AL,20H
@@3: STOSB
LOOP @@2
@@4: MOV AL,'='
STOSB
POP DS
PUSH DS
MOV DS,PrefixSeg
MOV DS,DS:2CH
XOR SI,SI
@@5: CMP [SI].Byte,0
JE @@7
LEA DI,EnvVarC
MOV CX,DX
REPE CMPSB
JE @@7
DEC SI
@@6: LODSB
OR AL,AL
JNZ @@6
JMP @@5
@@7: MOV DI,SI
PUSH DS
POP ES
XOR AL,AL
MOV CX,256
REPNZ SCASB
NOT CL
LES DI,@Result
MOV AL,CL
STOSB
REP MOVSB
POP DS
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -