// Folgende Maschinenbefehle werden dann verwenden 0xFA, // cli (Interrupts aus) 0x31, 0xC0, 0x8E, 0xD8, // xor ax,ax; mov ds,ax (DS=0) 0x8E, 0xC0, // mov es,ax (ES=0) 0x8E, 0xD0, // mov ss,ax (SS=0) 0xBC, 0x00, 0x7C, // mov sp, 0x7C00 (Stack-Sicherheit) // 1. DISK READ: Nutze DL (das Laufwerk, von dem das BIOS gerade bootet!) 0xB8, 0x7F, 0x02, // mov ax, 027Fh (AH=02:Read, AL=127 Sektoren) 0xBB, 0x00, 0x10, 0x8E, 0xC3, // mov bx, 1000h; mov es, bx (Ziel-Segment ES=1000h) 0x31, 0xDB, // xor bx, bx (Ziel-Offset 0 -> 1000:0000) 0xB9, 0x02, 0x00, // mov cx, 0002h (Cylinder 0, Sektor 2) // DL wird vom BIOS beim Booten gesetzt (0x00 Floppy, 0x80 HDD) 0xCD, 0x13, // int 13h (Lese von Disk) // 2. GRAFIKMODUS 13h 0xB8, 0x13, 0x00, 0xCD, 0x10, // 3. PALETTE SETZEN (Daten liegen bei 1000:0000) 0x1E, 0x07, // push ds; pop es (ES wieder auf 0) 0x8E, 0xDA, // mov ds, dx // Lade 1000h in DS 0xB8, 0x00, 0x10, 0x8E, 0xD8, // mov ax, 1000h; mov ds, ax 0xBA, 0xC8, 0x03, 0x30, 0xC0, 0xEE, 0x42, // Palette Init 0x31, 0xF6, // xor si, si (DS:SI = 1000:0000) 0xB9, 0x00, 0x03, 0xF3, 0x6E, // rep outsb // 4. PIXEL UNSERER Payload KOPIEREN (nach A000:0000) 0xB8, 0x00, 0xA0, 0x8E, 0xC0, // ES = A000h 0x31, 0xFF, // DI = 0 // SI steht nach der Palette bei 768 0xB9, 0x00, 0xFA, 0xF3, 0xA4, // rep movsb // 5. HALT 0x31, 0xC0, 0xCD, 0x16, 0xEB, 0xFE