Rappresentazione e conversione in assembler
Il problema che dobbiamo risolvere in linguaggio assembler è il seguente: dato un numero codificato in una stringa (ASCII), come faccio per convertirlo in un numero in rappresentazione decimale? (stringa di bit). Oppure dato un numero codificato in bit, come faccio per convertirlo in una stringa? (ASCII).
1° caso: Conversione da ASCII in binario
Mettiamo il caso di avere in un vettore (buffer) la cifra "1674" che ovviamente è codificata in ASCII, essendo una stringa:
- '1' = 31h
- '6' = 36h
- '7' = 37h
- '4' = 34h
Ecco come sono posti in memoria i dati: 31h 36h 37h 34h.
Per fare la conversione dobbiamo prendere dal buffer un dato alla volta, convertirlo nel suo corrispondente numero in binario, moltiplicarlo per la rispettiva base e sommarlo con i numeri precedentemente convertiti. In questo caso il nostro numero andrebbe trattato così:
3 2 1 0
N 1 10 6 10 10=10 * 10 * 7 * 4
Vediamo ora una semplice MACRO per convertire il numero:
CONVERSIONE MACRO buffer
mov ch, lunghezza_buffer ; metto in CH la lunghezza del buffer (contatore)
mov si,offset buffer ; SI mi punta alla prima locazione del buffer
mov cl,0
xor ax,ax ; azzero il contenuto di ax
1LOOP:
mov ax,[si] ; metto in AX il primo dato del buffer
and ax,0Fh ; converto il dato da ASCII in BINARIO
mov dx,pesi[cl] ; metto in dx la base per la quale devo moltiplicare il numero
mul dx ; AX * DX e risultato in AX
add ax,N ; sommo il numero con i precedenti già trovati
mov N,ax ; metto la somma in N
inc cl
dec ch
cmp ch,0 ; controllo se il buffer sia finito o no
JNZ 1LOOP ; se non è finito ricomincio da loop se no termino
ENDM
Evidentemente nel buffer chiamato pesi ho i seguenti dati precaricati: 1000 100 10 1. Ovviamente in binario e queste non sono altro che le basi per le quali andrò a moltiplicare volta volta i miei numeri codificati da ASCII.
Molto più semplice se devo convertire un numero con una sola cifra decimale (0-9). L'operazione da fare si riduce in and ax,0Fh
Nota bene: Vi sono altri modi alternativi per la conversione da ASCII in binario: sub ax,'0' oppure sub ax,30H
2° caso: Conversione da binario in ASCII
In questo caso abbiamo il problema opposto al precedente. Il modo di procedere è esattamente l'inverso. Devo successivamente dividere il mio numero per la base 10 in modo da trovare le singole cifre.
-
Calcolatori elettronici
-
Calcolatori Elettronici
-
Riepilogo Esame di Calcolatori Elettronici - Architetture
-
Calcolatori Elettronici I – Commandline Assembler