Vari e semplici programmi.

Slides:



Advertisements
Presentazioni simili
in un programma Assembler
Advertisements

Introduzione alla programmazione lll
DAL PROBLEMA ALL'ALGORITMO Problemi e Programmi Paolo Amico
GENERAZIONE CODICE MACCHINA
Istruzioni per il Controllo del Processore
Programmazione Avanzata
Introduzione al linguaggio assembly del microprocessore a parte
Istruzioni per la Manipolazione dei Bit
Architettura degli Elaboratori II (canale P-Z) Istruzioni di controllo Dott. Franco Liberati.
Strutture di Controllo
Cicli in Fortran I cicli consentono di eseguire una sequenza di istruzioni più di una volta due tipi: Cicli iterativi Cicli while.
1 M. Rebaudengo, M. Sonza Reorda Politecnico di Torino Dip. di Automatica e Informatica M. Rebaudengo - M. Sonza Reorda L’Assembler 8086 Istruzioni per.
Il ciclo while.  Permette di ripetere un blocco di istruzioni fino a quando non si verifica un determinato evento  Il ciclo while può essere realizzato.
1 M. Rebaudengo, M. Sonza Reorda Politecnico di Torino Dip. di Automatica e Informatica M. Rebaudengo - M. Sonza Reorda L’Assembler 8086 Procedure e Macro.
1 M. Rebaudengo, M. Sonza Reorda Politecnico di Torino Dip. di Automatica e Informatica M. Rebaudengo - M. Sonza Reorda L’Assembler 8086 Istruzioni per.
1 M. Rebaudengo, M. Sonza Reorda Politecnico di Torino Dip. di Automatica e Informatica M. Rebaudengo - M. Sonza Reorda L’Assembler 8086 Istruzioni per.
1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( )
SPIM Esercizi. Esercizio 1 – il comando ‘li’ Il codice deve eseguire una singola operazione: mettere il valore immediato 1023 nel registro s3.
Fondamenti di Informatica1 Linguaggi Diversi tipi di linguaggi: –Imperativi –Funzionali –Dichiarativi Tutti basati sulla traduzione nell'unico linguaggio.
Script bash I file di comandi in Linux. BASH  Bourne Again Shell  Modalità interattiva o batch (file di comandi)  Ambiente di programmazione “completo”
2a + 10b abx2 3a + 1 y 2 a + 1 x + 2y a − Espressioni algebriche
L’addizione ESEMPIO Rappresentazione
Programmazione: Iterazione Esistono tre tipi di iterazione fondamentali e vedremo la corrispondenza dei relativi diagrammi a blocchi e la loro traduzione.
Un semplice programma C /* Programma che stampa un saluto */ #include main() { printf(“Hello World!\n”); }
.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.
© 2007 SEI-Società Editrice Internazionale, Apogeo
Le operazioni con le frazioni
ASSEMBLY Seconda parte.
Esercizio fatture.
Introduzione al linguaggio C
Comandi assembly Il termine assembly deriva dal programma traduttore in linguaggio macchina assembler, l’assemblatore non fa altro che assemblare il.
7. Strutture di controllo Ing. Simona Colucci
(7x + 8x2 + 2) : (2x + 3) 8x2 + 7x + 2 2x + 3 8x2 + 7x + 2 2x + 3 4x
Cammino dei Dati (Datapath)
Commenti Ogni riga che comincia con il simbolo # non viene letta dall’interprete per cui rappresenta un modo per commentare il listato # Questo è un esempio.
Prof.ssa Carolina Sementa
Programmazione strutturata
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
PROGRAMMAZIONE BASH – ISTRUZIONE IF
CICLO DO – WHILE LINGUAGGIO C.
Process synchronization
(-9) : (-3) = +3 La DIVISIONE è un’operazione che si esegue tra
I MONOMI.
L’addizione ESEMPIO Rappresentazione
Un editor intelligente!!!
Linguaggio C++ Selezione.
© 2007 SEI-Società Editrice Internazionale, Apogeo
START ALGORITMO PER L’ACCENSIONE DEL CELLULARE ACCENDI CELLULARE
Strutture di Controllo
Secondo Programma in C.
{ } Multipli di un numero M4 ESEMPIO 0, 4, 8, 12, 16, 20, 24, …
Azione delle istruzioni
Esempi di algoritmi.
Prof.ssa Carolina Sementa
IL LINGUAGGIO ASSEMBLY
A = InputBox("Immetti un numero")
Esercitazione su Instruction Level Parallelism
Azione delle istruzioni
Sistemi Digitali.
APPUNTI SUL LINGUAGGIO C Esercizi sugli array e strutture
La struttura dei primi programma in C
Le istruzioni di iterazione in C
Processi decisionali e funzioni di controllo
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
monodimensionali: Vettori bidimensionali: Matrici
Le istruzioni di selezione condizionale in C
Lezione Terza Primi passi di programmazione
Informatica CdL Scienze e Tecniche Psicologiche a.a
Array (vettori) In linguaggio C / C++.
Relazioni tra CPU e Memoria e Dispositivi I/O
Transcript della presentazione:

Vari e semplici programmi. Programmi in Assembly 8086 Vari e semplici programmi.

Programma scambia il valore tra 2 variabili TITLE scambia .MODEL SMALL .STACK .DATA primo DB 01h ; variabile con assegnazione valore secondo DB 02h ; variabile con assegnazione valore .CODE .STARTUP MOV AL, primo ; sposta la prima variabile nel registro AL MOV AH, secondo ; sposta la seconda variabile nel registro AH MOV primo, AH ; sposta il contenuto del registro AH nella prima variabile MOV secondo, AL ; sposta il contenuto del registro AL nella seconda variabile MOV AL, 00h ; funzione di ritorno MOV AH, 4Ch ; al sistema operativo INT 21h END

Programma che esegue la somma tra 2 variabili TITLE Somma2numeri .MODEL small .STACK .DATA OP1 DB 11 ; variabile con assegnazione valore OP2 DB 7 ; variabile con assegnazione valore RIS DB ? ; variabile per risultato senza assegnazione valore .CODE .STARTUP MOV AL, OP1 ; sposta la prima variabile nel registro AL ADD AL, OP2 ; esegue la somma MOV RIS, AL ; sposta/memorizza il risultato in RIS MOV AH,4Ch ; in alternativa alla funzione 4Ch di INT 21h INT 21h ; si potrebbe usare la direttiva - .EXIT END

Programma che esegue la moltiplicazione tra 2 variabili TITLE Moltiplicazione2numeri .MODEL small .STACK .DATA OP1 DB 7 ; variabile con assegnazione valore OP2 DB 6 ; variabile con assegnazione valore RIS DW ? ; variabile risultato, a 16 bit, senza assegnazione valore .CODE .STARTUP MOV AL, OP1 ; sposta la prima variabile nel registro AL perché è quello dedicato MUL OP2 ; esegue la Moltiplicazione, tra OP2 e quello che è presente in AL MOV RIS, AX ; sposta il risultato presente in AX nella variabile RIS .EXIT END

Programma che esegue la divisione tra 2 variabili TITLE Divisione2numeri .MODEL small .STACK .DATA Dividendo DB 12 ; variabile con assegnazione valore Divisore DB 6 ; variabile con assegnazione valore Quoziente DB ? ; variabile senza assegnazione valore Resto DB ? ; variabile senza assegnazione valore .CODE .STARTUP MOV AH, 00D ; azzera AH MOV AL, Dividendo ; sposta il dividendo nel registro AL DIV Divisore ; esegue la divisione, tra quello che è presente in AX e la variabile Divisore MOV Quoziente, AL ; sposta/memorizza in Quoziente il contenuto di AL MOV Resto, AH ; sposta/memorizza in Resto il contenuto di AH .EXIT END

Programma che esegue la somma dei valori presente nel vettore VET TITLE SommanumeriVet DIM EQU 10 ; DIM è dichiarata come costante .MODEL small .STACK .DATA VET DB 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 ; dichiarazione e valori caricati nel vettore SOMMA DB ? .CODE .STARTUP MOV AL, 0 ; inizializza a 0 il registro AL MOV CL, DIM ; carica in CL la dimensione del vettore MOV DI, 0 ; azzera il registro DI, registro indice destinazione Ciclo: ; etichetta ADD AL, VET[DI] ; somma in AL l'elemento corrispondente a VET indicato da DI ADD DI, 1 ; incrementa DI puntando all'elemento successivo DEC CL ; decrementa il contatore CMP CL, 0 ; confronta il contatore CL con zero(0) JNZ Ciclo ; se CL è a zero termina, altrimenti ripete il ciclo MOV SOMMA, AL ; sposta/memorizzo il risultato in SOMMA .EXIT END

Programma che richiede in input un numero da tastiera, e stampa a video l’equivalente in ♥ TITLE Stampa_cuori .MODEL small .STACK .DATA NUM DB ? ; variabile MESSAGE DB 'INSERISCI UN NUMERO : ','$' .CODE MOV AX,@DATA ; blocco di istruzioni MOV DS,AX ; che servono MOV DX,OFFSET MESSAGE ; per stampare a MOV AH,9D ; video il messaggio INT 21H MOV AH, 1D ; funzione per l’input da INT 21H ; tastiera del numero SUB AL,48 ; sottrae lo 0 ASCII per determinare il valore. CMP AL,0 ; confronto AL (il valore) con 0 JE FINE ; se il valore è uguale a zero salta a l’etichetta FINE Continua => => Continua MOV CH,0 ; azzera CH MOV CL,AL ; sposta il valore in CL, (CX) MOV DL,10D ; inserisco il codice ASCII 10D per spostare MOV AH,2D ; il cursore ad inizio riga. INT 21H MOV DL,13D ; inserisco il codice ASCII 13D per spostare MOV AH,2D ; il cursore giù di una linea. STAMPA: ; etichetta del ciclo LOOP MOV DL,03D ; inserisco il codice ASCII 03D (♥) MOV AH,2D ; funzione di stampa, visualizza il cuore ♥ LOOP STAMPA ; il LOOP decrementa automaticamente ; il registro contatore CX FINE: .EXIT

Programma che esegue la somma tra 2 numeri inseriti da tastiera TITLE Somma_num_inseriti .MODEL small .STACK .DATA NUM1 DB ? NUM2 DB ? SOMMA DB ? MESSAGE_1 DB ‘Inserisci il primo numero : ','$' MESSAGE_2 DB ‘Inserisci il secondo numero : ','$' .CODE .STARTUP MOV AX,@DATA ; blocco di istruzioni MOV DS,AX ; che serve per MOV DX,OFFSET MESSAGE_1 ; stampare a video MOV AH,9D ; il primo messaggio INT 21H MOV AH, 1D ; funzione per l’input da tastiera INT 21H ; del primo numero. SUB AL,48 ; sottrae lo 0 ASCII per determinare il valore. MOV NUM1,AL ; sposta il contenuto di AL in NUM1 Continua => => Continua MOV DL,10D ; inserisco il codice ASCII 10D per spostare MOV AH,2D ; il cursore ad inizio riga. INT 21H MOV DL,13D ; inserisco il codice ASCII 13D per spostare MOV AH,2D ; il cursore giù di una linea. MOV AX,@DATA ; blocco di istruzioni MOV DS,AX ; che serve per MOV DX,OFFSET MESSAGE_2 ; stampare a video MOV AH,9D ; il secondo messaggio MOV AH, 1D ; funzione per l’input da tastiera INT 21H ; del secondo numero. SUB AL,48 ; sottaggo lo 0 ASCII per determinare il valore. MOV NUM2,AL ; sposta il contenuto di AL in NUM2 ADD AL, NUM1 ; esegue la somma MOV SOMMA, AL ; memorizza/sposta il risultato in SOMMA .EXIT END

Programma che verifica se il numero inserito da tastiera e pari o dispari => Continua MOV DL,10D ; parte di codice che viene MOV AH,2D ; eseguito solo se INT 21H ; il resto è diverso da 0 MOV DL,13D ; va a capo e stampa MOV AH,2D ; a video il messaggio INT 21H ; MESSAGE2 MOV AX,@DATA ; NUMERO DISPARI MOV DS,AX MOV DX,OFFSET MESSAGE2 ; questa parte di codice MOV AH,9D ; si chiude con un salto INT 21H ; incondizionato JMP JMP FINE ; all’etichetta FINE PARI: ; etichetta che identificato parte del codice MOV DL,10D ; parte di codice che viene INT 21H ; il resto è uguale a 0 INT 21H ; MESSAGE1 MOV AX,@DATA ; NUMERO PARI MOV DX,OFFSET MESSAGE1 MOV AH,9D INT 21H FINE: ; etichetta che identificato parte del codice .EXIT ; direttiva che permette il ritorno al S.O. TITLE Pari_Dispari .MODEL small .STACK Divisore EQU 02 .DATA NUM DB ? MESSAGE DB 'INSERISCI UN NUMERO : ','$' MESSAGE1 DB 'NUMERO PARI ','$' MESSAGE2 DB 'NUMERO DISPARI ','$' .CODE MOV AX,@DATA MOV DS,AX MOV DX,OFFSET MESSAGE MOV AH,9D INT 21H MOV AH, 1D SUB AL,48 MOV NUM,AL CMP AL,0 ; confronta il numero inserito con 0 JE FINE ; se è uguale a 0 salta all’etichetta FINE MOV BH, Divisore MOV AH,00 DIV BH ; esegue la divisione per 2 del valore presente in AX CMP AH,0 ; confronta se il resto della divisione è uguale a 0 JE PARI ; se è uguale 0 salta a l’etichetta PARI Continua =>

Programma che dati 2 numeri in input da tastiera, stampa a video qual è il Max il Min o se sono uguali. (Parte 1) Ovviamente più i programmi diventano complessi, maggiore sono le righe di comando che lo compongono. TITLE Max_Min .MODEL SMALL .STACK .DATA NUM_A DB ? NUMB DB ? MESSAGE DB 'INSERISCI IL PRIMO NUMERO : ','$' MESSAGE1 DB 'INSERISCI IL SECONDO NUMERO : ','$' MESSAGE2 DB 'I NUMERI SONO UGUALI ','$' MESSAGE3 DB ' IL NUMERO MAGGIORE ','$' MESSAGE4 DB ' IL NUMERO MINORE ','$' .CODE MOV AX,@DATA MOV DS, AX MOV DX, OFFSET MESSAGE MOV AH, 9D INT 21H MOV AH, 1D SUB AL, 48 MOV NUM_A, AL Continua => In questa prima parte di codice, vi è la dichiarazione delle variabili e delle stringhe da stampare a video e l’acquisizione dei due numeri da tastiera, NUM_A e NUM_B. => Continua MOV DL, 10D MOV AH, 2D INT 21H MOV DL, 13D MOV AX, @DATA MOV DS, AX MOV DX, OFFSET MESSAGE1 MOV AH, 9D MOV AH, 1D SUB AL, 48 MOV NUM_B, AL

Programma che dati 2 numeri in input da tastiera, stampa a video qual è il Max il Min o se sono uguali. (Parte 2) CMP NUM_A, AL ; confronta NUM_A con il contenuto di AL che è NUM_B JE UGUALI ; salto all’etichetta se sono uguali JA MAXA ; salta all’etichetta se NUM_A e maggiore di NUM_B MOV DL, 10D ; altrimenti entra in questa parte del codice perché MOV AH, 2D ; vuol dire che NUM_B è maggiore. INT 21H MOV DL, 13D MOV AH, 2D MOV DL, NUM_B ADD DL, 48 MOV AX, @DATA MOV DS, AX MOV DX, OFFSET MESSAGE3 MOV AH, 9D MOV DL,10D MOV AH,2D MOV DL,13D INT 21H Continua => => Continua MOV DL,NUMA ADD DL,48 MOV AH,2D INT 21H MOV AX,@DATA MOV DS,AX MOV DX,OFFSET MESSAGE4 MOV AH,9D JMP FINE ; ovviamente alla fine di questa ; parte di codice c’è in salto ; incondizionato alla fine del pgr

Programma che dati 2 numeri in input da tastiera, stampa a video qual è il Max il Min o se sono uguali. (Parte 3) => Continua MOV DL, 10D MOV AH, 2D INT 21H MOV DL, 13D MOV DL, NUM_B ADD DL, 48 MOV DL, 32 MOV AX, @DATA MOV DS, AX MOV DX, OFFSET MESSAGE4 MOV AH, 9D JMP FINE ; ovviamente anche alla fine di questa ; parte di codice c’è in salto ; incondizionato alla fine del pgr MAXA: ; in questa etichetta vi è il blocco di pgr MOV DL, 10D ; se NUM_A è risultato maggiore MOV AH, 2D INT 21H MOV DL, 13D MOV DL, NUM_A ADD DL, 48 MOV DL, 32 MOV AX, @DATA MOV DS, AX MOV DX, OFFSET MESSAGE3 MOV AH, 9D Continua =>

Programma che dati 2 numeri in input da tastiera, stampa a video qual è il Max il Min o se sono uguali. (Parte 4) UGUALI: ; in questa etichetta vi è il blocco di pgr MOV DL,10D ; se NUM_A e NUM_B sono uguali. MOV AH,2D INT 21H MOV DL,13D MOV DL,NUM_A ADD DL,48 MOV DL,32 Continua => => Continua MOV DL,NUM_B ADD DL,48 MOV AH,2D INT 21H MOV DL,32 MOV AX,@DATA MOV DS,AX MOV DX,OFFSET MESSAGE2 MOV AH,9D FINE: ; questa è l’etichetta a cui saltano i precedenti .EXIT ; salti incondizionati e termina con la direttiva ; del ritorno al S.O.

Esecuzione del programma con i possibili casi Il programma prevedeva che richiesti 2 numeri da tastiera, verificava quale tra i due era maggiore o se erano uguali. Negli screenshot sono stati simulati i tre casi possibili: Il caso in cui il secondo numero inserito è maggiore. Il caso in cui il primo numero inserito è maggiore. Il caso in cui i numeri inseriti sono uguali.