Scarica in formato pdf o txt
Scarica in formato pdf o txt
Sei sulla pagina 1di 6

IL LINGUAGGIO MACCHINA FORMATO DELLE ISTRUZIONI

Descriviamo un semplice linguaggio macchina per la


programmazione di una macchina di von Neumann. op_code operando

n m
Il linguaggio macchina è direttamente eseguibile
dall'elaboratore, senza nessuna traduzione. s
IR

s bit di lunghezza dell’istruzione, di cui


Istruzioni  n bit dedicati al codice operativo
Si dividono in due parti:  m bit dedicati all’indirizzamento degli operandi.
 un codice operativo che specifica l’operazione da
compiere
 opzionalmente, uno o più operandi che individuano
 o direttamente il dato coinvolto nell’operazione Al più 2n istruzioni diverse
(indirizzamento immediato) Al più 2m celle di memoria diverse indirizzabili
 o le celle di memoria in cui si trova il dato
(indirizzamento diretto)
Ulteriore ipotesi semplificativa:
Per semplicità, consideriamo istruzioni ad un solo
operando. ogni istruzione occupi esattamente una cella di memoria.

istruzioni ed operandi relativi al programma in


esecuzione sono caricati in memoria e quindi sono
memorizzati in forma binaria.

1 2

LINGUAGGIO MACCHINA: ISTRUZIONI ESEMPIO: REALIZZAZIONE DI fetch TRAMITE


MICRO-ISTRUZIONI
A
PC ALU
B Fetch
IR
AR  PC read_mem(AR) trasferisce
RINT Flag DR  read_mem(AR) un dato dalla memoria cen-
IR  DR trale (indirizzo AR) al regi-
PC  PC + 1 stro dati (DR).
AR DR clock

Registri interessati:
AR, address register (registro indirizzi) PRINCIPALI ISTRUZIONI
IR, instruction register (istruzione corrente) LOAD caricamento del valore contenuto in una
DR, data register (registro dati) cella di memoria in un opportuno registro
PC, program counter (indirizzo della prossima istruzione)
A,B registri accumulatori (di uso generale) Consideriamo solo i registri A e B  LOADA, LOADB

L’esecuzione di ogni istruzione richiede tre fasi: ESEMPIO: LOADA IND1


1) acquisizione dalla memoria centrale (fetch); AR  op(IR) op(IR) seleziona l’operan-
2) interpretazione del codice operativo (decode); DR read_mem(AR) do (un indirizzo) dell’istru-
3) esecuzione (execute). A  DR zione contenuta in IR

Ogni fase è realizzata tramite micro-istruzioni STORE carica il contenuto di un registro in una
Ogni micro-istruzione corrisponde a un trasferimento dati: cella di memoria
 tra registri, oppure Consideriamo solo i registri A e B  STOREA, STOREB
 tra memoria e registri, oppure
 tra periferiche e registri. ESEMPIO: STOREA IND1 write_mem(AR,DR)
Le micro-istruzioni non sono linguaggio macchina, DR  A trasferisce il contenuto del
servono a specificare una sorta di semantica AR  op(IR) registro DR in memoria
operazionale. write_mem(AR,DR) centrale (indirizzo AR)

3 4
READ trasferimento di dati da una periferica alla ISTRUZIONI DI SALTO
memoria centrale Modificano l’esecuzione sequenziale del programma
ESEMPIO: READ IND1
Ipotesi: RDP sia un
DR  RDP registro dati della  la prossima istruzione da eseguire non è più quella
AR op(IR) periferica considerata
write_mem(AR,DR) immediatamente successiva, ma quella individuata
dall’indirizzo specificato.
WRITE trasferimento di dati dalla memoria
centrale a una periferica Due categorie:

ESEMPIO: WRITE IND1


JUMP IND1 Salto incondizionato: la prossima
AR  op(IR) Ipotesi: DRP sia un
istruzione da eseguire è senz’altro
DR  read_mem(AR) registro dati della
quella all’indirizzo IND1.
DRP  DR periferica considerata

JUMPZ IND1 Salto condizionato: effettua il salto ad


IND1 solo se il contenuto di A è zero
ISTRUZIONI ARITMETICHE (ADD, SUB, MUL, DIV)
 operandi implicitamente nei registri A e B
 risultato nel registro A (e resto di DIV nel registro B)
ALTRE ISTRUZIONI

NOP non fa nulla (fa trascorrere un ciclo senza


svolgere alcuna operazione)
HALT termina l’esecuzione del programma

5 6

SET DI ISTRUZIONI DI UN ELABORATORE quelle delle macchine CISC.

È l’insieme delle istruzioni che la macchina è in grado di


eseguire.

Può essere molto ridotto (RISC) o estremamente ampio


(CISC).

ESEMPIO (VAX della Digital 304)


solo 14 istruzioni  4 bit per l’opcode (24>14)

opcode istruzione opcode istruzione


0000 LOADA 1000 MUL
0001 LOADB 1001 DIV
0010 STOREA 1010 JUMP
0011 STOREB 1011 JUMPZ
0100 READ 1100 NOP
0101 WRITE 1101 HALT
0110 ADD
0111 SUB

I linguaggi macchina dei microprocessori attuali (come


dal Pentium in poi) sono molto più ricchi (istruzioni più
numerose ecomplesse, più registri, ecc.)
 macchine CISC (Complex Instruction Set Computer)

Ci sono invece, come SPARC e PowerPC, caratterizzate


da un ridotto set di istruzioni con formati regolari
 macchine RISC (Reduced Instruction Set Computer)

Le prestazioni dei RISC sono spesso migliori rispetto a

7 8
ESEMPIO DI PROGRAMMA RAPPRESENTAZIONE BINARIA
IN LINGUAGGIO MACCHINA DI UN PROGRAMMA IN LINGUAGGIO MACCHINA
Un programma in linguaggio macchina consiste di due
parti: istruzioni e dati. Instruction Set
La parte istruzioni precede la parte dati.
opcode istruzione opcode istruzione
ESEMPIO: 0000 LOADA 0111 SUB
moltiplicazione fra due dati interi (Per semplicità 0001 LOADB 1000 MUL
facciamo partire il programma dalla prima cella di 0010 STOREA 1001 DIV
memoria  PC = 0) 0011 STOREB 1010 JUMP
0100 READ 1011 JUMPZ
0 READ 8 0101 WRITE 1100 NOP
1 READ 9 0110 ADD 1101 HALT
2 LOADA 8
3 LOADB 9
4 MUL
5 STOREA 8 Il programma… … e la sua rappresentazione
6 WRITE 8 binaria
7 HALT 0 READ 8 0 0100 000000001000
8 DATO INTERO {16 bit}
1 READ 9 1 0100 000000001001
9 DATO INTERO
2 LOADA 8 2 0000 000000001000
Ipotesi: celle di memoria da 16 bit 3 LOADB 9 3 0001 000000001001
 4 bit per il codice operativo 4 MUL 4 1000 000000000000
 12 bit per gli operandi 5 STOREA 8 5 0010 000000001000
6 WRITE 8 6 0101 000000001000
12
7 HALT 7 1101 000000000000
Indirizzamento: 2 = 4096 celle di memoria 8 DATO INTERO (16 bit) 8 0000000000000000
Dati: 9 DATO INTERO (16 bit) 9 0000000000000000
 numeri naturali compresi fra 0 e 2 -1, oppure
16

 numeri interi compresi fra -2 + 1 e 2 -1


15 15

9 10

INDIRIZZAMENTO
L’operando di una istruzione può rappresentare:
 il dato stesso su cui operare
 INDIRIZZAMENTO IMMEDIATO
 l’indirizzo della cella di memoria in cui si trova il dato
 direttamente  INDIRIZZAMENTO DIRETTO
 indirettamente  INDIRIZZAMENTO INDIRETTO
 tramite un registro ausiliario (“registro indice”)
 INDIRIZZAMENTO INDICIZZATO

INDIRIZZAMENTO IMMEDIATO
L’operando rappresenta già il valore da usare nell’ope-
razione.
Non è richiesto alcun accesso alla memoria durante
l'esecuzione dell'istruzione.

Pro:
 semplice e veloce

Contro:
 con istruzioni a formato fisso, gli operandi possono
occupare al massimo m bit
 l’operando deve essere noto a priori
 l’operando risulta “cablato” dentro al programma

11 12
INDIRIZZAMENTO DIRETTO INDIRIZZAMENTO INDIRETTO

Il campo operando contiene l’indirizzo assoluto della cella L’operando contiene non già l’indirizzo della cella di
di memoria che contiene il dato. memoria che contiene il dato,
ma l’indirizzo assoluto di una cella di memoria che a
È richiesto un accesso alla memoria durante l’esecuzione sua volta contiene l’indirizzo a cui si trova il dato.
dell’istruzione, per recuperare il dato.
È richiesto un doppio accesso alla memoria durante
Pro: l’esecuzione dell’istruzione, per recuperare il dato.
 il dato non è più cablato dentro al programma
 il dato non deve avere dimensione fissa Pro:
 il dato non deve per forza essere noto a priori  si possono usare più bit per rappresentare l’indirizzo
dell’operando  lo spazio indirizzabile aumenta
Contro:  è semplice rilocare i dati altrove
 può essere oneroso se la memoria è molto grande o se è
necessario rilocare il programma ed i dati. Contro:
 intrinsecamente più lento causa il doppio accesso alla
memoria.
op_code

m op_code
n

n q (<=m)

13 14

INDIRIZZAMENTO INDICIZZATO IL LINGUAGGIO ASSEMBLER


L’indirizzo dell’operando si ottiene sommando algebrica- Leggere e capire un programma scritto in forma binaria è
mente l’operando dell’istruzione col contenuto di un decisamente difficile:
particolare registro della CPU, detto registro indice.
0 0100 0000 0000 1000
Richiede un unico accesso alla memoria per recuperare 1 0100 0000 0000 1001
l’operando, più un’operazione di somma. 2 0000 0000 0000 1000
3 0001 0000 0000 1001
Pro: 4 1000 0000 0000 0000
 molto efficiente accedere a dati memorizzati in celle di 5 0010 0000 0000 1000
memoria consecutive (vettori, stringhe, ..) 6 0101 0000 0000 1000
 più semplice gestire la rilocazione 7 1101 0000 0000 0000
8 0000 0000 0000 0000
9 0000 0000 0000 0000
I

LINGUAGGI ASSEMBLATORI (ASSEMBLER)


Linguaggi le cui istruzioni corrispondono univocamente a
op_code quelle del linguaggio macchina, ma sono espresse tramite
nomi simbolici (parole chiave) invece che in binario.
n m
• I riferimenti alle celle di memoria sono fatti mediante
nomi simbolici (identificatori).

• Identificatori che rappresentano dati (costanti o


variabili) oppure istruzioni (etichette).

Il programma prima di essere eseguito deve essere


tradotto in linguaggio macchina  Assemblatore

15 16
ESEMPIO VERSO LINGUAGGI DI PROGRAMMAZIONE
Programma Assembler che calcola il prodotto come DI ALTO LIVELLO
sequenza di somme (Y>0, X >=0).
Linguaggio Macchina
• Conoscenza precisa dei metodi di rappresentazione e
READ X manipolazione delle informazioni utilizzati
READ Y
LOADA ZERO Linguaggio Macchina ed Assembler
STOREA Z • Necessità di conoscere dettagliatamente le caratteri-
TEST LOADA X stiche della macchina (registri, dimensioni dati, set di
JUMPZ FINE istruzioni)
LOADB UNO • Semplici algoritmi richiedono l'uso di molte istruzioni
SUB
STOREA X
Ingestibile
LOADA Y
in pratica !
LOADB Z
SUM
STOREA Z
JUMP TEST Linguaggi di Alto Livello
FINE WRITE Z
HALT Il programmatore può astrarre dai dettagli legati
ZERO 0 all’architettura
UNO 1 e può esprimere i propri algoritmi in modo simbolico.
X INT
Y INT I linguaggi di alto livello sono indipendenti dalla
Z INT macchina fisica (astrazione).

17 18

COME ESEGUIRE UN PROGRAMMA


SCRITTO IN UN LINGUAGGIO DI ALTO LIVELLO? FASI DI SVILUPPO DI UN PROGRAMMA

Occorre tradurlo nel linguaggio macchina dello specifico Qualunque sia il linguaggio di programmazione scelto
processore che si sta usando. occorre:

Due modalità possibili: • Scrivere il testo del programma e memorizzarlo su


• compilazione (es. C, FORTRAN, Pascal, Java,..) supporti di memoria permanenti (editing);
• interpretazione (es. Basic, Perl, JavaScript, …)

Se il linguaggio è compilato:
I compilatori traducono un intero programma dal linguag-
gio L al linguaggio macchina della macchina prescelta • Tradurre il linguaggio in linguaggio macchina
➢ traduzione e esecuzione procedono separatamente (compilazione);
➢ al termine della compilazione è disponibile la versione
tradotta del programma • Eseguire il programma tradotto.

➢ la versione tradotta è però specifica di quella macchina


➢ per eseguire il programma basta avere disponibile la Se il linguaggio è interpretato:
versione tradotta (non serve il programma originale!)
• Usare l’interprete per eseguire il programma.

Gli interpreti invece traducono e immediatamente


eseguono il programma istruzione per istruzione
➢ traduzione ed esecuzione procedono insieme
➢ al termine non vi è alcuna versione tradotta del
programma originale
➢ se si vuole ri-eseguire il programma occorre anche
ri-tradurlo.

19 20
PERCORSO CONCETTUALE PROG. PROCEDURALE

PERCORSO CONCETTUALE PROG. A OGGETTI

21 22

Potrebbero piacerti anche