Bin - Dec - Hex - Oct
In questa pagina vorrei spiegarvi come fare per calcolare numeri binari, decimali ed esadecimali tra di loro, ed infine mostrarvi un piccolo programma che li calcola da solo visualizzando anche il valore ottagonale.
Iniziamo con la conversione di numeri binari nel formato decimale.
Come esempio prenderemo "11010".La prima cosa che dobbiamo fare è girare il numero.Quindi otteremo il numero 01011.Ora possiamo iniziare a calcolare.C'e' una specie di sintassi che possiamo usare,sarebbe: cifra moltiplicata per 2 e poi bisogna quadrare tutto quanto, quindi cubare ecc. continuando sempre con la cifra che segue.Quindi nel nostro caso questo significherebbe per la prima cifra
0 moltiplicato per 2 elevato a 1.La prima cifra però viene calcoata con il 2 elevato a 0, quindi non si inizia con l'uno.Allora la calcolazione giusta è
0 x 20
che corrisponde a 0.Per ottenere il numero decimale dobbiamo sommare i risultati di ogni cifra.Ora il nostro primo risultato è 0, passiamo quindi alla seconda cifra.
1 x 21= 2
1 è la seconda cifra, sempre moltoplicata per 2 elevato all'uno.Quindi sommiamo i primi due risultati che per ora sono 0+2=3.
Passiamo alla terza cifra
0 x 22= 0
Dobbiamo calcolare con il 2 elevato al quadrato, che però non cambia nulla lo stesso.Per ora quindi siamo a 0+2+0=3
1 x 23=8
Ancora un 1, moltiplicato per 2 elevato al cubo che corrisponde all'8.Ecco che aggiorniamo i nostri risultati.
0+2+0+8=11
Ed infine l'ultima cifra
1 x 24=16
Ora sommiamo tutti i risultati: 0+2+0+8+16= 26
Ecco fatto. Il numero 11010 in decimale corrisponde a 26.
Adesso passiamo alla conversione di numeri binari in valorii esadecimali.I valori esadecimali sono 0123456789ABCDEF
Prendiamo come esempio il numero 1101110.Per prima cosa dobbiamo dividere il numero dopo ogni quarta cifra, partendo da destra.Questo corrisponde a
0110:1110
Per completare il numero di 4 cifre ci aggiungiamo 2 zeri.
Ora esaminiamo la prima parte, cioè quella a sinsitra. 0110.Bisogna convertirla in un numero esadecimal, ciò che ora potete fare anche senza calcolatrice.0110 corrisponde al numero 6 in decimale.La seconda parte invece,1110,corrisponde al numero 14.Quindi diamo uno sguardo ai valori esadecimali esistenti e vediamo che la 6 corrisponde sempre ad un 6, mentre il 14 corrisponde alla lettera E.
Bene, il numero 1101110 in esadecimale è proprio 6E.
Se si tratta di un numero a soli 4 cifre esiste anche un altro sistema.prendiamo come esempio 1010. Il principio si basa su 4 cifre che vengono sommate sempre quando si tratta della cifra 1.
X X X X
8 4 2 1 ; ecco le cifre sempre fisse.
Quindi con il nostro esempio questo significa
1 0 1 0
8 (4) 2 (1) ; solamente se si tratta di un 1 la cifra viene sommata
Ciò corrisponde a 8+2=10.Questo ovviamente in decimale, che ora però possiamo convertire in esadecimale semplicemente guardando alla nostra riga con i valori esistenti.Il numero 10 corrisponde ad una A.
Adesso vediamo come si fa a convertire valori esadecimali in quelli decimali
Come esempio prenderemo il valore ABCD.Giriamo le lettere ( DCBA ) e moltiplichiamoli usando il numero 16 di base del sistema esadecimale.
D corrisponde al numero 13, quindi la prima moltiplicazione sarà
1 x 13 = 13
La C invece corrisponde al 12, quindi dobbiamo calcolare
16 x 12 = 192
E lo stesso lo facciamo con la B e la A
16 x 16 = 256 moltiplicato per (B) 11 = 2816
Ed infine la moltiplicazione per la lettera A
256 x 16 = 4096 moltiplicato per (A) 10 = 40960
Ora sommiamo tutti i risultati
13+192+2816+40960 = 43981
Ecco fatto. ABCD corrisponde a 43981 in decimale
Poi abbiamo la conversione di numeri decimali in quelli binari
Come esempio prenderemo il numero 10.Il sistema binario si basa sul numero 2, e dovremo solamente dividere i risultati per ottenere il risultato.
100 : 2 = 50 nessun resto quindi il risultato sarà 0
50 : 2 = 25 nessun resto => 0
25 : 2 = 12 resto:1 => 1
12 : 2 = 6 nessun resto => 0
6 : 2 = 3 nessun resto => 0
3 : 2 = 1 resto: 1 => 1
1 : 2 = 1 resto: 1 => 1
Ed ora dobbiamo solamente leggere le cifre dal basso in su.Quindi il numero 100 in decimale corrisponde al numero 1100100 in binario.
Una tabella abbastanza utile sulla quale ci si può basare potrebbe essere questa qua:
BIN DEC HEX
0000 0 0
0001 1 1
0010 2 2
0011 3 3
0100 4 4
0101 5 5
0110 6 6
0111 7 7
1000 8 8
1001 9 9
1010 10 A
1011 11 B
1100 12 C
1101 13 D
1110 14 E
1111 15 F
Adesso rivolgiamoci al programma che ci calcola i valori in dec,bin,hex ed oct automaticamente usando ovviamente l'assembler.
push ax ;salva il valore di ax
mov bx, numero ; con "numero" dobbiamo definire il numero di base con il quale
il nostro programma farà i calcoli.(word)
xor cx,cx ; azzeriamo cx
xor dx,dx ; stessa cosa vale per dx
div bx ; questo serve per caricare la cifra
push dx ; salviamo la cifra
inc cx ; incrementa cx di 1
test ax,ax ; qui controlliamo se ci sono ancora altre cifre
jnz XXX ; in questo caso dobbiamo ripetere la "procedura"
mov ax,minimo ; qui carichiamo (la word) che definisce la lunghezza minima del
numero.Sarebbe opportuno scegliere 1 come valore di base
cmp ax,cx ; ecco che vediamo se la grandezza è superiore a quella che vogliamo
jbe XXX ; facendolo continuare solamente se corrisponde al numero esatto
oppure ad un numero inferiore a quello specificato
mov bx,cx ; salviamo il valore delle cifre
sub ax,cx ; calcoliamo la quantità di caratteri sottraendo cx da ax
mov cx, ax ; copiamo il valore in cx
mov dl, carattere ; ed ora leggiamo il carattere (db " " )
mov ah, 2 ; funzione 2 visualizza il carattere
int 21h
pop dx ; carichiamo ancora una cifra
or dl,"0" ; per convertirla poi in ascii
cmp dl,"9" ; corrisponde ad una cifra tra 0 e 9
Ecco fatto.Ora ci manca solamente una specie di inizio, con il quale possiamo inziare il programma e ovviamente inserire il numero che vogliamo, con il quale verrano poi eseguiti i calcoli.
mov ax,XXX ; è qui che dobbiamo inserire il nostro numero
poi facciamo eseguire tutto il codice di sopra
mov word ptr numero, 16 ; il nostro numero di base con il sistema esadecimale
basato sul 16
mov word ptr numero,2 ; la stessa cosa per il sistema binario
mov word ptr numero, 8 ; ed infine il sistema ottagonale
Bene, con questi dati dovreste essere in grado di scrivere un semplice programma che fa questi calcoli.Alla fine qualche riga per tornare al DOS e tutto quanto è finito.