Jump to content

Modifica Stile
Primario: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Secondario: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Sfondo: Blank Waves Squares Notes Sharp Wood Rockface Leather Honey Vertical Triangles
Corsi di Laurea










ROX @ Unisa - Forum degli studenti di Ingegneria utilizza i cookie. Se prosegui la navigazione accetti il loro uso.    Accetto l'uso dei cookie
-->
Photo

Uso del registro fp e direttiva .space


  • Please log in to reply
11 replies to this topic

#1
Fabrix883

Fabrix883

    Advanced Member

  • Utente
  • PipPipPip
  • 94 posts
Qualcuno potrebbe spiegarmi l'uso del registro fp (frame pointer) nelle chimate a procedure.
Inoltre nell'ultimo compito per allocare v_glob[20] si utilizza .space per allocare gli 80 byte
vett: .space 80
ma se ci fosse stata anche una dichiarazione di un'altra variabile globale, come dovrei comportarmi?
int vett[20];
int tmp;
...
main()
...
Spero che qualcuno mi possa aiutare :beg:


Perché la vita non ha senso... se non la racconti a qualcuno
Se ti ci metti con impegno, raggiungi qualsiasi risultato.[Emmett "Doc" Brown]

#2
Mr_fox

Mr_fox

    Newbie

  • Utente
  • PipPipPip
  • 680 posts
Il fraim pointer serve per conservare l'indirizzo della base...

Penso che per l'allocazione di un'altra variabile globale c'è bisogno di un nuovo punto space per
la nuova variabile

Es

int V_globl[20]
int x

vett: .space 80
a: .space 4
ciò che resta è la netta consapevolezza di non poter cambiare la vita... (luigi pirandello)

#3
Fabrix883

Fabrix883

    Advanced Member

  • Utente
  • PipPipPip
  • 94 posts
grazie, ho capito la direttiva .space
però, riferendoti al frame pointer, cosa intendi per indirizzo della base?
Perché la vita non ha senso... se non la racconti a qualcuno
Se ti ci metti con impegno, raggiungi qualsiasi risultato.[Emmett "Doc" Brown]

#4
GiX

GiX

    Advanced Member

  • Utente
  • PipPipPip
  • 108 posts
[edit]

Indirizzo della base nel senso che punta all'ultima word che è stata inserita nello stack, quindi, visto che i nostri stack crescono dal basso verso l'alto, punta alla base dello stack.

Prima credo di aver scritto una colossale boiata Oo

#5
Mr_fox

Mr_fox

    Newbie

  • Utente
  • PipPipPip
  • 680 posts
fabri ecco ti ho fatto un esempio sulle variabili globali

Attached Files


ciò che resta è la netta consapevolezza di non poter cambiare la vita... (luigi pirandello)

#6
Fabrix883

Fabrix883

    Advanced Member

  • Utente
  • PipPipPip
  • 94 posts
Grazie Mr_fox per l'esercizio e per le spiegazioni date; se mi risolrvi anche l'ultimo mio dubbio sarebbe l'ideale :lol2:
...
int InizializzaVettore(int v[]);
....
__start:
main:
# PROLOGO
addi $sp, $sp, -52
sw $fp, 52($sp)
sw $ra, 48($sp)
sw $s0, 44($sp)
addi $fp, $sp, 52


addi $a0, $fp, -48
jal InizializzaVettore
add $s0, $v0, $0
dato che in $a0$ và messo il parametro della procedura, che in questo caso è l'indirizzo della prima cella del vettore, come mai si aggiunge -48, invece di -52? :huh:
Perché la vita non ha senso... se non la racconti a qualcuno
Se ti ci metti con impegno, raggiungi qualsiasi risultato.[Emmett "Doc" Brown]

#7
aRbok

aRbok

    Advanced Member

  • Utente
  • PipPipPip
  • 1,517 posts
te lo spiego io il perchè: il registro $sp è lo stack pointer,cioè è il puntatore della prima cella di memoria libera nell'area di memoria stack. Se facessi addi $fp,$fp,-52 andresti a finire proprio in questa cella libera di memoria mentre lo starting address del vettore si trova nell'indirizzo immediatamente successivo a questo. Percìò (considerando che la memoria del MIPS è indirizzabile in byte e l'intero occupa 4 byte) bisogna prendere l'indirizzo "successivo" cioè sp+4 o meglio,in questo caso, fp-48.
Fai ciò che vuoi : sarà tutta la Legge. Amore è la Legge, Amore sotto la Volontà.

#8
Mr_fox

Mr_fox

    Newbie

  • Utente
  • PipPipPip
  • 680 posts
te lo spiego subito..
"
__start:
main:
# PROLOGO
addi $sp, $sp, -52
sw $fp, 52($sp)
sw $ra, 48($sp)
sw $s0, 44($sp)
addi $fp, $sp, 52


addi $a0, $fp, -48
jal InizializzaVettore
add $s0, $v0, $0

"
Tu quando fai il passaggio dei parametri solitamente fai :

addi $a0,$SP,4 ovvero fai -52 + 4 = -48

mentre li fai
perchè ti ricordo che in $fp hai fatto $sp +52 ovvero :
$fp=0

addi $a0,$fp,-48 ovvero fai 0 + (-48) = -48

ovvero la stessa cosa....
ciò che resta è la netta consapevolezza di non poter cambiare la vita... (luigi pirandello)

#9
Fabrix883

Fabrix883

    Advanced Member

  • Utente
  • PipPipPip
  • 94 posts
ok, chiaro... quindi questo vale ogni volta che dobbiamo salvare i valori di un vettore, o qualsiasi altra variabile, nello stack giusto?
Perché la vita non ha senso... se non la racconti a qualcuno
Se ti ci metti con impegno, raggiungi qualsiasi risultato.[Emmett "Doc" Brown]

#10
Peppeweb

Peppeweb

    Advanced Member

  • Utente
  • PipPipPip
  • 1,096 posts

grazie, ho capito la direttiva .space
però, riferendoti al frame pointer, cosa intendi per indirizzo della base?

Ti consiglio di fare una capatina da pergen per farti spiegare l'argomento perchè è una cosa collegata soprattuto con quelle poche cose teoriche
...Per aspera sic itur ad astra...
Galaxy S4
iPhone5S

#11
nobody

nobody

    Advanced Member

  • Utente
  • PipPipPip
  • 62 posts
ragazzi ma io con la direttiva space alloco lo spazio della variabile da utilizzare ma come lo utilizzo,cioè come ne ricavo l'indirizzo..grazie

e perchè emilio scrive
a: .word 5 a cosa serve ciao :doofy:

#12
Peppeweb

Peppeweb

    Advanced Member

  • Utente
  • PipPipPip
  • 1,096 posts

ragazzi ma io con la direttiva space alloco lo spazio della variabile da utilizzare ma come lo utilizzo,cioè come ne ricavo l'indirizzo..grazie

e perchè emilio scrive
a: .word 5 a cosa serve ciao :doofy:


Bhe mettere 5 con word non ha senso perchè viola il vincolo di allineamento di 4 byte per word.
Cmq per utilizzare poi un'area indirizzata tramite etichetta puoi fare la load address da etichetta a regisitro o tramite indirizzamento base register
...Per aspera sic itur ad astra...
Galaxy S4
iPhone5S




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users