Corso di Architettura degli Elaboratori Il livelo ISA: modalità di indirizzamento Matteo Baldoni Dipartimento di Informatica Università degli Studi di Torino C.so Svizzera, 185 I-10149 Torino baldoni@di.unito.it http://www.di.unito.it/ ~baldoni 1 Gli indirizzi occupano spazio! Una generica operazione necessita che si specifichi dove recuperare gli operandi (compresa la del risultato) RISULTATO = OPERANDO1 'Op' OPERANDO2 Se la macchina ha indiririzzi di di 32 bit allora questa necessita almeno di 9 bit per essere specificata! Vari metodi: appoggiarsi a registri (se ho 32 registri sono allora 5 bit) un operando implicito (REGISTRO2 = REGISTRO2 + SORGENTE1 due operandi impliciti (REGISTRO2 e`un accumulatore) tre operandi impliciti (JVM!) 2 Gli indirizzi occupano spazio! Indirizzamento immediato Una attenta progettazione dei metodi di indirizzamento disponibili nell'isa (e quindi al programmatore assembler o al compilatore) e`di fondamentale importanza per la realizzazione di codice efficiente Sono definite varie modalita`di indirizzamento: immediato diretto indiretto mnediante registro indiretto mediante registro indicizzato based-indexed mediante stack costante MOV R1 # R1 L'istruzione contiene l'operando stesso Non richiede accessi supplementari alla Utilizzabile solo per le costanti Es. IJVM: BIPUSH 3 4
R1 Indirizzamento diretto MOV R1 0xA2 indirizzo 0xA2 Consiste nell'indicare l'indirizzo completo in memori di un operando Utilizzato solitamente per accedere a variabili globali il cui indirizzo è conosciuto al momento della compilazione Non è possibile utilizzarla per accedere alle variabili locali di un metodo (poichè la loro posizione non è conosciuta a tempo di compilazione) 5 Indirizzamento indiretto L'indirizzo dell'operando è contenuto in all'indirizzo specificato nell'istruzione Duplice accesso alla per reperire il valore dell'operando Indirizzamento dei registri Indirizzamento indiretto dei registri Consiste nell'indicare l'indirizzo di un registro che contiene un operando L'indirizzo della locazione dell'operando è contenuto in un registro sorgente MOV R1 R2 R1 È il metodo più comune nelle istruzioni dello UltraSPARC II (come in tutte le architetture load/ store) Istruzioni più corte (meno bit necessari per specificare il registro) R1 MOV R1 (R2) indirizzo in un registro 0xA2 Permette di fare riferimento alla senza dover sprecare spazio nell'istruzione Doppio accesso: prima al registro quindi alla Utile per percorrere strutture dati omogenee R2 R2 0xA2 7 8
Esempio: Pentium II Indirizzamento indicizzato MOV R2, #A MOV R3, #A+409 ADD R1, (R2) Indirizzamento immediato Aggiunge in R1 il valore in il cui indirizzo è specificato in R2 Si specifica un operando mediante: un registro (esplicito o implicito) e un offset costante contenuto nell'istruzione (Es.IJVM: ILOAD 5) un puntatore di nell'istruzione e l'offset nel registro 9 10 Indirizzamento indicizzato Indirizzamento based-indexed R1 indirizzo in un registro MOV R1 0xA2(R2) R2 2 0xA2 +2 indirizzamendo indice Utile per percorrere vettori (array) o accedere alle variabili locali di una procedura MOV R2, #0 MOV R3, #409 MOV R4, A(R2) AND R4, B(R2) OR R1, R4 MOV R2, #0 MOV R3, #409 MOV R5, #A MOV R, #B MOV R4, (R2+R5) AND R4, (R2+R) OR R1, R4 Simile all'indirizzamento indice ma anche l'indirizzo di è contenuto in un registro oltre che l'offset 11 12
Indirizzamento dello stack Indirizzamento per i salti È quella che abbiamo discusso con la IJVM Indirizzamento diretto: l'indirizzo di del salto è contenuto nell'istruzione stessa È detta anche indirizzamento a zero indirizzi in quanto tutti gli indirizzi sono espiciti Codice molto compatto vs molti accessi alla Indirizzamento indiretto dei registri: permette di calcolare l'indirizzo a tempo di esecuzione Indirizzamento indicizzato: somma un offset al valore di un registro. Il registro è esplicito o implicito, in questo caso è inteso, solitamente, il registro program counter (come le istruzioni di salto in IJVM!) È basata sulla RPN (Reverse Polish Notation), si vedano i lucidi già presentati a tal proposito 13 14 Opcode vs modalità di indiriz. Esempio: a tre indirizzi Riepilogando: Obiettivo del progetto di un'isa è di facilitare il più possibile la generazione di codice da parte dei compilatori in modo che questo sia il più possibile efficiente e compatto e di buona qualità Obiettivo del progetto di un'isa è di essere il più possibile una buova interfaccia con l'hardware e di permettere che il codice prodotto lo sfrutti a fondo Il buon bilanciamento tra lo spazio riservato agli opcode e la modalità della loro decodifica e quello riservato agli operandi e le modalità offerte per reperire tali valori durante l'esecuzione è cruciale Macchina con 3 indirizzi 8 bit di opcode Operazioni di salto o LOAD e STORE con offset grandi istruzioni da 32 bit distingue i due formati 1 opcode per fp + codice operazione specificata qui costante immediata da 13 bit LOAD e STORE di variabili locali 15 1
Esempio: a due indirizzi Riepilogo Macchina con 2 indirizzi: si isprira al PDP-11 e VAX Forte ortogonalità tra opcode e modalità di indirizzamento Pentium II: indirizzameto immediato, diretto, diretto dei registri, indiritto dei registri, indice UltraSPARC II: indirizzamento immediato, diretto dei registri, indice, based-indexed JVM: indirizzamento immediato, indice, stack Indirizzi di se necessari Facile per i compilatori produrre codice ma troppo facile produrre codice che accede molto alla! 17 Per un compilatore, data la tecnologia attuale, è importante che le modalità di indirizzamento siano poche e chiare con limiti molto severi al loro utilizzo L'architettura di tipo RISC è quella che più si adatta alla tecnologia attuale con forte utilizzo dei registri che permettono l'avvio di più istruzioni in parallelo in modo più semplice 18