LINGUAGGIO MACCHINA e ASSEMBLER

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

Informatica Generale Marzia Buscemi
Informatica Generale Susanna Pelagatti
Introduzione al linguaggio C
Università degli Studi di Napoli Federico II Facoltà di Ingegneria Dipartimento di Informatica e Sistemistica Corso di Sistemi ad elevate prestazioni –
Elaboratore e Sistemi Operativo
Algoritmi e Programmazione
Informatica Generale Marzia Buscemi
Informatica Generale Susanna Pelagatti
Architettura di un sistema informatico Hardware
Ottimizzazione statica del codice per processori pipelined Canella Matteo & Miglioli Filippo.
Il Linguaggio Macchina
Programmazione Procedurale in Linguaggio C++
Algoritmi Politecnico di Milano C Primi programmi Politecnico di Milano.
Introduzione alla programmazione
2 Sistema composto da un numero elevato di componenti, in cui ogni componente svolge una sua funzione elaborazione dati memorizzazione dati trasferimento.
Informatica di base A.A. 2003/2004 Algoritmi e programmi
Larchitettura di Von Neumann CPU RAM Mem second I/O bus.
Alcuni esercizi e domande per il compitino quali sono le parti principali dellarchitettura di von Neumann? citare le caratteristiche salienti della RAM.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
Microprogrammazione Codice operativo.
Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L’attività di.
Fondamenti di informatica: un po’ di storia
1 2. Analisi degli Algoritmi. 2 Algoritmi e strutture dati - Definizioni Struttura dati: organizzazione sistematica dei dati e del loro accesso Algoritmo:
DAL PROBLEMA ALL'ALGORITMO Problemi e Programmi Paolo Amico
1 Sistemi Digitali. 2 Definizione Analog Waveform Time Voltage (V) 0 5 Digital Waveform Time Voltage (V)
Il Linguaggio Macchina
Com’è fatto un elaboratore?
1 Generazione codice Daniela Briola Lorena Bellino.
Codifica di algoritmi linguaggio macchina vs programmazione strutturata Lab Programmazione - turno /2006.
3. Architettura Vengono descritte le principali componenti hardware di un calcolatore.
Lezione 4 informatica di base per le discipline umanistiche vito pirrelli Istituto di Linguistica Computazionale CNR Pisa Dipartimento di linguistica Università
Lezione 3 informatica di base per le discipline umanistiche vito pirrelli Istituto di Linguistica Computazionale CNR Pisa Dipartimento di linguistica Università
Lezione 5 informatica di base per le discipline umanistiche vito pirrelli Istituto di Linguistica Computazionale CNR Pisa Dipartimento di linguistica Università
Lezione 4 informatica di base per le discipline umanistiche vito pirrelli Istituto di Linguistica Computazionale CNR Pisa Dipartimento di linguistica Università
Architettura di un calcolatore
Le funzioni.
EVOLUZIONE DEL PC Legge di Moore: La potenza dei calcolatori raddoppia ogni 18 mesi Metà anni 80 (Personal Computer IBM AT) Architettura 16 bit interna,
Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per lambiente e il territorio Il calcolatore Stefano Cagnoni e Monica Mordonini Dipartimento.
Programmazione in Java Claudia Raibulet
L' ARCHITETTURA DI VON NEUMANN
Introduzione al linguaggio assembly del microprocessore a parte
Introduzione al linguaggio assemby del microprocessore a parte
Architettura del calcolatore
Introduzione al linguaggio assembly del microprocessore a parte
Sistemi di elaborazione e trasmissione delle informazioni
Informatica Lezione 4 Scienze e tecniche psicologiche dello sviluppo e dell'educazione Anno accademico:
Architettura del calcolatore
1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.
Parte 3 Lo stato: variabili, espressioni ed assegnazioni
Informatica Lezione 5 Scienze e tecniche psicologiche dello sviluppo e dell'educazione (laurea triennale) Anno accademico:
Corso di Laurea in Informatica Architettura degli elaboratori a.a La macchina programmata Instruction Set Architecture (2) Istruzioni I-type Indirizzamento.
1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( )
Architettura di un calcolatore e linguaggio macchina.
Università degli Studi di Bergamo Facoltà di Lingue e Letterature Straniere Facoltà di Lettere e Filosofia A.A Informatica generale 1 Appunti.
L’esecuzione dei programmi
SPIM Esercizi. Esercizio 1 – il comando ‘li’ Il codice deve eseguire una singola operazione: mettere il valore immediato 1023 nel registro s3.
Informatica Generale Marzia Buscemi
2 bits di mantissa e 3 di esponente = 0 =
Fondamenti di Informatica1 Linguaggi Diversi tipi di linguaggi: –Imperativi –Funzionali –Dichiarativi Tutti basati sulla traduzione nell'unico linguaggio.
1 Informatica Generale Marzia Buscemi Ricevimento: Giovedì ore , Dipartimento di Informatica, stanza 306-PS o per posta.
Esercizi.
Esempio scriviamo un programma in linguaggio macchina che: trasferisce il contenuto delle 2 parole della RAM di indirizzi 64 e 68 nei registri R 0 ed R.
Hardware Struttura fisica (architettura) del calcolatore formata da parti meccaniche, elettriche, elettroniche.
Il Processore Il processore è la componente dell’unità centrale che elabora le informazioni contenute nella memoria principale L’elaborazione avviene eseguedo.
Università degli Studi di Perugia 20/09/2015Informatica applicata all’educazione a.a Informatica applicata all’educazione a.a Corso.
Corso di Laurea in Informatica Architettura degli elaboratori a.a La macchina programmata (3) Istruzioni J-type Istruzioni di salto Istruzioni.
Hardware Struttura fisica (architettura) del calcolatore formata da parti meccaniche, elettriche, elettroniche.
Transcript della presentazione:

LINGUAGGIO MACCHINA e ASSEMBLER Useremo il linguaggio macchina di una CPU “MINIMA” ed il corrispondente linguaggio Assembler “MINIMO”.

Programma in linguaggio macchina Dati R0 CPU R1 ....... R7 ALU P Programma in linguaggio macchina IP riconosce la prossima istruzione e chiama il CI corrispondente CI

4 tipi di istruzioni macchina: 1) di trasferimento tra RAM e registri della CPU 2) aritmetiche: somma,differenza, moltiplicazione, e divisione 3) di input/output 4) di confronto e salto e di stop

Istruzioni di trasferimento: registri  RAM 012345 LOAD R0 R1 STORE ALU R2

Formato: in binario! Codici: codice-op n. registro indirizzo parola RAM 8 bit 4 bit 20 bit 1 parola LOAD 00000000 STORE 00000001 Codici:

ARITMETICHE eseguono somma, differenza, moltiplicazione e divisione usando i registri come operandi Ri COp Rj ADD 00000010 FADD 00000011 SUB 00000100 FSUB 00000101 MULT 00000110 FMULT 00000111 DIV 00001000 FDIV 00001001 MOD 00001010

FORMATO: codice-op reg 1 reg 2 8 bit 4 bit 4 bit inutile 1 parola

Istruzioni di input/output: unità I/O  RAM 012345 WRITE READ

Formato: in binario! Codici: Unità: codice-op n. unità indirizzo parola RAM 8 bit 4 bit 20 bit 1 parola Codici: Unità: READ 00010000 WRITE 00010001 STINP 0000 (tastiera) STOUT 0001 (video)

Confronto paragona il contenuto di 2 registri Ri ed Rj e: se Ri < Rj mette -1 nel registro RC se Ri = Rj mette 0 in RC se Ri > Rj mette 1 in RC Ri CCf Rj RC Codici: COMP 00100000 FCOMP 00100001

FORMATO: codice-op reg 1 reg 2 8 bit 4 bit 4 bit inutile 1 parola

Salto istruzioni che permettono di saltare ad un’altra istruzione del programma a seconda del contenuto di RC (cioè a seconda del risultato di un confronto) BRLT 01000001 BRNE 01000100 BRLE 01000010 BRGE 01000110 BREQ 01000011 BRGT 01000101 BRANCH 10000000 Anche salto incondizionato!

FORMATO: codice-op indirizzo RAM 8 bits inutile 20 bit 1 parola

STOP termina il programma Codice: STOP 10000001

FORMATO: codice-op 8 bits inutile 1 parola

esempio scriviamo un programma macchina che: trasferisce il contenuto di 2 parole di indirizzo 64 e 68 della RAM nei registri R0 ed R1 li somma trasferisce la somma nella parola di indirizzo 60 della RAM

codici delle operazioni trasferimento RAM  CPU: 00000000 trasferimento CPU  RAM: 00000001 somma : 00000010

60 64 68 111100 1000000 1000100 38 ..0100110 8 ..01000 1024 1028 1032 1036 Porta 64 in R0 10000000000 10000000100 10000001000 10000001100 000000000000..001111 Porta 68 in R1 000000000001..010000 Somma R0 e R1 0000001000000001.... Porta R0 in 60 000000010000..010001

svantaggi del linguaggio macchina: programmi in binario sono difficili da scrivere, capire e cambiare il programmatore deve occuparsi di gestire la RAM: difficile ed inefficiente primo passo  Assembler

Novità dell’Assembler codici mnemonici per le operazioni nomi mnemonici (identificatori) al posto degli indirizzi RAM per i dati (e indirizzi RAM delle istruzioni usate nei salti) avanzate: tipi dei dati INT e FLOAT

codice-op mnemonici: trasferimento: LOAD (RAM  CPU) e STORE (CPU  RAM) aritmetiche: ADD,SUB,DIV,MULT,MOD, FADD,FSUB,FDIV,FMULT input/output: READ (U-INP  CPU), WRITE (CPU  U-OUT) test: COMP, FCOMP salto: BREQ,BRGT,BRLT,BRGE,BRLE, BRANCH terminazione: STOP

stesso esempio del linguaggio macchina Z : INT ; X : INT 38; Y : INT 8; LOAD R0 X; LOAD R1 Y; ADD R0 R1; STORE R0 Z; dichiarazioni degli identificatori dei dati istruzioni assembler

esempio carica due valori dalla RAM, li somma e mette il risultato al posto del maggiore dei 2 numeri sommati (nel caso siano uguali, non importa in quale dei due si mette la somma)

X: INT 38; Y: INT 8; LOAD R0 X; LOAD R1 Y; LOAD R2 X; ADD R2 R1; COMPARE R0 R1; BRGE pippo; STORE R2 Y; STOP; pippo: STORE R2 X;

test flowchart LOAD R0 X; LOAD R1 Y; LOAD R2 X; ADD R2 R1; SI NO STORE R2 X; STOP; STORE R2 Y; STOP; test

Esempio Esempio potenza Leggere un reale x ed un intero positivo n e calcolare la potenza xn Esempio potenza

X: FLOAT ; N: INT ; Ris: FLOAT ; Uno : INT 1; Unofl: FLOAT 1.0; READ STINP X; READ STINP N; LOAD R0 Uno; SUB R0 R0; LOAD R1 Uno; LOAD R2 X; LOAD R3 N; LOAD R4 Unofl; R0 = 0 intero R1 = 1 intero R2 = X reale R3 = N intero R4 = 1 reale

R0 = 0 intero R2 = X reale R4 = 1 reale R1 = 1 intero R3 = N intero Ciclo: COMP R3 R0; BREQ Esci; FMULT R4 R2; SUB R3 R1; BRANCH Ciclo; Esci: STORE R4 Ris; WRITE STOUT Ris; STOP; R4 = XN-R3 R4 = XN

R3 = R0? SI NO FMULT R4 R2; SUB R3 R1; ciclo o iterazione

Nel programma precedente, per calcolare xn, il ciclo viene ripetuto n volte. Il tempo calcolo richiesto aumenterà proporzionalmente con l’aumentare di n. Diciamo che il programma ha complessità tempo O(n). Vediamo un altro modo per calcolare xn.

Esempio potenza1 X: FLOAT ; N: INT ; Ris: FLOAT ; Due : INT 2; Unofl: FLOAT 1.0; READ STINP X; READ STINP N; LOAD R0 Due; SUB R0 R0; LOAD R1 Due; LOAD R2 X; LOAD R3 N; LOAD R4 Unofl; LOAD R5 Due; Esempio potenza1 R0 = 0 intero R1 = 2 intero R2 = X reale R3 = N intero R4 = 1 reale R5 = 2 intero

R0 = 0 intero R2 = X reale R4 = 1 reale R1 = 2 intero R3 = N intero R5 = 1 reale Ciclo: COMP R3 R0; BREQ Esci; SUB R5 R5; ADD R5 R3; MOD R5 R1; COMP R5 R0; BREQ Pari; FMULT R4 R2; Pari: FMULT R2 R2; DIV R3 R1; BRANCH Ciclo; R4 · R2R3 = XN R4 = XN

R4 = XN Esci: STORE R4 Ris; WRITE STOUT Ris; STOP;

Quante volte viene ripetuto il ciclo nel programma precedente? All’inizio R3 = n, ad ogni iterazione R3 è diviso per 2, ci si ferma quando R3 = 0. Quindi il ciclo viene ripetuto log2 n volte. Il tempo calcolo richiesto aumenterà proporzionalmente a log2 n. Il programma ha complessità tempo O(log2 n).

Come aumenta il tempo al variare di n. Tabelle complessità f(n) n=10 n=100 n=1000 n=106 n=109 log2 n 3 s 6 s 9 s 18 s 27 s n 10 s 100 s 1 ms 1 s 17 m n2 10 ms 278 ore >3·104 anni n3 >3·107 anni 2n >1016 anni 10n 17 min >1092 anni

Massimo N che richiede tempo  1 sec. f(n) A B log2 n N=21000000 N=21000000000 n N=106 N= 109 n2 N=1000 N=3 · 104 n3 N=100 2n N=20 N=30 10n N=6 N=9

La CPU non “capisce” l’assembler !! il programma assembler deve essere tradotto in un programma macchina programma assembler assemblatore macchina hardware

Assemblatore e caricatore Programma in assembler Assemblatore Programma in linguaggio macchina (senza indirizzi) Caricatore Programma in linguaggio macchina con indirizzi RAM

Programma P Dati D per P interprete Gli stessi risultati che si otterrebbero eseguendo il programma P con i dati D

OSSERVAZIONE Il programma assemblatore legge un programma in assembler e il programma interprete legge sia un programma che i dati per tale programma. Esistono quindi programmi che hanno dei programmi come dati.

Ha senso quindi cercare un programma Test che sia in grado di leggere un qualsiasi programma P e i relativi dati D e dire se, eseguendo il programma P con i dati D, esso termina oppure entra in un ciclo infinito e quindi non termina. Test READ INP P READ INP D P(D) termina? WRITE OUT “SI” WRITE OUT “NO”

Il programma Coppia legge un programma P e stampa due copie dello stesso programma P. Componendolo con un interprete I otteniamo il programma Rifl che con input un programma P lo esegue con dati il programma stesso P. Rifl Coppia READ INP P Coppia WRITE OUT P I WRITE OUT P

Usando il programma ipotetico Test ed il programma Rifl costruiamo un programma Assurdo nel modo seguente. Pref READ INP P WRITE OUT Rifl Assurdo Pref WRITE OUT P Test Inv Inv READ INP RISP SI RISP? NO

Se P con input P non termina allora Assurdo con input P termina. Il programma Assurdo, con input un qualsiasi programma P, si comporta nel modo seguente: Se P con input P non termina allora Assurdo con input P termina. Se P con input P termina allora Assurdo con input P non termina. Pref Test Inv Se Assurdo con input Assurdo non termina allora Assurdo con input Assurdo termina. Se Assurdo con input Assurdo termina allora Assurdo con input Assurdo non termina.

domande d’esame: quali sono le novità principali dell’Assembler rispetto al linguaggio macchina? in un programma assembler, perchè si attaccano etichette a certe istruzioni?

come si chiama in Assembler l’istruzione che trasferisce una parola dalla RAM ad un registro della CPU? E quella che compie il trasferimento inverso? In assembler a cosa servono gli identificatori o variabili?