Question

Je rencontre des problèmes avec l'adressage mémoire dans MIPS. Il dit que l'adressage est aligné mot ... dans le texte ci-dessous, je ne comprends pas pourquoi il cherche les 2 bits les moins significatifs de l'adresse? Pourquoi? quelqu'un peut me donner un exemple pour clarifier / illustrer ce point fait ici ... donc est-il dire qu'une adresse valide sont tous demi-mot dont 2 bits les moins significatifs sont soit 00 ou 10?

si je veux charger un octet à partir d'une mémoire qui est aligné mot ?? Comment puis-je faire ceci? il est dit que je dois décalage vers la gauche par 2, i.e. faire le moins 2 bits significatifs 0 ... puis extraire les bits ...

texte alt http://img69.imageshack.us/img69/1603/jpgdw .jpg

Était-ce utile?

La solution

'mot aligné' signifie que la CPU sera toujours lu 4 octets.

Toutefois, si l'opération est en fait sur un court 2 octets, il est légitime d'avoir une adresse de fin 0B00 ou 0b10 (si l'adresse est encore) et la CPU percez les 2 octets corrects dans le registre lors du chargement en un registre ou d'écrire les informations correctes.

De même, lors de la lecture d'un caractère, les deux bits les moins significatifs peuvent prendre toute valeur, et l'octet correct est chargé dans le registre concerné, ou la partie correspondante (généralement le LSB) du registre est écrite dans la partie correcte de la mémoire.

Cependant, si vous essayez de lire un (4 octets) int avec une adresse qui ne se termine pas 0B00, alors vous obtiendrez un SEGV ou à peu près.

Autres conseils

Une adresse alignée demi-mot se termine en binaire 0 (décimal divisible par 2, le nombre d'octets dans un demi-mot). A se termine adresse alignée de mot en binaire 00 (décimal divisible par quatre, le nombre d'octets dans un mot).

Oui, la formulation et le graphique sont un peu obtus.

Je me souviens en cours d'exécution dans cette question lorsque vous travaillez avec MIPS. Ma suggestion serait de charger le mot entier d'abord, puis regarder les deux bits les moins significatifs et les utiliser pour déterminer les 8 bits sur les 32 que vous voulez vraiment charger.

Question, qu'est-ce que vous essayez de faire exactement? Êtes-vous écrit le code assembleur MIPS? Vous essayez de mettre en œuvre un processeur MIPS dans le matériel?

Si vous êtes juste à écrire le code assembleur pour MIPS, je crois savoir que vous pouvez utiliser lb avec une adresse mémoire et il le gérer correctement. Le seul moment où vous devez vous soucier de l'alignement correct est lorsque vous utilisez l'instruction pv.

Si vous voulez lire un seul octet, vous pouvez lire chaque emplacement dans la mémoire. Rien à craindre. L'alignement de mot ne joue ce rôle quand vous voulez lire plus d'un octet à la fois.

Si vous voulez lire une valeur de 4 octets qui traverse le mot frontière, vous pouvez le faire avec 4 opérations de lecture octet, décalage et ORing. Il est beaucoup plus lent que lecture simple.

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