Bin - Dec - Hex - Oct

lavalamp.ren (2204 bytes)

 

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 2

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.

 

L'assembly                 INDICE