Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
MACCHINA e
ASSEMBLER
Useremo il linguaggio macchina di una CPU
“MINIMA” ed il corrispondente linguaggio
Assembler “MINIMO”.
RAM
R0 Dati
CPU
R1
.......
R7
P
ALU
IP Programma
in
riconosce la
prossima linguaggio
CI istruzione e macchina
chiama il CI
corrispondente
4 tipi di istruzioni macchina:
1 parola
LOAD 00000000
Codici: STORE 00000001
ARITMETICHE
eseguono somma, differenza, moltiplicazione
e divisione usando i registri come operandi
Ri
COp Rj
READ
Formato:
in binario!
codice-op n. unità indirizzo
parola RAM
1 parola
Codici: Unità:
READ 00010000 STINP 0000 (tastiera)
WRITE 00010001 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
COMP 00100000
Codici: FCOMP 00100001
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 111100
64 38 1000000 ..0100110
68 8 1000100 ..01000
SI NO
R0 R1?
STORE R2 X; STORE R2 Y;
STOP; test STOP;
Esempio
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; R0 = 0 intero
LOAD R1 Uno; R1 = 1 intero
LOAD R2 X; R2 = X reale
LOAD R3 N; R3 = N intero
LOAD R4 Unofl; R4 = 1 reale
R0 = 0 intero R2 = X reale R4 = 1 reale
R1 = 1 intero R3 = N intero
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).
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
READ INP P
Test
READ INP D
P(D) termina?
WRITE OUT P I
WRITE OUT P
Usando il programma ipotetico Test ed il
programma Rifl costruiamo un programma
Assurdo nel modo seguente.
Inv
Inv READ INP RISP
SI
RISP?
NO
Il programma Assurdo, con input un qualsiasi
programma P, si comporta nel modo seguente: