Question

Je suis auto étudier l'offre d'architecture informatique à l'université du Michigan. Je ne comprends pas pourquoi la mise en page de mémoire pour d commence à 312-319 au lieu de 308 http : //www.flickr.com/photos/45412920@N03/4442695706/ . ( http://www.flickr.com/photos/45412920@N03/4442695706/ ) Peut-être que je ne l'ai pas comprendre le règle d'or spécifiée http: // www. flickr.com/photos/45412920@N03/4441916461/sizes/l/ ici ( http://www.flickr.com/photos/45412920@N03/4441916461/sizes/l/ ) bien.

Était-ce utile?

La solution

Le second lien montre que MIPS ne peut pas emballer les variables, donc les adresses qu'ils prennent doivent tomber sur les limites de mots.

si court est demi-mot aligné, il prend deux octets, int, est le mot aligné de sorte qu'il occupe 4 octets, double doit être aligné de façon double mot il prend 8 octets.

Afin d'aligner ces endroits ..

A zéro dans le bit le moins significatif (LSB) indiquerait tout autre ou tous les 2 octets (demi-mot aligné), 2 zéros indique chaque octet quatrième et 3 zéros chaque octet 8e.

Address (4 LSBs)
    XXX0 - half word aligned (2 bytes)
    XX00 - Word aligned (4 bytes)
    X000 - Double word aligned (8 bytes)

Le double doit être double mot aligné de sorte qu'il ne peut pas démarrer à 308 (100110100) parce qu'il est seul mot aligné (2 LSB = 0) il doit commencer à l'alignement de mot double suivant 312 (100111000)

[Addr]   [Binary]    [Alignment]  
300      100101100   Word, Half-Word
301      100101101
302      100101110   Half-Word
303      100101111   
304      100110000   Double-Word, Word, Half-Word
305      100110001
306      100110010   Half-Word
307      100110011 
308      100110100   Word, Half-Word
309      100110101   
310      100110110   Half-Word
311      100110111  
312      100111000   Double-Word, Word, Half-Word

Autres conseils

accès à la mémoire sur le MIPS est aligné mot qui signifie soit lit la mémoire 32 bits / 4 octets à la fois. Étant donné que la variable « b » est un seul octet, il lit effectivement les adresses 300-303. Si la variable « c » devait commencer à 301, le processeur devrait savoir que « b » est seulement un octet et zéro les autres octets et peut-être passer à la LSB la position (ou le compilateur devrait le faire). De toute façon, il est plus efficace de simplement se poser tous les accès mémoire sur 4 limites d'octets (multiples de 4).

structure d'alignement de données pour plus d'informations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top