Anteprima
Vedrai una selezione di 6 pagine su 22
Appunti Calcolatori elettronici - prima parte Pag. 1 Appunti Calcolatori elettronici - prima parte Pag. 2
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Appunti Calcolatori elettronici - prima parte Pag. 6
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Appunti Calcolatori elettronici - prima parte Pag. 11
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Appunti Calcolatori elettronici - prima parte Pag. 16
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Appunti Calcolatori elettronici - prima parte Pag. 21
1 su 22
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Lezione 2: 29/03/23

Il nostro processore MIPS che utilizziamo in questo corso ha a disposizione:

  • 6 bit per il codice operativo
  • 5 bit per il registro
  • 5 bit per l'offset
  • 32 bit per il bus degli indirizzi

Il problema che sorge subito è che siccome ogni istruzione deve essere composta da soli 32 bit questo adesso risulta impossibile.

Nota:

6 + 5 + 5 + 16 + 32 = 59 bit ➔ 32 bit

Per questo motivo allora andiamo ad utilizzare un indirizzamento indiretto al registro.

Con questo tipo di indirizzamento vado a caricare l'indirizzo di destinazione in un registro detto "istruzione" in base a specificare quale indirizzo fornisce questa istruzione.

Osserva:

  • Registro dove carico l'indirizzo di destinazione
  • è di 5 bit - Contiene l'indirizzo base a cui va sommato l'offset per identificare qual è la cella di memoria oggetto dell'istruzione.

Così facendo ottengo che ho:

  • 6 bit codice operativo
  • 5 bit registro
  • 16 bit offset
  • 5 bit registro per l'indirizzo
  • 32 bit rispettando il vincolo

Nota:

Il bus dati è anch'esso di 32 bit

ISTRUZIONI DI LETTURA E SCRITTURA:

(1) LW $A5, 0($2)

  • REGISTRO
  • DOVE VADO A SALVARE IL DATO

(2) SW $A5, 4($2)

  • INDIRIZZO
  • DOV'È CONTENUTO IL DATO CHE VOGLIO SCRIVERE IN MEMORIA

ESEMPIO DI PROGRAMMA:

(SCAMBIO DI VARIABILI)

  • Temp = V[CK]
  • V[CK] = V[CK+1]
  • V[CK+1] = Temp

LW $A5, 0($2)

LW $A6, 4($2)

SW $A5, 4($2)

SW $A6, 0($2)

LEZIONE 3:

15/03/21

MENTRE SE HO OVERFLOW L'OPZIONE "REGISTRO PER IL FLAG" È PIÙ SEMPLICE PERCHÉ IL PROCESSORE MIPS AVREBBE INTERROGATO IL FLAG COMPIE LE AZIONI NECESSARIE PER AFFRONTARE TALE PROBLEMA.

* OSserva: *

La scelta di non adottare un registro per il flag sul MIPS è stata posta tenendo presente che con un bus dati pari a 32 bit la probabilità di avere overflow è molto bassa e quindi la scelta ottimale è l'intercursus eccezione.

* Program counter: *

Nella maggior parte dei processori per il problema di programmi nidificati si utilizza lo stack gestito dallo stack pointer. Questo vuol dire che quando vado a chiamare un sotto-programma "in automatico" il program-counter verrà collocato all'interno della memoria.

Questo però non avviene nel processore MIPS.

Nel MIPS abbiamo dei procedimenti per la gestione di sottoprogrammi, questo piano piano non fa riferimento allo stack ma fa riferimento ad un registro istituito alla CPU detto RETURN ADDRESS ($ra). In condizioni normali, quando il processore vuole rinviare un sotto-programma eseguirà un apposito salto e salverà l'indirizzo di ritorno in $ra.

Quando invece ho programmi nidificati per passare da un sotto-programma ad un'altro non posso usare in alcun $ra perché sovrascriverei tale indirizzo esso percorre l'indirizzo di ritorno al main program.

In questo caso posso se lo vado a salvare in memoria nello stack (questo e l'opposto è architettura).

Nota:

Quando delle semplici chiamate a sotto-programma allo stesso modo ripeto agli altri processori perché così sostano salvare lo stato nel registroin caso di programmi nidificati invece sarà reinviato.

* OSserva: *

Questa scelta è stata posta tenendo conto che statisticamente la probabilità di avere programmi nidificati è bassa e in media questo metodo è vantaggioso.

SCAMBIO:

muli $2 $5 4add $2 $4 $2lw $4 0($2)lw $5 4($2)sw $4 4($2)sw $5 0($2)jr $23

$2 = K * 4 = OFFSET

V[K] -> V[0] + OFFSET

jr -> Jump to register

RITORNO AL MAIN PROGRAM

NOTA:

V[0] 4 ByteV[1] 4 ByteV[2] 4 ByteV[3] 4 Byte

$2 = 0 * 4

$2 = 2 * 4

$2 = 3 * 4

MOTRIPLICAZIONE

NON POSSO USARLO COME ISTRUZIONE NON C'È NELLA REALTÀ

ALTERNATIVA A MULI:

1°)add $8, $5, $5add $2, $8, $8

$8 = K + K

$2 = 2K + 2K

2°)sll $2, $5, 2

SHIFT-LOGICO A SINISTRA (MOLTIPLICAZIONE) DI DUE, C'È VOL DIRE MOLTIPLICARE PER 4

$2 = K * 4

LA TERAYIONE È PIÙ VELOCE

ESPLICE RISPETTO ALL'ADDIZIONE

.RIEPILOGO:

add $s3, $s2, $s3 $s3 = $s2 + $s3sub $s3, $s2, $s3 $s3 = $s2 - $s3sw $s0, 100($s2) Memory [$s2 + 100] = $s3lw $s0, 100($s2) $s3 = Memory [$s2 + 100]

NOTA:

IL PROGRAM COUNTER SI MUOVE IN MOLTIPLI DI 4, QUESTO PERCHE' LE ISTRUZIONI SONO DA 4 BYTE CIASCUNA.

FORMATO J:

CON 26 BIT NON POSSIAMO RAPPRESENTARE UN INDIRIZZO PERCHE' CE NE VORREBBERO 32.

MA SICCOME GLI INDIRIZZI CHE VORRO' RAPPRESENTARE SARANNO INDIRIZZI ALLINEATI MOLTIPLICI DI 4, QUEI 26 BIT E' COME SE POSSEDERO 28 BIT, QUESTO PERCHE' OGNIQUALSIASI INDIRIZZO POSSIBILE NEL PC AVRA' I DUE BIT MENO SIGNIFICATIVI POSTI A ZERO.

QUESTA 26 BIT PRIMA DI ESSERE UTILIZZATI SARANNO TRASLATI DI DUE POSIZIONI A SINISTRA (MOLTIPLICATI PER 4), AVENDO COSI' DI FATTO 28 BIT.

I 4 BIT MANCANTI, PER LA CORRETTA RAPPRESENTAZIONE DELL'INDIRIZZO, VERRANNO EROGATI DEL PROGRAM COUNTER.

4 BIT DEL PC 36 BIT ADDRESS ZERI

4 BIT 26 BIT 2 BIT

NOTA:

QUESTO PROG. FA SI CHE IO NON POSSA RAGGIUNGERE QUALSIASI POSIZIONE DI MEMORIA, MA SOLO QUESTE POSIZIONI APPARTENENTI AL MACRO BLOCCO DESCRITTO DAI 4 BIT PIU' SIGNIFICATIVI.

I 4 BIT PIU' SIGNIFICATIVI IDENTIFICANO 2^4 = 16 MACRO BLOCCHI.

LEZIONE 7: 29/03/23

ISTRUZIONI DI CONTROLLO DEL FLUSSO:

IF ($s3 < $s2)   $t0 = 0ELSE   $t0 = 0slt $t0, $s3, $s2

addi $v0, $zero, $zerolw $t0, 0($sp)lw $t1, 4($sp)lw $t2, 8($sp)addi $sp, $sp, +12jr $ra

NOTA:

L'istruzione addi, non è di tipo 'R' ma di tipo 'I'; questo perché ho una sola tra due operandi è una costante.

Se nel sottoprogramma siamo in grado di usare solo i registri $t0 non abbiamo l'obbligo di dover usare lo stack.Se invece i registri $t0 non bastano e quindi abbiamo la necessità di usare i registri $s allora dobbiamo garantireche al ritorno al main-program i valori $s originalisiano ripristinati.

Se però nel main-program i registri $sx assumono dei valori che non devono essere persi allora prima della chiamata al sottoprogramma vanno salvati nello stack e poi dopoessere ritornati al main-program vanno ripristinati.

REGISTRI E CONVENZIONI:

  • NOME: NUMERO REGISTRO: USO:
  • $zero 0 Zero
  • $v0-$v1 2-3 Restituire valori sottoprogrammi
  • $a0-$a3 4-7 Argomenti per sottoprogrammi
  • $t0-$t7 8-15 Variabili temporanee
  • $s0-$s7 16-23 Variabili non temporanee
  • $t8-$t9 24-25 Variabili temporanee
  • $gp 28 Global-pointer
  • $sp 29 Stack-pointer
  • $fp 30 Frame-pointer
  • $ra 31 Return-address
  • ★ RegistRi Preservati
  • ★ Registri non preservati
Dettagli
Publisher
A.A. 2020-2021
22 pagine
SSD Ingegneria industriale e dell'informazione ING-INF/01 Elettronica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher torta1998 di informazioni apprese con la frequenza delle lezioni di Calcolatori elettronici e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Pavia o del prof Danese Giovanni.