L Assembler 8086. Istruzioni Aritmetiche. M. Rebaudengo - M. Sonza Reorda. Politecnico di Torino Dip. di Automatica e Informatica



Documenti analoghi
CALCOLATORI ELETTRONICI II

I.T.I. A. RIGHI e VIII Napoli Specializzazione Informatica Tradizionale Corso D Materia: Sistemi. Elementi di Assembly 8086

L Assembler 80x86 Concetti Generali. M. Rebaudengo M. Sonza Reorda P. Bernardi

4. Operazioni aritmetiche con i numeri binari

2.12 Esercizi risolti

CALCOLATORI ELETTRONICI II

Parte II Indice. Operazioni aritmetiche tra valori rappresentati in binario puro. Rappresentazione di numeri con segno

(71,1), (35,1), (17,1), (8,1), (4,0), (2,0), (1,0), (0,1) 0, = 1, 431 0, = 0, 862 0, = 1, 792 0, = 1, 448 0, = 0, 896

Assembler 8086/8088: Concetti Generali

Sistemi di Numerazione

Architettura degli Elaboratori I Esercitazione 1 - Rappresentazione dei numeri

Esercitazione Informatica I AA Nicola Paoletti

Alessandro Pellegrini

Fondamenti di Informatica

Architettura degli elaboratori (A)

Testi di Esercizi e Quesiti 1

Rappresentazione delle informazioni

Materiale di approfondimento: numeri interi relativi in complemento a uno

Operazioni Aritmetiche e Codici in Binario Giuseppe Talarico 23/01/2013

Informatica Generale 02 - Rappresentazione numeri razionali

Quinto Homework. Indicare il tempo necessario all'esecuzione del programma in caso di avvio e ritiro fuori ordine.

4 3 4 = 4 x x x 10 0 aaa

Informatica Generale (Prof. Luca A. Ludovico) Presentazione 5.1 Operazioni aritmetiche nel sistema binario

CLASSE III A I.T.I. (ABACUS) SISTEMI DI ELABORAZIONE E TRASMISSIONE DEI DATI VERIFICA DI RECUPERO

Elementi di informatica

SISTEMI DI NUMERAZIONE IL SISTEMA DECIMALE

Sistemi di Numerazione Binaria NB.1

Aritmetica dei Calcolatori 2

Cenni ad Assembly Intel

LA CPU INTEL Vantaggi dei programmi Assembly

RAPPRESENTAZIONE BINARIA DEI NUMERI. Andrea Bobbio Anno Accademico

AMBIENTE DI SIMULAZIONE ASIM

Informatica. Rappresentazione dei numeri Numerazione binaria

Codifica dei numeri negativi

Rappresentazione dei numeri in un calcolatore

ESEMPIO 1: eseguire il complemento a 10 di 765

Informazione analogica e digitale

not ah ; ah = F7h (247) perche' il complemento a 1 di 8 ( )

ASSEMBLER 68K parte 2

ESERCIZI di FONDAMENTI DI INFORMATICA RAPPRESENTAZIONE DEI NUMERI

SISTEMI DI NUMERAZIONE E CODICI

Esercizi per il recupero del debito formativo:

Lez. 3 L elaborazione (II parte) Prof. Pasquale De Michele Gruppo 2

Sommario. Addizione naturale

Codifica binaria dei numeri

La somma. Esempio: Il prodotto. Esempio:

Architettura (10/9/2003) Pag. 1/6. Cognome e Nome (in stampatello):

Architettura della CPU e linguaggio assembly Corso di Abilità Informatiche Laurea in Fisica. prof. ing. Corrado Santoro

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU

SISTEMI DI NUMERAZIONE DECIMALE E BINARIO

AXO Architettura dei Calcolatori e Sistema Operativo. processo di assemblaggio

Von Neumann. John Von Neumann ( )

Lezione 3. Sommario. Le operazioni aritmetiche binarie. L aritmetica binaria. La somma La sottrazione La moltiplicazione

Programmazione in linguaggio assembly per architetture Intel 8088

Operazioni binarie fondamentali

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

Lezione 1: L architettura LC-3 Laboratorio di Elementi di Architettura e Sistemi Operativi 10 Marzo 2014

Parte 1. Vettori di bit - AA. 2012/13 1.1

Utilizzo delle formule in Excel

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.6. Unità di controllo microprogrammata

Il microprocessore 8086

Un circuito integrato è una piastrina di silicio (o chip), quadrata o rettangolare, sulla cui superficie vengono realizzati e collegati

Elementi di informatica

Breve guida AL LINGUAGGIO ASSEMBLY (emulatore EMU8086)

Esempio di moltiplicazione come somma e spostamento

Università degli Studi di Cassino Corso di Fondamenti di Informatica Codifica di dati e istruzioni. Anno Accademico 2010/2011 Francesco Tortorella

FORMULE: Operatori matematici

Introduzione. Università degli studi di Cassino. Ing. Saverio De Vito Tel.:

L unità di controllo. Il processore: unità di controllo. Le macchine a stati finiti. Struttura della macchina a stati finiti

Caratteri e stringhe Esercizi risolti

I sistemi di numerazione

CPU. Maurizio Palesi

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1

Richiesta pagina PHP (es: index.php)

FONDAMENTI DI INFORMATICA

Sistemi di Elaborazione a Microprocessore Procedure e Macro. L A ssem bler Procedure e Macro. M. Rebaudengo - M.

SCHEDA DI RECUPERO SUI NUMERI RELATIVI

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

= 1*2^7 + 1*2^6 + 0*2^5 + 1*2^4 + 0*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = 210

PROVA INTRACORSO TRACCIA A Pagina 1 di 6

ARCHITETTURA DEI CALCOLATORI VOLUME I

Codifica binaria dei numeri relativi

2. Codifica dell informazione

Istruzioni di modifica della sequenza di elaborazione

INFORMATICA - I puntatori Roberta Gerboni

la scienza della rappresentazione e della elaborazione dell informazione

Tecniche per il progetto di sistemi elettronici tolleranti ai guasti

Processore Danilo Dessì. Architettura degli Elaboratori.

Esempio: dest = parolagigante, lettere = PROVA dest (dopo l'invocazione di tipo pari ) = pprrlogvgante

Il linguaggio assembly 8086

Fondamenti di Informatica Ingegneria Clinica Lezione 19/11/2009. Prof. Raffaele Nicolussi

Sistema operativo: Gestione della memoria

Capitolo Quarto...2 Le direttive di assemblaggio di ASM Premessa Program Location Counter e direttiva ORG

Aritmetica dei Calcolatori 1

ESERCIZI SUGLI AUTOMI A STATI FINITI

IL CODICE BINARIO. Il codice binario. Codifica posizionale. Aritmetica binaria

Il Processore: i registri

Sistemi di numerazione: generalità

Il processore. Il processore. Il processore. Il processore. Architettura dell elaboratore

Tipi elementari, costanti. Tipi di dati. VALORI: un insieme dei valori del tipo OPERAZIONI: per operare su tali valori. Tipi. intero reale carattere

Transcript:

L Assembler 8086 M. Rebaudengo - M. Sonza Reorda Politecnico di Torino Dip. di Automatica e Informatica 1 M. Rebaudengo, M. Sonza Reorda Si suddividono in: istruzioni per il calcolo binario istruzioni per il calcolo tra numeri BCD (non trattate). 2 M. Rebaudengo, M. Sonza Reorda Maurizio Rebaudengo 1 Matteo Sonza Reorda

Formato dei Dati nelle Istruzioni Aritmetiche L 8086 può eseguire operazioni aritmetiche su numeri nei seguenti formati: numeri binari senza segno, su 8 o 16 bit; numeri binari con segno, su 8 o 16 bit; numeri decimali packed: ogni byte contiene due numeri decimali codificati in BCD; la cifra più significativa sta nei 4 bit superiori; numeri decimali unpacked: ogni byte contiene un solo numero decimale BCD nei 4 bit inferiori; i 4 bit superiori devono essere a zero se il numero è usato in un operazione di moltiplicazione o divisione. 3 M. Rebaudengo, M. Sonza Reorda Le istruzioni ADD e SUB Formato: ADD dest, sorg SUB dest, sorg Funzionamento: L istruzione ADD esegue un addizione tra l operando dest e l operando sorg e scrive il risultato nell operando dest; l operando sorg rimane immutato. L istruzione SUB esegue una sottrazione tra l operando dest e l operando sorg e scrive il risultato nell operando dest; l operando sorg rimane immutato. Le istruzioni ADD e SUB modificano il valore di tutti i flag (AF, PF, CF, SF, OF, ZF). 4 M. Rebaudengo, M. Sonza Reorda Maurizio Rebaudengo 2 Matteo Sonza Reorda

Restrizioni sulle istruzioni ADD e SUB Gli operandi devono essere dello stesso tipo (o entrambi byte o entrambi word). L operando destinazione può essere un registro, oppure una locazione di memoria. L operando sorgente può essere un registro, una locazione di memoria, oppure un valore immediato. Non è lecito eseguire l istruzione tra due locazioni di memoria. ADD VAL1, VAL2 ; ERRORE!!! Si può sostituire con: MOV AH, VAL2 ADD VAL1, AH 5 M. Rebaudengo, M. Sonza Reorda L istruzione CBW Formato: CBW Funzionamento: L istruzione CBW permette di convertire un byte nella word equivalente. L istruzione CBW esegue l estensione del segno del contenuto del registro AL a tutto il registro AH: se AL contiene un numero positivo, AH è caricato con il valore 00H; se AL contiene un numero negativo, AH è caricato con il valore FFH. 6 M. Rebaudengo, M. Sonza Reorda Maurizio Rebaudengo 3 Matteo Sonza Reorda

L istruzione CBW (segue) L istruzione CBW risulta utile quando si vuole eseguire un operazione di addizione o sottrazione tra un numero memorizzato in un byte ed un numero memorizzato in una word. Le operazioni da eseguire sono: caricare il dato di tipo byte in AL eseguire la conversione da byte a word con l istruzione CBW eseguire l operazione aritmetica desiderata tra AX ed il dato di tipo word. Esempio MOV CBW ADD AL, VALORE SI, AX 7 M. Rebaudengo, M. Sonza Reorda L istruzione ADC Formato: ADC dest, sorg Funzionamento: L istruzione ADC somma al contenuto dell operando dest il contenuto dell operando sorg ed il valore del flag CF. L istruzione ADC ha il seguente comportamento: se CF vale 0 l istruzione ADC si comporta come un istruzione ADD; se CF vale 1 l istruzione ADC aggiunge 1 al risultato ottenuto con un istruzione ADD. 8 M. Rebaudengo, M. Sonza Reorda Maurizio Rebaudengo 4 Matteo Sonza Reorda

Somma tra numeri interi su 32 bit Per eseguire le operazioni aritmetiche di somma tra numeri di tipo doubleword occorre sommare coppie di word, cominciando da quella meno significativa. Le operazioni da eseguire sono: si sommano le due word meno significative utilizzando l istruzione ADD si sommano le due word più significative utilizzando l istruzione ADC. 9 M. Rebaudengo, M. Sonza Reorda.MODEL.STACK.DATA NUMA DD? NUMB DD? NUMC DD?.CODE small Somma tra numeri su 32 bit MOV AX, WORD PTR NUMA ; somma tra le 2 word ADD AX, WORD PTR NUMB ; meno significative MOV WORD PTR NUMC, AX MOV AX, WORD PTR NUMA+2 ; somma tra le due word ADC AX, WORD PTR NUMB+2 ; più significative + CF MOV WORD PTR NUMC+2, AX 10 M. Rebaudengo, M. Sonza Reorda Maurizio Rebaudengo 5 Matteo Sonza Reorda

Somma tra numeri su 64 bit.model small.stack.data NUMA DQ? NUMB DQ? NUMC DQ?.CODE CLC ; azzeramento del flag CF LEA SI, WORD PTR NUMA LEA DI, WORD PTR NUMB LEA BX, WORD PTR NUMC 11 M. Rebaudengo, M. Sonza Reorda MOV CX, 4 ciclo: MOV AX, [SI] ADC AX, [DI] ; [DI] + [SI] + CF MOV [BX], AX INC SI INC SI INC DI INC DI INC BX INC BX LOOP ciclo 12 M. Rebaudengo, M. Sonza Reorda Maurizio Rebaudengo 6 Matteo Sonza Reorda

L istruzione SBB Formato: SBB dest, sorg Funzionamento: L istruzione SBB esegue la sottrazione tra l operando dest e l operando sorg; il valore del flag CF viene sottratto al risultato ed il valore ottenuto viene copiato nell operando dest; l operando sorg rimane immutato. L istruzione SBB ha il seguente comportamento: se CF vale 0 l istruzione SBB si comporta come un istruzione SUB; se CF vale 1 l istruzione SBB sottrae 1 al risultato ottenuto con un istruzione SUB. 13 M. Rebaudengo, M. Sonza Reorda Differenza tra numeri su 64 bit.model small.stack.data NUMA DQ? NUMB DQ? NUMC DQ?.CODE CLC ; azzeramento del flag CF LEA SI, WORD PTR NUMA LEA DI, WORD PTR NUMB LEA BX, WORD PTR NUMC 14 M. Rebaudengo, M. Sonza Reorda Maurizio Rebaudengo 7 Matteo Sonza Reorda

MOV CX, 4; 4 iterazioni ciclo: MOV AX, [SI] SBB AX, [DI] ; [SI] - [DI]- CF MOV [BX], AX INC SI INC SI INC DI INC DI INC BX INC BX LOOP ciclo 15 M. Rebaudengo, M. Sonza Reorda Le istruzioni INC e DEC Formato: INC operando DEC operando Funzionamento: L istruzione INC incrementa operando di un unità e copia il risultato in operando stesso. L istruzione DEC decrementa operando di un unità e copia il risultato in operando stesso. Le due istruzioni aggiornano tutti i flag di stato tranne il flag CF. 16 M. Rebaudengo, M. Sonza Reorda Maurizio Rebaudengo 8 Matteo Sonza Reorda

L istruzione NEG Formato: NEG operando Funzionamento: L istruzione NEG cambia il segno di operando, che si assume rappresentato in complemento a 2. L operando puè essere un registro oppure il contenuto di una locazione di memoria. L istruzione NEG aggiorna lo stato di tutti i flag di stato. 17 M. Rebaudengo, M. Sonza Reorda Calcolo del modulo di un vettore Specifiche: Si realizzi un programma che calcoli il modulo del contenuto di tutte le celle di un vettore di interi. main() { int i, vett[10]; for (i=0 ; i < 10 ; i++) if (vett[i] < 0) vett[i] *= -1; } 18 M. Rebaudengo, M. Sonza Reorda Maurizio Rebaudengo 9 Matteo Sonza Reorda

Soluzione Assembler LUNG EQU 10.MODEL small.stack.data VETT DW LUNG DUP (?).CODE MOV SI, 0 MOV CX, LUNG 19 M. Rebaudengo, M. Sonza Reorda ciclo: CMP VETT[SI], 0 ; elemento < 0? JNL continua ; No: va a continua NEG VETT[SI] ; Sì: calcola il modulo continua: ADD SI, 2 ; scansione del vettore LOOP ciclo 20 M. Rebaudengo, M. Sonza Reorda Maurizio Rebaudengo 10 Matteo Sonza Reorda

Le istruzioni MUL e IMUL Formato MUL operando IMUL operando Uso Permettono di eseguire l operazione di moltiplicazione tra numeri interi senza segno (MUL) e con segno (IMUL). Funzionamento L operando può essere un registro oppure una locazione di memoria; il suo tipo può essere BYTE oppure WORD. Non è ammessa la moltiplicazione per un valore immediato. 21 M. Rebaudengo, M. Sonza Reorda Le istruzioni MUL e IMUL (segue) I fattori della moltiplicazione devono essere dello stesso tipo (o entrambi byte o entrambi word). Il processore salva il risultato della moltiplicazione in un operando di lunghezza doppia rispetto ai fattori. I due casi possibili sono: se si specifica un operando di tipo BYTE, il processore esegue la moltiplicazione tra l operando ed il contenuto del registro AL e copia il risultato nel registro AX. se si specifica un operando di tipo WORD, il processore esegue la moltiplicazione tra l operando ed il contenuto del registro AX e copia il risultato nei registri DX (word più significativa) ed AX (word meno significativa). 22 M. Rebaudengo, M. Sonza Reorda Maurizio Rebaudengo 11 Matteo Sonza Reorda

Le istruzioni MUL e IMUL (segue) Le istruzioni di moltiplicazione aggiornano i flag CF ed OF in modo da segnalare se la parte più significativa del risultato è nulla: in una moltiplicazione tra byte, i flag CF ed OF valgono 0 se il registro AH è nullo; in una moltiplicazione tra word, i flag CF ed OF valgono 0 se il registro DX è nullo. 23 M. Rebaudengo, M. Sonza Reorda Calcolo del quadrato.model small.stack.data NUM DW? RES DD?.CODE MOV WORD PTR RES+2, 0 MOV AX, NUM ; AX = NUM MUL AX ; DX,AX = NUM * NUM MOV WORD PTR RES, AX JNC esce ; word alta = 0? MOV WORD PTR RES+2, DX esce: 24 M. Rebaudengo, M. Sonza Reorda Maurizio Rebaudengo 12 Matteo Sonza Reorda

Moltiplicazione per una costante Istruzioni introdotte a partire dall 80186. Formato IMUL op, cost IMUL dest, op, cost Uso Permettono di eseguire l operazione di moltiplicazione tra un numero intero ed un valore immediato. Funzionamento: Gli operandi op e dest possono essere uno dei registri general purpose. Il processore moltiplica l operando op per la costante; se è specificato il campo dest l istruzione copia il risultato nel registro dest, altrimenti lo copia nel registro op. 25 M. Rebaudengo, M. Sonza Reorda Moltiplicazione per una costante (segue) Il risultato del prodotto è memorizzato comunque su 16 bit. Occorre fare attenzione alla correttezza del risultato; se il risultato dell operazione è rappresentabile su una word, l istruzione azzera i flag CF ed OF; in caso contrario, l istruzione pone a 1 i flag CF ed OF (overflow nella moltiplicazione). 26 M. Rebaudengo, M. Sonza Reorda Maurizio Rebaudengo 13 Matteo Sonza Reorda

Conversione di valuta Specifiche: Si realizzi un frammento di programma che converte il costo di un prodotto da franchi francesi in lire italiane. #define FFRANCO 295 main() { int f_costo, it_costo; it_costo = f_costo*ffranco; } 27 M. Rebaudengo, M. Sonza Reorda FFRANCO EQU 295.386.MODEL small.stack.data F_COST DW? IT_COST DW? Soluzione Assembler ERR_MSG DB "Overflow nella moltiplicazione",0dh,0ah,"$".code MOV AX, F_COST IMUL AX, FFRANCO ; AX = AX * 297 JNC ok ; CF = 1? LEA DX, ERR_MSG ; Si: messaggio di errore MOV AH, 09H INT 21H JMP esci ok: MOV IT_COST, AX ; No 28esci: M. Rebaudengo, M. Sonza Reorda Maurizio Rebaudengo 14 Matteo Sonza Reorda

Moltiplicazione tra dati di tipo diverso Le istruzioni MUL ed IMUL permettono di eseguire solo la moltiplicazione tra dati dello stesso tipo (o entrambi byte od entrambi word). È possibile moltiplicare un byte per una word utilizzando opportunamente l istruzione CBW. Esempio:.DATA BVAL DB? WVAL DW?.CODE MOV AL, BVAL CBW IMUL WVAL 29 M. Rebaudengo, M. Sonza Reorda Le istruzioni DIV e IDIV Formato DIV operando IDIV operando Uso Permettono di eseguire l operazione di divisione tra numeri interi senza segno (DIV) e con segno (IDIV). Funzionamento: L operando può essere un registro oppure una locazione di memoria. Non è ammessa la divisione per un valore immediato. 30 M. Rebaudengo, M. Sonza Reorda Maurizio Rebaudengo 15 Matteo Sonza Reorda

Le istruzioni DIV e IDIV (segue) Le istruzioni di divisione possono eseguire due tipi di operazioni: divisione tra un operando di tipo word ed un operando di tipo byte; divisione tra un operando di tipo doubleword ed un operando di tipo word. 31 M. Rebaudengo, M. Sonza Reorda Le istruzioni DIV e IDIV (segue) Le istruzioni di divisione restituiscono due risultati: il quoziente ed il resto della divisione. Il comportamento delle istruzioni di divisione è diverso a seconda del tipo di operazione: se l operando è di tipo BYTE, il processore esegue la divisione tra il contenuto del registro AX (dividendo) ed il contenuto dell operando (divisore); come risultato dell operazione l istruzione restituisce il quoziente nel registro AL ed il resto nel registro AH. se l operando è di tipo WORD, il processore esegue la divisione tra il contenuto dei registri DX,AX (dividendo) ed il contenuto dell operando (divisore); come risultato dell operazione l istruzione restituisce il quoziente nel registro AX ed il resto nel registro DX. 32 M. Rebaudengo, M. Sonza Reorda Maurizio Rebaudengo 16 Matteo Sonza Reorda

Le istruzioni DIV e IDIV (segue) Le istruzioni di divisione non aggiornano i flag. Nel caso in cui il divisore sia troppo piccolo, il processore rileva l errore e salta alla procedura di gestione dell interruzione causata da una divisione per 0 (interrupt di tipo 0). Esempio MOV AX, 1024 MOV BL, 2 DIV BL ; 1024 / 2 = 512 ; non sta su un byte ; overflow di divisione 33 M. Rebaudengo, M. Sonza Reorda Media di un insieme di numeri Specifiche Si realizzi un frammento di codice che calcoli il valor medio dei numeri positivi memorizzati in un vettore di numeri interi con segno. main() { int i, count=0, somma=0, avg, vett[10]; for (i=0 ; i<10 ; i++) if (vett[i] > 0) { count++; somma += vett[i]; } avg = somma/count; } 34 M. Rebaudengo, M. Sonza Reorda Maurizio Rebaudengo 17 Matteo Sonza Reorda

Soluzione Assembler LUNG EQU 10.MODEL small.stack.data VETT DW LUNG DUP (?) COUNT DB? ; numero di positivi AVG DB?.CODE MOV CX, LUNG MOV SI, 0 MOV BX, 0; somma totale MOV COUNT, 0 35 M. Rebaudengo, M. Sonza Reorda ciclo: CMP VETT[SI], 0 ; VETT[] > 0? JNG continua ; No: va a continua INC COUNT ; Sì: incrementa il ; contatore ADD BX, VETT[SI] ; BX = BX + VETT[SI] continua: ADD SI, 2 ; scansione del vettore LOOP ciclo MOV AX, BX ; copia in AX del ; dividendo IDIV COUNT ; BX / COUNT MOV AVG, AL ; copia in AVG del ; quoziente 36 M. Rebaudengo, M. Sonza Reorda Maurizio Rebaudengo 18 Matteo Sonza Reorda

L istruzione CWD Formato CWD Funzionamento: L istruzione CWD permette di convertire un word nella doubleword equivalente. L istruzione CWD esegue l estensione del segno del contenuto del registro AX a tutto il registro DX: se AX contiene un numero positivo, DX è caricato con il valore 0000H; se AX contiene un numero negativo, DX è caricato con il valore FFFFH. 37 M. Rebaudengo, M. Sonza Reorda L istruzione CWD (segue) L istruzione CWD risulta utile quando si vuole eseguire un operazione di divisione tra due numeri su 16 bit. Le operazioni da eseguire sono: caricare il dividendo in AX; eseguire la conversione in doubleword con l istruzione CWD; eseguire l operazione di divisione. Esempio MOV AX, CX CWD IDIV BX 38 M. Rebaudengo, M. Sonza Reorda Maurizio Rebaudengo 19 Matteo Sonza Reorda