Partitionsrotine von Dos 5.0 Assembler Quellcode ------------------------------------------------------------------------------ 0 CLI Interrupts sperren 1 XOR AX,AX AX=0 3 MOV SS,AX Stacksegment=0 5 MOV SP,$7C00 Stackpointer=$7C00 ( 0000:7C00 ) 8 MOV SI,SP SI=$7C00 A PUSH AX B POP ES ES=0 C PUSH AX D POP DS DS=0 E STI Interruptssperre aufheben Kopiert den Partitionssektor nach 600 F CLD D-Status-Flag =0 10 MOV DI,$600 DI=$600 adresse 13 MOV CX,$100 CX=256 zähler 16 REPNZ Kopiert den Partitionssektor 17 MOVSW nach $600 18 JMP 61D weiter mit 61D = 1D Teste welche Partition Bootfähig ist 61D MOV SI,7BE ersten Parti.eintrag = BE siehe Tabelle 620 MOV BL,4 Zähler = 4 einträge 622 CMP Byte PTR[SI],$80 teste ob Bootfähig 625 JZ 35 gefunden, ja dann weiter mit 635 627 CMP Byte PTR[SI],$00 ist es null 62A JNZ 648 nein dann Fehler weiter bei 648 62C ADD SI,$10 +16 pointer auf nächsten eintrag 62F DEC BL Zähler -1 631 JNZ 622 wenn null, dann keine Bootfähig 633 INT 18 Aufruf des ROM-BASIC nix get mehr Laufwerk und Spur und Sektor des Bootsektors Laden 635 MOV DX,[SI] Laufwerk nummer=$80=128 637 MOV CX,[SI+2] Spur und Sektor 63A MOV BP,SI adr des Partitionseintrag retten Teste ob noch mehrere Partitionseinträge Bootfähig sind 63C ADD SI,$10 +16 pointer auf nächsten eintrag 63F DEC BL Zähler -1 641 JZ 65D alle Partis schon durch dann zu 65D 643 CMP Byte PTR[SI],$00 sonst teste ob auch Bootfähig 646 JZ 3C nicht dann nächster eintrag Fehlertext ausgeben und in endlos Schleife gehen 648 MOV SI,68B Adresse des Fehlertextes 64B LODSB ein Textbyte in AL und SI=SI+1 64C CMP AL,00 ende des textes erreicht 64E JZ 65B ja dann zur Endlosschleife 650 PUSH SI SI Retten 651 MOV BX,7 Farbe des Textes 654 MOV AH,E Funktions 14 ein zeichen ausgeben 656 INT $10 BIOS 10 658 POP SI SI zurück 659 JMP 64B nächstes zeichen Die Endlosschleife 65B JMP 65B nur Reset hilft hir noch Bootsektor laden 65D MOV DI,5 5 versuche 660 Mov BX,$7C00 Ladeadresse des Sectors 663 Mov AX,201 Funktion 2 anzahl zu Ladende Sek 1 666 PUSH DI DI Retten 667 INT 13 BIOS 13 669 POP DI DI wieder laden 66A JNB $678 Fehler aufgetrete, nein dann weiter 678 66C XOR AX,AX AX=0 66E INT $13 Controler Reset 670 DEC DI schon 5 Versuch 671 JNZ $660 nein dann nochmal versuchen Fehler Bootsektor konnte nicht geladen werden 673 MOV SI,$6A7 adresse des Fehlertextes 676 JMP $64B zur Textausgabe Teste ob Partitionssektor gültig ist, zwar Spät aber doch noch 678 MOV SI,$6CD adresse des Fehlertextes 67B MOV DI,$7DFE 67E CMP Word PTR [DI],$AA55 erkennung $AA55 682 JNZ 64B nicht gültig gehe zu Fehlertext ausgabe 684 MOV SI,BP Adresse des Partitonseintrag 686 JMP $7C00 Bootsektor STARTEN 68B DB """Ungültige Partitionstabelle.""" 6A7 """Fehler beim Laden des Betriebssystems.""" 6CD """Betriebsystem fehlt."""