Sezioni di un programma IJVM
Architettura degli elaboratori exp - ijvm
• Costantio Si dichiarano globalmenteo Sintassi
o .constantconstant1 value1constant2 value2
o .end-constant
• Variabilio Si dichiarano solamente locali nel
main o nei vari methodo Sintassi
o .varvar1var2
o .end-var
o Si referenziano per nome con ILOADe ISTORE
• Etichetteo Marcano punti del
programma ai quali èpossibili saltare
o Sono accessibili soloall’interno del metodo incui appaiono
• Maino Solo uno per ogni programmao Sintassi
o .maindichiarazione delle variabiliistruzioni del programma
o .end-main
Instruction set
Architettura degli elaboratori exp - ijvm
Instruction Set del giorno
Architettura degli elaboratori
Istruzione Significato
ILOAD vInserisce (push) il valore della variabile v in cima allostack
ISTORE vRimuove (pop) il valore che è presente in cima allo stack e lo salva nella variabile v
BIPUSH byte Push di byte sullo stack
IADD Pop di due parole dallo stack e push della loro somma
ISUBPop di due parole dallo stack e push della loro differenza
exp - ijvm
Esempio funzionamento istruzioni aritmetiche
Architettura degli elaboratori
Si caricano gli operandi in cima allo stack
Si richiama l’operazione che si vuole eseguire
0x1
0xab
0x30
BIPUSH 0x10
BIPUSH 0x7
ISUB
exp - ijvm
Esempio funzionamento istruzioni aritmetiche
Architettura degli elaboratori
Si caricano gli operandi in cima allo stack
Si richiama l’operazione che si vuole eseguire
BIPUSH 0x10
BIPUSH 0x7
ISUB 0x10
0x1
0xab
0x30
exp - ijvm
Esempio funzionamento istruzioni aritmetiche
Architettura degli elaboratori
Si caricano gli operandi in cima allo stack
Si richiama l’operazione che si vuole eseguire
BIPUSH 0x10
BIPUSH 0x7
ISUB
0x7
0x10
0x1
0xab
0x30
exp - ijvm
Esempio funzionamento istruzioni aritmetiche
Architettura degli elaboratori
Si caricano gli operandi in cima allo stack
Si richiama l’operazione che si vuole eseguire
BIPUSH 0x10
BIPUSH 0x7
ISUB 0x9
0x1
0xab
0x30
exp - ijvm
Esempio 1
Architettura degli elaboratori
Scrivere un programma IJVM che calcola la seguente espressione:
i = j + k + 4
con j = 6 e k = 2
3 variabili: i, j, k
4 può essere dichiarato come costante
.main.varijk.end-var
BIPUSH 0x6ISTORE jBIPUSH 0x2ISTORE kILOAD jILOAD kBIPUSH 0x4IADDIADDISTORE iHALT
.end-main
exp - ijvm
Esempio 2
Architettura degli elaboratori
Scrivere un programma IJVM che calcola la seguente espressione:
r = k + k - j - j - j
con j = 5 e k = 20
3 variabili: r, j, k
.main.varrjk.end-var
BIPUSH 0x5ISTORE jBIPUSH 0x14ISTORE kILOAD kILOAD kIADDILOAD jISUBILOAD jISUB
ILOAD j ISUBISTORE rHALT
.end-main
exp - ijvm
Esercizi
Architettura degli elaboratori
Scrivere in IJVM i metodi main per calcolare le seguenti espressioni:
R = x + y + z con x = 10, y = 16, z = 33 [0x3B] R = x – y – z con x = 31, y = 14, z = 5 [0xC] R = ( x + y ) – ( x + z ) con x = 7, y = 23, z = 8 [0xF] R = x – y + x - z con x = 8, y = 11, z = 2 [0x3]
exp - ijvm
Soluzione 1
Architettura degli elaboratori
.main.var
xyzR
.end-var
BIPUSH 0xaISTORE xBIPUSH 0x10ISTORE yBIPUSH 0x21ISTORE z
R = x + y + z con x = 10, y = 16, z = 33
ILOAD xILOAD yILOAD zIADDIADDISTORE RHALT
.end-main
exp - ijvm
Soluzione 2
Architettura degli elaboratori
.main.var
xyzR
.end-var
BIPUSH 0x1FISTORE xBIPUSH 0xEISTORE yBIPUSH 0x5ISTORE z
R = x – y – z con x = 31, y = 14, z = 5
ILOAD xILOAD yISUBILOAD zISUBISTORE RHALT
.end-main
exp - ijvm
Soluzione 3
Architettura degli elaboratori
.main.var
xyzR
.end-var
BIPUSH 0x7ISTORE xBIPUSH 0x17ISTORE yBIPUSH 0x8ISTORE z
R = ( x + y ) – ( x + z ) con x = 7, y = 23, z = 8
ILOAD xILOAD yIADDILOAD xILOAD zIADDISUBISTORE RHALT
.end-main
exp - ijvm
Soluzione 4
Architettura degli elaboratori
.main.var
xyzR
.end-var
BIPUSH 0x8ISTORE xBIPUSH 0xBISTORE yBIPUSH 0x2ISTORE z
R = x – y + x - z con x = 8, y = 11, z = 2
ILOAD xILOAD yISUBILOAD xIADDILOAD zISUBISTORE RHALT
.end-main
exp - ijvm