6 Linguaggio Macchina
6 Linguaggio Macchina
n m
Il linguaggio macchina è direttamente eseguibile
dall'elaboratore, senza nessuna traduzione. s
IR
1 2
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
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:
5 6
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
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
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
Occorre tradurlo nel linguaggio macchina dello specifico Qualunque sia il linguaggio di programmazione scelto
processore che si sta usando. occorre:
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.
19 20
PERCORSO CONCETTUALE PROG. PROCEDURALE
21 22