« Forum anonimo (sperimentale)

Le label in memoria

1 reply
Last
Buongiorno, ho visto che nei quiz "istruzioni assembly MIPS 2" c'è una domanda che chiede di assemblare un programma a mano, il mio dubbio è: la prima label che appare nel programma da che indirizzo di memoria parte? 

inoltre ho provato a scrivere un piccolo programma in assembly:


.text

.globl main

main:

pippo:

la $t1, pippo


eseguendo questo programma in $t1 viene caricato il valore 0x400024, perchè viene memorizzato questo valore?  nell'appendice A del libro c'è scritto che il text segment va da 0x400000 a 0x10000000, mi aspettavo che in $t1 ci fosse un valore presente nel data segment.

vi ringrazio in anticipo per la vostra risposta.

1 reply
  1. Re: Le label in memoria
    Buongiorno,
    l'etichetta pippo è associata all'istruzione "la $t1, pippo", quindi punta ad un'indirizzo di memoria del text segment, ovvero l'area di memoria che contiene le istruzioni da eseguire.

    In particolare l'etichetta si trova all'indirizzo 0x400024 perché nel text segment sono presenti alcune istruzioni di inizializzazione che vengono inserite da qtspim prima del codice scritto nel file .asm.
    Questo è facilmente verificabile dall'interfaccia di qtspim: tra le parentesi quadre c'è l'indirizzo di memoria a cui è salvata l'istruzione, dopo c'è la rappresentazione in esadecimale dell'istruzione, in grassetto l'istruzione vera e propria (ovvero dopo che il codice è stato assemblato) e a fianco è presente l'istruzione che era scritta nel file .asm.
    Si vede quindi che la pseudoistruzione "la $t1, pippo"  è stata assemblata nelle istruzioni "lui" e "ori", e che l'indirizzo 0x400024 punta a "lui".

    qtspim

    Se invece si prova a mettere nel .data una word comparirà nel segmento data (su qtspim si pu ò vedere nella tab data), e quella word avrà un indirizzo nell'intorno di 0x10000000