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
- Programma (area di Testo) = 0X100100 (inizio) 0X100238 (fine)
Spazio = 0X13B (byte) memoria non volatile ROM
- 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
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Appunti Calcolatori elettronici - parte seconda
-
Appunti Calcolatori elettronici - prima parte
-
Appunti del corso di Calcolatori elettronici
-
Appunti Calcolatori elettronici - seconda parte