PUSH ES
MOV AX, 020Eh ; Daten für BIOS-Int 13h eingeben um Root-Dir einzulesen
MOV CX, 0102h ; 14 Sektoren von Head0, Cylinder1, Sektor 2 an
XOR DX, DX
MOV BX, 0400h
MOV ES, BX
XOR BX, BX
INT 13h
POP AX
JC .floppy_error ; bei Fehler dorthin springen und Nachricht ausgeben
PUSH ES
; Root-Directory nach Datei 'TEST' absuchen ;
MOV CX, 224 ; Dort wo Root-Dir eingelesen worden ist, alle 32 Bytes nach Dateiname TEST suchen
MOV BX, 0000h
.search:
CMP [ES:BX], BYTE 'T'
JNE .search_next
CMP [ES:BX+1], BYTE 'E'
JNE .search_next
CMP [ES:BX+2], BYTE 'S'
JNE .search_next
CMP [ES:BX+3], BYTE 'T'
JNE .search_next ; Wenn es nicht überinstimmt nach search_next springen, um bei nächstem Eintrag nachzuschauen
; Wenn es übereinstimmt, Datei laden (zuerst Adresse bei Offset 26 herausfinden, wo Datei ist, dann Sektor in Speicher laden und springen) ;
MOV AX, 0007h
MOV BX, [ES:BX+26]
ADD BX, 33
MOV SI, head_cylinder_sector
INT 20h ; OS-Interrupt zur Umrechnung von LSN in HCS
MOV AX, 0201h
MOV CH, BYTE [head_cylinder_sector+1]
MOV CL, BYTE [head_cylinder_sector]
MOV DH, BYTE [head_cylinder_sector+2]
XOR DL, DL
MOV BX, 0400h
MOV ES, BX
XOR BX, BX
INT 13h
POP AX
JC .floppy_error
; Zum Programm springen ;
JMP 0400h:0000h
.search_next:
ADD BX, 0020h ; 32 B addieren, um zum nächsten Eintrag zu gelangen
LOOP .search
JMP .start
.floppy_error:
MOV AX, 0005h ; Bei Floppy-Fehler OS-Interrupt mit Fehlerbehandlung aufrufen
INT 20h
JMP .start