Salve, sto provando a creare un piccolo programmino bare metal, un semplice "hello world" tramite i servizi del BIOS relativi al video, non su hardware reale bensì su qemu, il fatto e che non so dove mettere le mani, o meglio ci ho provato ma ho inevitabilmente fallito.
Il codice è il seguente:
E fin qui, no problemi, a questo punto creo un immagine del disco:
tramite un editor esadecimale inserisco i due byte "magici" 0x55 e 0xAA al byte 511 e 512 dell'immagine del disco, per far si che il BIOS consideri il settore avviabile, e prima di quest'ultimi memorizzo il programma, riempendo la distanza in byte tra l'ultima istruzione e i due byte magici con 0x20.
Ottenendo il seguente risultato:
Non vedo niente di sbagliato, il BIOS emulato leggerà il settore, troverà i byte magici, e caricherà in memoria il settore, che quindi verrà eseguito.
Invece, questo è il risultato:
Non, capisco, il settore è avviabile, credo di si, il fatto e che non visualizza niente.
Qualcuno può darmi un aiuto e qualche dritta?
Il codice è il seguente:
Codice:
stack SEGMENT PARA STACK
db ?
stack ENDS
data SEGMENT PARA PUBLIC
msg db "Hello World"
data ENDS
code SEGMENT PARA PUBLIC
ASSUME cs: code, ss: stack, ds: data
_start:
mov ax, data
mov ds, ax
mov cx, LENGHT msg
mov si, OFFSET msg
lp: mov ah, 0Eh
mov al, BYTE PTR [si]
int 10h
inc si
loop lp
hlt
code ENDS
END _start
Codice:
qemu-img create main.img 512B
Ottenendo il seguente risultato:
Non vedo niente di sbagliato, il BIOS emulato leggerà il settore, troverà i byte magici, e caricherà in memoria il settore, che quindi verrà eseguito.
Invece, questo è il risultato:
Non, capisco, il settore è avviabile, credo di si, il fatto e che non visualizza niente.
Qualcuno può darmi un aiuto e qualche dritta?