LEZIONE 4: Continuamo con i linguaggi, dalla Macchina all'Uomo
Allora... eravamo rimasti al Registro, che sostanzialmente è una memoria molto elementare, costituita da un Flip-Flop (due porte logiche incrociate tra di loro).
Un Registro può memorizzare un bit, 4 registri memorizzano 4 bit, e 8 registri collegati in parallelo memorizzano 8 bit.
Un Processore-CPU a 8 bit contiene un numero consistente di registri a 8 bit. Un processore a 16 bit ha registri a 16 bit, uno a 32 contiene registri a 32 bit e così via.
Questi registri memorizzano dati in coda da passare poi all'ALU che può fare una operazione per volta. I registri poi si curano anche di passare i risultati dell'ALU verso le uscite.
Grosso modo una CPU elementare ha questi componenti base.
Ora vediamo il Bus di memoria esterna.
Che czz è un bus? Tanti lo nominano ma nessuno vi spiega cosa è.
Un BUS è un insieme di linee dove transitano dei segnali. Un processore a ( bit ha 8 fili di ingresso e 8 di uscita. Ecco, questi 8 fili presi nel loro insieme vengono chiamati BUS.
IMPORTANTE: Il BYTE
Un BYTE è un insieme di 8 bit. Questo è un BYTE 01101101 anche questo 11111111 e anche questo 00000101.
Insomma, un gruppo di 8 cifre binarie, di 8 bit, compone un BYTE.
Quindi una memoria da 256 B (B maiuscola contro la b minuscola di bit) 256 BYTE, contiene 256x8 celle (registri, cubetti, visti prima) per un totale 2024 bit. Quindi 256 numeri composti da 8 bit ciascuno
Ora veniamo al coduice Esadecimale.
Abbiamo detto che una CPU capisce SOLO il codice binario, o Linguaggio macchina. Quindi che ce ne facciamo del linguaggio Esadecimale?
E' importante comprendere che il solo linguaggio che capisce un integrato digitale (la CPU, ma non solo questo genere) è quello macchina composto da zeri e uno. UN SOLO LINGUAGGIO.
Tutti gli altri, qualsiasi altro, l'Esadecimale, l'Ottale, il BCD, il C. il C++ e così via a salire verso linguagi sempre più complessi e lontani dalla CPU, SERVONO ESCLUSIVAMENTE ALL'UOMO.
Va da se che programmare una CPU a mano, inserendo a mano ogni 0 e ogni 1 di programma, c'è da diventare scemi. Allara qualche "cranio" si è inventato il liguaggio Esa (un ricercatore della IBM). Il linguaggio Esa è il primo tentativo di evitare di programmare a mano ogni singolo bit da inviare alla CPU. Vediamo come funzia.
Abbiamo detto che il linguaggio Esa ha 16 combinazioni possibili: dallo 0 fino alla lettera F (0123456789ABCDEF), quindi se scrivo F, significa che ho scritto 15, ovvero 1111 (binario).
E se scrivo FF?
Se scrivo FF ho semplicemente scritto due gruppi di 4 bit ciascuno, cioè 1111 1111 Ora se li metto insieme faccio un BYTE (i soliti 8 bit).
Quindi con 2 numeri ESADECIMALI descrivo un BYTE.
Un BYTE va da 0 (00000000 8 zeri) a 256 (11111111 sempre 8 cifre).
Non fate confusione.
Questi sono i numeri 0 e 1: 0000 00001
Ma anche questi sono uno 0 e un 1: 00000000 00000001
Solo che uno appartiene ad un numero binario a 4 bit, mentre il secondo ad un numero binario ad 8 bit, cioè un BYTE, ma hanno lo stesso valore numerico. Capito?
Un numero a 4 bit può essere rappresentato PER L'UOMO, PER IL PROGRAMMATORE, anche in Esa con un valore da 0 a F
Un numero a 8 bit (un BYTE) può essere rappresentato PER L'UOMO, PER IL PROGRAMMATORE, anche in Esa con un valore da 00 a FF
Un numero a 16 bit (2 BYTE) può essere rappresentato PER L'UOMO, PER IL PROGRAMMATORE, anche in Esa con un valore da 0000 a FFFF
Un numero a 32 bit (4 BYTE) può essere rappresentato PER L'UOMO, PER IL PROGRAMMATORE, anche in Esa con un valore da 00000000 a FFFFFFFF
Un numero a 64 bit (8 BYTE) può essere rappresentato PER L'UOMO, PER IL PROGRAMMATORE, anche in Esa con un valore da 00000000000000000 a FFFFFFFFFFFFFFFF (16 CIFRE)
Quindi, quando vedete una di quelle belle schermate blu, con scritto: ISRSS.EXE ha causato un errore irreversibile nel moduilo VBrun VXD 12D1:F9C0" significa che in quella locazione di memoria, in quel registro a 32 bit, c'è stato un errore (un numero che non doveva esserci)
Questo perchè un Sistema Operativo come Windows 95 o 98 o XP, sono a 32 bit e sfruttano i registri a 32 bit delle vecchie CPU Pentium o Athlon.
Avete capito la differenza tra 1 bit ed un BYTE? (una cifra - 8 cifre)
PROGRAMMAZIONE
L'Assembler è il linguaggio delle CPU, ordinato per istruzioni, e descritte in un linguaggio umano.
Ora immaginate che ci sia un piedino della CPU chiamato DATI/ISTRUZIONI, una di quelle FLAG che abbiamo visto nelle lezioni prima.
Se lo mettete a 1 vuol dire che in ingresso si presentano dei dati da eleborare, cioè DATI
Se invece lo mettete a 0, vuol dire che il numero in ingresso NON è un DATO, ma un'ISTRUZIONE.
MicroProgramma Nabbo:
riga 01: 00000001 DATO (piedino DATI/ISTRUZIONI messo a 1)
riga 02: 00000001 DATO (piedino DATI/ISTRUZIONI messo a 1)
riga 03: 11110001 ISTRUZIONE DI SOMMA (piedino DATI/ISTRUZIONI messo a 0)
riga 04: 11100010 ISTRUZIONE BUTTA SULLE USCITE IL RISULTATO (piedino DATI/ISTRUZIONI messo a 0)
Questo NaBBo-Programma è molto semplice, tradotto in Umanesco:
riga 01: c'è il numero 1 in ingresso, è un DATO
riga 02: c'è il numero 1 in ingresso, è un DATO
riga 03: è un'ISTRUZIONE, devo fare la somma del dato 01 e del dato 02
riga 04: è un'ISTRUZIONE, devo mettere sulle uscite il risultato della somma, tra il DATO 01 ed il DATO 02. che ho appena fatto
Ora il NaBBO avanzato potrà capire quanto segue:
riga 01: 01
riga 02: 01
riga 03: F1
riga 04: E2
Che è sta roba? E' semplicemente lo stesso programma scritto in Esadecimale
Basta dividere i numeri in due gruppi da 4 e usare il numero da 0 a F
----------Binario---Esadecimale
riga 01: 0000 0001----- 01
riga 02: 0000 0001----- 01
riga 03: 1111 0001----- F1
riga 04: 1110 0010----- E2
Come si programma in Esadecimale?
Con questa tastiera:
...che, guarda un pò... ha i numeri da 0 a 9 e le lettere da A a F.
Quindi, un programmatore che volesse sommare 2 numeri, non ha che da scrivere questo programma (quello più sopra)
scrivo 01 (poi premo invio)
scrivo 01 (poi premo invio)
scrivo F1 (poi premo invio)
scrivo E2 (poi premo invio)
e tellellà che su un eventuale display ci sarebbe il risultato di quella somma.
L'Assembler è un passetto in più. C'è una micro sintassi con parole umane, ma il compilatiore Assembler (MASM) si cura di trasmormare quelle parole di un linguaggio unamo (Inglese) nelle nostre care cifre-lettere dell'Esadecimale, ed infine Binario, l'unico che la CPU capisce.
Esempio di istruzioni Assembler X86
mov ax,10 ; scrive 10 nel registro ax
mov bx,cx ; Scrive il valore del registro cx nel registro bx
mov dx,Number ; scrive il valore di Number dentro il registro dx
Questo sotto è un piccolo programma in Assembler che scrive "Hello World" sul monitor. Guardate quante cavolo di istruzionbio bisogna scrivere per vedere una piccola frase sul monitor (finstra nera del DOS)!
Listing 1: 1STPROG.ASM ;
This is a simple program which displays "Hello World!" ; on the screen.
.model small
.stack .data
Message db "Hello World!$" ; message to be display
.code
mov dx,OFFSET Message ; Offset of Message is in DX register
mov ax,SEG Message ; segment of Message is in AX register
mov ds,ax ; DSDX points to string
mov ah,9 ; function 9 - display string
int 21h ; call DOS service
mov ax,4c00h ; return to dos DOS
int 21h ; call DOS service (spedisce la stringa "Hello Word" al monitor, o meglio, alla scheda video) END start ;end here
Quelli dopo il punto e virgola ; sono commenti per capire l'istruzione, ma servono solo a chi legge, non al programma
Qua invece si vede la famigerata istruzione Esadecimale 90 (in Assembler NOP, nessuna operazione) molto nota ad Hacher, o meglio Cracker come il sottoscritto...
Per stasera basta!
Aggiorniamo il Nabbometro:
- Una CPU capisce SOLO il binario
- Una CPU deve contare
- Una CPU ha un Modulo di clock che scandisce il ritmo delle sue operazioni
- Una CPU esegue operazioni aritmetiche e logiche con il Modulo ALU
- Una CPU ha dei piedini, detti anche di FLAG, che indicano che è successo qualcosa di cui tenere conto
- Una CPU ha un numero elevato di Moduli Registri, che memorizzano i dati in attesa di passarli all'ALU o verso le Uscite
- Una CPU capisce SOLO il Binario, linguaggio di BASSO LIVELLO, ma l'uomo ha altre soluzioni di ALTO LIVELLO per programmarla.
- Una CPU da 8 bit in su usa i BYTE, ovvero istruzioni e dati composti da blocchi di 8 cifre, che sono anche due numeri Esadecimali