2
i nasm verwende und das ist mein Code:int 10h 13h BIOS String Ausgabe funktioniert nicht
org 0x7c00
bits 16
section .data
zeichen dw 'hello2'
section .text
mov ax,0x7c00
mov es,ax
mov bh,0
mov bp,zeichen
mov ah,13h
mov bl,00h
mov al,1
mov cx,6
mov dh,010h
mov dl,01h
int 10h
jmp $
times 510 - ($-$$) hlt
dw 0xaa55
es den Cursor auf die richtige Position gesetzt ist, aber er druckt nichts. Ich lade diese Datei mit qemu-system-i386. Die int10 ah = 13h ist ein String-Ausgang und in Register es: bp muss die Adresse der Zeichenfolge sein
Mehr als ein Problem. Sie müssen ein besseres Verständnis von Segment: Offset-Adressierung bekommen, aber ein Bootloader wird unter der physikalischen Adresse 0x07c00 geladen. Sie müssen eine ORG auswählen und segmentieren, die dieser Adresse entspricht. Wenn Sie ORG 0x7c00 auswählen, müssen Sie die Segmente (_ES_ in diesem Fall) auf Null setzen, da (0x0000 << 4) + 0x7c00 = 0x07c00 (physikalische Adresse). Sie laden _ES_ mit 0x7c00, was für die von Ihnen ausgewählte _ORG_ falsch ist. –
Zweitens, wenn Sie '-f bin' _NASM_-Ausgabe verwenden, wollen Sie keinen' .data'-Abschnitt verwenden. Platzieren Sie die Daten innerhalb des 'text'-Bereichs direkt nach dem Code, aber vor der Boot-Signatur. Wenn Sie' section data' verwenden, platziert NASM Ihre Daten tatsächlich nach Byte 512 außerhalb des Boot-Sektors. –
Sie setzen _BL_ auf 0x00. Das ist schwarz auf schwarz und wird nicht ausgegeben. Versuchen Sie 0x07 vielleicht? –