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

📄 script.asm

📁 FDOS Operating System
💻 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 + -