Im Folgenden ist eine kurze Erläuterung zum KERNEL :
input : Über diese Funktion kann der Benutzer Befehle eingeben
compare : vergleicht 2 Strings miteinander
info : gibt eine kurze Meldung zur Version aus
reboot : selbsterklärend
print : selbsterklärend
Die Funktion "start" ist sozusagen die main, da diese immer wiederholt wird, bis exit eingegeben wird. Die Variablen befinden sich in der PROC.ASM und werden problemlos eingebunden.
Die Datei KERNEL.ASM :
BITS 16 ;Set code generation to 16 bit mode
jmp init
%include 'PROC.ASM'
init:
mov ax,0x0800
mov ds,ax
lea si,[msg_succ]
call print_string
lea si,[msg_welc]
call print_string
start:
call input ;Aufruf Input
lea si,[cinfo] ;Lade "exit" in DS:SI
call compare ;Funktion vergleichen
cmp al,1 ;Strings gleich ?
je info
lea si,[creboot]
call compare
cmp al,1
je reboot
jmp start
;************************************************
;Funktion fr Tastenein- und -ausgaben
;Erweitert um funktionierende Eingabebeschr„nkung
input:
xor di,di
input_loop:
mov ah,0x00 ;Funktion Tastatureingabe
int 0x16
cmp al,0x0D ;Carriage-Return ?
je input_end ;Falls ja, Ende
mov [command+di],al ;in Array schreiben
mov ah,0x0E ;Funktion Taste ausgeben
mov bx, 0x0007
int 0x10
inc di ;n„chstes Byte von command
cmp di,7
je input
jmp input_loop
input_end:
mov al,0
mov [command+di],al
ret
;Ende Funktion fr Tastenein- und -ausgaben
;Erweitert um funktionierende Eingabebeschr„nkung
;************************************************
;************************************************
;Funktion zum Vergleichen zweier Strings
compare:
xor di,di ;DI=0
compare_loop:
lodsb ;Hole Zeichen aus dem durch DS:SI adres. String
mov ah,[command+di] ;Hole Zeichen aus command
cmp al,ah ;Zeichen gleich ?
jne compare_false ;falls nein -> Ende und ungleich
cmp al,0 ;Stringende erreicht ?
je compare_true ;falls ja -> Ende und gleich
inc di
jmp compare_loop
compare_true:
mov al,1 ;Strings gleich -> al=1
ret
compare_false:
mov al,0 ;Strings ungleich -> al=0
ret
;Ende Funktion zum Vergleichen zweier Strings
;***********************************************
info:
lea si,[msg_info]
call print_string
jmp short start
reboot:
db 0EAh
dw 0000h
dw 0FFFFh
Die Datei PROC.ASM :
command: times 7 db 0 ;Size command-Buffer
size db 7 ;Anzahl max. Befehlszeichen
msg_succ db 'successful',13,10,0
msg_welc db 'Welcome to RM-OS',13,10,0
msg_info db 13,10,'RM-OS Kernel Version 0.1',0
cinfo db 'info',0
creboot db 'exit',0
print_string:
lodsb
or al,al
jz print_string_end
mov ah,0x0E
mov bx,0x0007
int 0x10
jmp print_string
print_string_end:
ret