Estratto del documento

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.

Anteprima
Vedrai una selezione di 1 pagina su 4
Calcolatori Elettronici – Conversione in assembler Pag. 1
1 su 4
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Ingegneria industriale e dell'informazione ING-INF/05 Sistemi di elaborazione delle informazioni

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Sara F di informazioni apprese con la frequenza delle lezioni di Calcolatori Elettronici e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Firenze o del prof Colombo Carlo.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community