2010-03-18 5 views
0

Je suis auto-étude de l'architecture d'ordinateur offre à l'Université du Michigan. Je ne comprends pas pourquoi la mise en page de la mémoire pour d starts at 312 to 319 instead of 308 http://www.flickr.com/photos/[email protected]/4442695706/. (http://www.flickr.com/photos/[email protected]/4442695706/) Peut-être que je n'ai pas compris le Golden rule specified http://www.flickr.com/photos/[email protected]/4441916461/sizes/l/ ici (http://www.flickr.com/photos/[email protected]/4441916461/sizes/l/) bien.Mips Calcul de la disposition des données

Répondre

1

Le deuxième lien montre que MIPS ne peut pas regrouper les variables, donc les adresses qu'ils prennent doivent tomber sur les limites des mots.

Si le mot court est aligné sur un demi-mot, il prend deux octets, int, est aligné sur un mot de sorte qu'il occupe 4 octets, le double doit être aligné sur deux mots, donc 8 octets.

Afin d'aligner ces lieux ..

A zéro bit le moins significatif (LSB) indiquerait tous les autres ou tous les 2 octets (demi-mot aligné), 2 Zéros indique chaque octet 4 et 3 zéros tous les 8 octets.

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 à la prochaine alignement de mot double 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 
+0

Salut Nate Heinrich: Merci beaucoup pour votre explication détaillée, elle répond parfaitement à ma question. Mais pourquoi "MIPS ne peut pas emballer variable" ou les variables doivent être alignés? Est-ce que "pack de variables" rendrait le processeur lent? –

0

L'accès mémoire sur le MIPS est aligné sur le mot, ce qui signifie qu'il lit la mémoire 32 bits/4 octets à la fois. Puisque la variable "b" est un seul octet, elle lit en fait les adresses 300-303. Si la variable "c" devait commencer à 301, le processeur devrait savoir que "b" est seulement un octet et mettre à zéro les autres octets et éventuellement le déplacer vers la position LSB (ou le compilateur devrait le faire). Quoi qu'il en soit, il est plus efficace de descendre tout l'accès à la mémoire sur les limites de 4 octets (multiple de 4). Pour plus d'informations, voir Data Structure Alignment pour plus d'informations.

Questions connexes