MIPS calcul de présentation des données
-
20-09-2019 - |
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.
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).