📄 script.asm
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Project : FDOS 0.0.7
;; Author : Stefan Tappertzhofen (tappertzhofen@t-online.de)
;; Webpage : http://www.visual-opal.de
;; Date : 2. September 2003
;; Caption : Script parser
;; Filename : script.asm
;; Compile Syntax : nasm script.asm -f bin -o script.bin
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV AX, CS ; Segment Register vorbereiten
MOV DS, AX
MOV ES, AX
begin:
MOV DI, Buffer ; DI = AusgabeString
MOV AH, 16 ; Ermittle die Command Zeile
INT 21h ; Interrupt 21h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Erkenne Parameter黚ergabe
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV SI, PR_Ver ; SI = VergleichsString
MOV DI, Buffer ; DI = Quelle
CALL CompareString ; Vergleiche SI und DI
CMP CL, 1 ; identisch?
JE NEAR Show_Version ; Wenn ja, dann Sprung
MOV SI, PR_HelpEcho ; SI = VergleichsString
MOV DI, Buffer ; DI = Quelle
CALL CompareString ; Vergleiche SI und DI
CMP CL, 1 ; identisch?
JE NEAR Show_HelpEcho ; Wenn ja, dann Sprung
MOV SI, PR_HelpGetmem ; SI = VergleichsString
MOV DI, Buffer ; DI = Quelle
CALL CompareString ; Vergleiche SI und DI
CMP CL, 1 ; identisch?
JE NEAR Show_HelpGetmem ; Wenn ja, dann Sprung
MOV SI, PR_HelpPutmem ; SI = VergleichsString
MOV DI, Buffer ; DI = Quelle
CALL CompareString ; Vergleiche SI und DI
CMP CL, 1 ; identisch?
JE NEAR Show_HelpPutmem ; Wenn ja, dann Sprung
MOV SI, PR_HelpList ; SI = VergleichsString
MOV DI, Buffer ; DI = Quelle
CALL CompareString ; Vergleiche SI und DI
CMP CL, 1 ; identisch?
JE NEAR Show_HelpList ; Wenn ja, dann Sprung
MOV SI, PR_Help ; SI = VergleichsString
MOV DI, Buffer ; DI = Quelle
CALL CompareString ; Vergleiche SI und DI
CMP CL, 1 ; identisch?
JE NEAR Show_Help ; Wenn ja, dann Sprung
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Mini Parser
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ParseCommand:
MOV SI, CMD_Echo ; SI = VergleichsString
MOV DI, Buffer ; DI = Quelle
CALL CompareString ; Vergleiche SI und DI
CMP CL, 1 ; identisch?
JE NEAR P_Echo ; Wenn ja, dann Sprung
MOV SI, CMD_Getmem ; SI = VergleichsString
MOV DI, Buffer ; DI = Quelle
CALL CompareString ; Vergleiche SI und DI
CMP CL, 1 ; identisch?
JE NEAR P_Getmem ; Wenn ja, dann Sprung
MOV SI, CMD_Putmem ; SI = VergleichsString
MOV DI, Buffer ; DI = Quelle
CALL CompareString ; Vergleiche SI und DI
CMP CL, 1 ; identisch?
JE NEAR P_Putmem ; Wenn ja, dann Sprung
JMP NEAR Show_Help ; Sprung
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Befehl ECHO
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
P_Echo:
; Ermittle die Startposition des auszugebenen Textes:
MOV SI, Buffer ; Verweis zum AusgabeString
ADD SI, 5 ; SI + L鋘ge des Befehls
MOV AH, 1 ; Funktion Stringausgabe
INT 21h ; Interrupt 21h
MOV SI, CRLF
MOV AH, 1 ; Funktion Stringausgabe
INT 21h ; Interrupt 21h
JMP ShutDown ; Sprung
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Befehl Getmem
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
P_Getmem:
; Ermittle die Startposition der Speicheradresse:
MOV SI, Buffer ; Verweis zum AusgabeString
ADD SI, 7 ; SI + L鋘ge des Befehls
MOV AH, 13 ; STRING > WORD
INT 21h ; Interrupt 21h
PUSH DS ; DS > Stack
XOR EAX, EAX ; EAX = 0
MOV AX, BX ; AX = BX
MOV DS, EAX ; DS = EAX (DS = BX)
MOV BX, 0 ; BX = 0
MOV SI, BX ; SI = BX
MOV AL, [SI] ; AL = [SI]
POP DS ; Stack > DS
MOV AH, 11 ; Funktion Zeichen ausgeben
INT 21h ; Interrupt 21h
JMP ShutDown ; Sprung
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Befehl Putmem
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Zeichen DB 0
P_Putmem:
; Ermittle die Startposition des einzulesenden Zeichens:
MOV SI, Buffer ; Verweis zum AusgabeString
ADD SI, 7 ; SI + L鋘ge des Befehls
MOV AL, [SI] ; einzulesendes Zeichen
MOV [Zeichen], AL
ADD SI, 2 ; ein Leerzeichen
PUSH SI ; SI > Stack
PUSH AX ; AX > Stack
MOV AH, 13 ; STRING > WORD
INT 21h ; Interrupt 21h
POP AX ; Stack > AX
POP SI ; Stack > SI
MOV DL, [Zeichen]
PUSH DS ; DS > Stack
XOR EAX, EAX ; EAX = 0
MOV AX, BX ; AX = BX
MOV DS, EAX ; DS = EAX (DS = BX)
MOV BX, 0 ; BX = 0
MOV SI, BX ; SI = BX
MOV AL, DL ; AL = DL
MOV [SI], AL ; [SI] = AL (=DL)
POP DS ; Stack > DS
JMP ShutDown ; Sprung
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Ausgabe von Hilfetexten o.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -