Salve @olegfresi,
partiamo dall'assunto che, come già accennato da @_Achille, l'unico linguaggio di programmazione che un computer è in grado di comprendere è il linguaggio macchina, basato sul sistema di numerazione binario :sisilui:
Il linguaggio macchina è quello che definisce il set di istruzioni a basso livello del processore, a sua volta il set di istruzioni dipende dal tipo di architettura del processore per cui processori con architettura diversa hanno un set di istruzioni differente :sisi:
Ciascuna istruzione è formata da un "codice operativo" che determina il tipo di operazione e da uno o più "operandi" che, in genere, sono contenuti nei registri del processore.
Ad esempio "mov ax, 0ffffh" imposta il valore (esadecimale) 65535 nel registro ax (mov è il codice operativo e il registro ax e il valore 0ffffh sono gli operandi).
Occorre però fare una precisazione: le istruzioni in linguaggio macchina sono scritte in cifre binarie, utilizzando una sequenza ben precisa di bit 0 e di bit 1, mentre l'esempio che ho fatto precedentemente (mov ax, 0ffffh) è scritto in linguaggio Assembler (o Assembly) che, in qualche modo, facilita la programmazione del codice macchina perché utilizza "nomi simbolici" ("mnemonici", come si dice, ossia che possono ricordarsi facilmente) sia per i codici operativi che per le locazioni di memoria in cui vi sono indirizzi e dati :asd:
Ovviamente l'assemblatore si occuperà della "traduzione" dei codici operativi simbolici in codice macchina binario.
L'Assembler non è un linguaggio ad alto livello e quindi, esattamente come il linguaggio macchina, dipende dal processore che si sta utilizzando.
E' possibile inserire parti di programma scritte in Assembler (Inline Assembler) all'interno di un programma in C o in C++, molti compilatori sono in grado di tradurre le istruzioni Assembler in codice macchina decodificabile dal processore.
https://en.wikipedia.org/wiki/Inline_assembler :)
Una possibile sintassi potrebbe essere la seguente:
codice C
asm {istruzioni Assembler}
codice C
I vari moduli del BIOS possono così essere scritti in C e in C++ e le prime istruzioni da eseguire, dato che all'accensione del PC la RAM è vuota, devono essere memorizzate in una ROM :asd:
L'indirizzo della prima istruzione è "cablato", viene ritrovato automaticamente, mentre la prima operazione da effettuare è il cosiddetto "bootstrap", cioè il caricamento del sistema operativo in memoria :sisilui:
Se hai altre domande da pormi oppure qualcosa non ti è chiaro, chiedi pure, sono sempre qui :ciaociao: