1173
« am: 28. March 2004, 13:21 »
hallo, hab meine routinen verändert und einen beispielsector zum laden geschrieben:
;************out.asm*********************
;Datei, bzw. Sector zum Laden
mov ax, 0x2200 ; Segmentregister updaten
mov ds, ax
xor ax,ax
mov es, ax
mov si, will
call putstr
;!!!!!!!!!FUNKTIONEN!!!!!!!!!
;Stringausgabe
putstr:
lodsb
or al,al
jz short putstrd ; 0-Byte? -> Ende!
mov ah,0x0E ; Funktion 0x0E
mov bx,0x0007 ; Atrribut-Byte
int 0x10 ; schreiben
jmp putstr ; nächstes Byte
putstrd:
retn
willkommen db "willkommen"
times 512-($-$$) db 0 ; Dateilänge: 512 Bytes
;*************teil von kernel.asm******************
;lade routine
;fürt sectoren aus...
; Lade den Programm vom Bootlaufwerk
; Diskdrive reset (Interrupt 13h, 0)
push ds ; Sichere DS
mov ax, 0 ; Die gewünschte Funktion (reset)
mov dl, 0 ; Dieses Laufwerk ist gewünscht
int 13h ; Den Interrupt ausführen
pop ds ; DS wiederherstellen
jc execute ; Geht nicht? nochmal!
; Sektoren lesen (Interrupt 13h, 2)
mov ax,0x2200 ; ES:BX = 22000
mov es,ax
mov bx,0
;startsector
mov si,exe_start
call putstr
call getkey
dec ah
mov cl,ah ; Sector zum starten
;anzahl der zu lesenden sectoren
mov si,exe_number
call putstr
call getkey
dec ah
mov al,ah ; Lese Sektorn zum lesen ein
mov dl, 0 ;Laufwerk 0
mov dh, [head]
mov ch, [track]
mov ah, 2 ; Funktion 2 (Lesen)
int 13h ; ES:BX = Daten vom Laufwerk
mov ax, 0x2200 ; Die Adresse des Programms
mov es, ax ; Segmentregister updaten
mov ds, ax
push ax
mov ax, 0
push ax
retf
aber irgendwie geht es nicht, manchmal passiert garnichts, und wann anderst komische zeichen und irgenwo in den zeichen dann diese
willkommen-Zeichenkette...