Estratto del documento

Direttive .GLOB e .SPACE

.GLOB <simbolo>, serve quando vogliamo raggirare dei processi che ci coprono di più moduli che devono essere tra di loro collegati da Link and Loader.

.SPACE n, dice all'assemblatore di disegnare uno spazio ampio n byte nel segmento dati corrente.

Lezione 33: 20/06/21 syscall

SPIM fornisce tramite SYSTEM CALL (SYSCALL) servizi analoghi a quelli del sistema operativo.

Passaggio parametro alla SYSCALL avviene attraverso i registri $a0-$a (se interi), $f12 (se in virgole mobile) e il codice della chiamata attraverso $v0.

Risultati restituiti in $v0, $f0 (se in virgole mobile).

Se ci sono più parametri si usa la memoria.

Esempio

Per stampare sulla console "Risposta = 5" devo:

str: .data ← segmento dati.
.asciiz "Risposta ="
.text
li $v0, 4 ← segmento testo
la $a0, str ← chiamata print_string
syscall ← stringa da stampare
li $v0, 1
li $a0, 5 ← chiamata printint
syscall ← intero da stampare

Nota

PRINT_INT
PRINT_FLOAT
PRINT_DOUBLE
codice chiamata → input
1 → $a0
2 → $f12
3 → $f0.

GLOBL e SPACE

.GLOBL ➔ GLOBL <SIMBOLO>, serve quando vogliamo raggirare dei processi, che si compongono di più moduli che devono essere tra di loro collegati dal Link and Loader.

.SPACE ➔ .SPACE n, dice all’assemblatore di riservare uno spazio pari a n byte nel seguito dati corrente.

Lezione 33: 10/06/21 syscall

SYSCALL: SPIM fornisce tramite SYSTEM CALL (syscall) servizi analoghi a quelli del sistema operativo.

Passaggio parametri alla SYSCALL avviene attraverso i registri $a0-$a3 (se interi), $f12 (se in virgole mobile) e il codice della chiamata attraverso $v0.

Risultati restituiti in $v0, $f0 (se in virgole mobile).

Se ci sono più parametri si usa la memoria.

Esempio

Per stampare sulla console "Risposta = 5" devo:

str: .data ⟵ seguito dati
.asciiz "Risposta ="
.text ⟵ seguito testo
li $v0, 4 ⟵ chiamata PRINT_STRING
la $a0, str ⟵ stringa da stampare
Syscall
li $v0, 1 ⟵ chiamata PRINTINT
li $a0, 5 ⟵ intero da stampare
Syscall

Nota

Codice Input
PRINT_INT 1 $a0
PRINT_FLOAT 2 $f12
PRINT_DOUBLE 3 $f0
PRINT STRING 4 $a0
READ INT 5 $v0
READ FLOAT 6 $f0
READ DOUBLE 7 $f0
READ STRING 8 $a0 = buffer, $a1 = lunghezza
EXIT 10 Reda il controllo del programma al programmatore

Lezione 24 31/05/23

Come è noto, conclusa la fase di simulazione di un programma, bisogna valutare quali requisiti di memoria debbano essere rispettati affinché il programma possa essere messo in esecuzione su una scheda reale basata sul processore MIPS. Come esempio si farà riferimento al programma Somma-BCD. syscall. rsm

  1. Programma (area di Testo) = 0X100100 (inizio) 0X100238 (fine)

Spazio = 0X13B (byte) memoria non volatile ROM

  1. Messaggi e addetti = 0X10020000 (inizio) 0X1001005C (fine)

Spazio = 0X5D (byte) memoria non volatile ROM

(3o) Risultati somme Addendi = 0x30001000 (inizio) → 0x30001004

Spazio = 0x7 = 8 (dec) byte

Memoria RAM

Nota

Nel caso avessi usato lo stack avrei dovuto identificare un'altra area di memoria.

Osserva: area testo

Area testo → inizio: 0x00400100 fine: 0x00400238 fine.RANE: 0x0040023B

Importante

Questo perché un'istruzione occupa 1WORD (4 byte) se inizia alla cella 0x400238 - 0x400239 - 0x40023A 0x40023B... finisce a questo indirizzo.

Osserva: messaggi e addendi

Messaggi e Addendi → inizio: 0x30000000 fine: 0x3000005C

Solo 4byte occupato (contenuto in mem.)

Importante!

Nell'ultima cella di memoria ho occupato solo 1 byte quindi inizierà all'indirizzo 0x3000005C e terminerà all'indirizzo 0x3000005D.

In questo caso non ho il vincolo rigoroso di occupare per forza tutta la word (4 byte) perché solo dati e non word.

Lezione 35: 23/06/23

L'istruzione per fare la divisione (quando devo dividere per potenze di due mi conviene usare lo shift a destra) è div.

div $t0, $t3

Divisore

Dividendo

I risultati di questa operazione vengono salvati in due registri appositi HIGH e LOW.

Esempio

6 / 5 = 1 con Resto = 1

Il risultato è salvato in LOW.

Il resto è salvato in HIGH.

Allora:

Per poter usare questo risultato devo copiarlo nei registri che posso poi utilizzare. (1 FDA i 32 disponibili).

Per poter fare ciò vado ad utilizzare due nuove istruzioni

Anteprima
Vedrai una selezione di 6 pagine su 21
Appunti Calcolatori elettronici - terza parte Pag. 1 Appunti Calcolatori elettronici - terza parte Pag. 2
Anteprima di 6 pagg. su 21.
Scarica il documento per vederlo tutto.
Appunti Calcolatori elettronici - terza parte Pag. 6
Anteprima di 6 pagg. su 21.
Scarica il documento per vederlo tutto.
Appunti Calcolatori elettronici - terza parte Pag. 11
Anteprima di 6 pagg. su 21.
Scarica il documento per vederlo tutto.
Appunti Calcolatori elettronici - terza parte Pag. 16
Anteprima di 6 pagg. su 21.
Scarica il documento per vederlo tutto.
Appunti Calcolatori elettronici - terza parte Pag. 21
1 su 21
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
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.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community