DOMANDA Come è fatto il bios

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

olegfresi

Nuovo Utente
Messaggi
102
Reazioni
2
Punteggio
38
Salve a tutti: Oggi mi è sorta una curiosità non troppo banale d'altronde come tutte le altre. Come è fatto il bios e come è programmato quel sistemino che opera alle spalle del sistema operativo e che lavora a stretto contatto con l'hardware. Come è stata programmata l'interfaccia grafica del primo computer se non avevano a disposizione ne linguaggi ne librerie grafiche ne driver per le schede.
 
Di come programmassero me lo chiedo anche io...

Il BIOS dovrebbe essere scritto in Assembly o forse in Linguaggio Macchina... poi boh.
 
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:
 
Grazie mille ho le idee più chiare ma il primo computer come è stato programmato la prima interfaccia grafica ancor prima di venire all'assembly le operazioni di memoria o di accensione del pc in binario come le spiegazione.
 
I primi computer erano programmati con schede perforate, in pratica dei cartoncini bucherellati che simulavano 0 e 1 (il linguaggio macchina binario del computer programmato); così erano dati programma ed istruzioni in input, l'output era esso stesso un nastro di carta con una serie di "buchetti" che venivano poi interpretati dagli operatori umani.
 
Grazie mille ho le idee più chiare ma il primo computer come è stato programmato la prima interfaccia grafica ancor prima di venire all'assembly le operazioni di memoria o di accensione del pc in binario come le spiegazione.

Il BIOS è un componente fondamentale del computer, come ho detto all'avvio del PC la RAM non contiene nulla e per eseguire un programma è necessario che tale programma risieda in memoria centrale, quindi le prime istruzioni che vengono eseguite sono quelle del cosiddetto POST (Power On Self Test), il quale inizializza la tabella degli interrupt IVT (ti ricordo che nei processori X86 la gestione delle interruzioni è "vettorizzata", infatti IVT è l'acronimo di "tabella dei vettori di interrupt"), testa la RAM e controlla le periferiche collegate.
Il BIOS contiene anche dei driver per la gestione basilare di alcuni componenti hardware, come ad es. la tastiera e lo schermo, e fornisce alcuni servizi richiesti dal S.O. o dai programmi.
Il DOS è un sistema operativo a "linea di comando", in cui l'utente "colloquia" col computer attraverso una serie di comandi offerti dal sistema di gestione del sistema operativo stesso, e non ha bisogno di alcuna "shell" grafica (GUI) in quanto sfrutta i driver e i servizi di base del BIOS richiesti con l'istruzione INT 21H (cioè utilizzando l'interrupt 21), in particolare per quanto riguarda le operazioni di I/O (Input/Output).
Gli altri servizi del BIOS sono: gestione dello schermo (INT 10H), gestione del disco (INT 13H), gestione della tastiera (INT 16H), gestione della stampante (INT 17H).
Il DOS ha, quindi, il controllo "diretto" delle risorse hardware, mediato dal BIOS di sistema.
La prima SHELL per il DOS, la cosiddetta DOS Shell, arrivò nel 1988 con la versione 4.0 del DOS (MS-DOS e PC-DOS dell'IBM) ma in realtà non era una vera e propria GUI:
https://en.wikipedia.org/wiki/DOS_Shell
Ora, nel caso della semplice rappresentazione di caratteri ASCII sullo schermo si utilizza un set "fisso" di caratteri che viaggiano sotto forma di bytes, nel caso invece di vere e proprie interfacce grafiche a viaggiare sono singoli pixel, indipendenti l'uno dall'altro: si tratta di milioni di bytes !!!!! :asd:
Inoltre c'è da tenere conto di alcuni concetti importantissimi, come quelli di finestra, di combo-box, di menù a tendina, di Font, di icone, di puntatore (il cursore del mouse) ma soprattutto di "programmazione ad eventi", abbastanza complessa :sisilui:
Dietro una "semplice" (si fa per dire) GUI c'è un intero sistema operativo, in grado di gestire tutto ciò che appare sul display e che è "comandato" da tastiera e mouse :asd:
https://it.wikipedia.org/wiki/Interfaccia_grafica :sisi:
 
I primi computer erano programmati con schede perforate, in pratica dei cartoncini bucherellati che simulavano 0 e 1 (il linguaggio macchina binario del computer programmato); così erano dati programma ed istruzioni in input, l'output era esso stesso un nastro di carta con una serie di "buchetti" che venivano poi interpretati dagli operatori umani.

OT:
:D ... E infatti la parola "bug" nasce dal fatto che a Grace Hooper programmando su Mark 1 trovo un insetto :asd: ... :D
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top