Benvenuto su Inforge
Rimuovi la pubblicità e partecipa alla più grande comunità italiana sul mondo digitale presente sul web sin dal 2007.
Iscriviti

Domanda "Hello World" bare metal

mattstack

Utente Bronze
1 Aprile 2021
32
10
23
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:
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
E fin qui, no problemi, a questo punto creo un immagine del disco:
Codice:
qemu-img create main.img 512B
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:
Schermata del 2021-05-02 14-16-10.png

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:
Schermata del 2021-05-02 14-25-36.png

Non, capisco, il settore è avviabile, credo di si, il fatto e che non visualizza niente.
Qualcuno può darmi un aiuto e qualche dritta?
 

Allegati

  • Schermata del 2021-05-02 14-18-33.png
    Schermata del 2021-05-02 14-18-33.png
    4.3 KB · Visualizzazioni: 2
  • Schermata del 2021-05-02 14-18-44.png
    Schermata del 2021-05-02 14-18-44.png
    44.6 KB · Visualizzazioni: 3

mattstack

Utente Bronze
1 Aprile 2021
32
10
23
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:
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
E fin qui, no problemi, a questo punto creo un immagine del disco:
Codice:
qemu-img create main.img 512B
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:
View attachment 52413
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:
View attachment 52417
Non, capisco, il settore è avviabile, credo di si, il fatto e che non visualizza niente.
Qualcuno può darmi un aiuto e qualche dritta?

Ciao, dai un occhio a questo esempio, direi faccia al caso tuo, leggi qui: https://stackoverflow.com/questions...-world-boot-sector-with-gcc-that-works-from-a
Non molto, si parla di hardware reale, io non sono riuscito a farlo "partire" su qemu, ho visto un po' in giro, ma la maggior parte delle persone ha fatto quello che ho fatto io, mi sono perso qualcosa probabilmente.
 
Supporta Inforge con una donazione
Rodnia -  The Great Conqueror