Anteprima
Vedrai una selezione di 1 pagina su 4
Calcolatori Elettronici – Conversione in assembler Pag. 1
1 su 4
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
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)

Il problema non è difficile da risolvere, basta ricordarsi dei metodi che si utilizzano per convertire numeri dalle e nelle varie basi.

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

numeriprecedentemente convertiti. In questo caso il nostro numero andrebbe trattato così :3 2 1 0N 1 10 6 10 10=10 ∗  ∗  ∗7  ∗4vediamo ora una semplice MACRO per convertire il numero :CONVERSIONE MACRO buffermov ch, lunghezza_buffer ; metto in CH la lunghezza del buffer (contatore)mov si,offset buffer ; SI mi punta alla prima locazione del buffermov cl,0xor ax,ax ; azzero il contenuto di ax 1LOOP:mov ax,[si] ; metto in AX il primo dato del bufferand ax,0Fh ; converto il dato da ASCII in BINARIOmov dx,pesi[cl] ; metto in dx la base per la quale devo moltiplicare il numeromul dx ; AX * DX e risultato in AXadd ax,N ; sommo il numero con i precedenti già trovatimov N,ax ; metto la somma in Ninc cldec chcmp ch,0 ;controllo se il buffer sia finito o noJNZ loop ;se non è finito ricomincio da loop se no terminoENDMEvidentemente nel buffer chiamato pesi ho i seguenti dati precaricati1000100101Ovviamente in Binario e queste non sono

altro le basi per le quali andrò a moltiplicare volta volta imiei 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 22° 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 decimali da convertire in ASCII

1674:10 -> 167 e resto 4 (converto il 4 in ASCII -> 34h e lo inserisco nel buffer p.s ultima posizione)

167:10 -> 16 e resto 7 (converto il 7 -> 37h e lo inserisco nella penultima posizione)

e così via fino all'ultima cifra, che dovrà essere 1. In questo modo alla fine della conversione avrò un buffer con inseriti i


seguenti dati31h36h37h34hNon è altro che il mio numero codificato in ASCII ,ovvero in stringa “1674”
Supponiamo di avere nel registro AX in numero 1674 ( in binario ovviamente ).
AX0000101110001010
Vediamo adesso una Macro per convertire il numero in ASCII:

CONVERSIONE MACRO buffer
    mov si, offset buffer
    add si, 4 ; faccio puntare SI all'ultima locazione di buffer
    mov cl, 10 ;carico in CL la base per la quale devo dividere
    mov ch, lunghezza_buffer ; inizializzo il contatore con la lunghezza del buffer (4)
LOOP:
    div ax, cl ; AX/CL quoziente in AL e resto in AH
    or ah, 30H
    mov [si], ah

Dettagli
Publisher
A.A. 2012-2013
4 pagine
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.