Comment fonctionnent les instructions Store Word (SW) et Load Word (LW), MIPS

KillaKem

Comment fonctionnent les instructions Store Word (SW) et Load Word (LW), MIPS


entrez la description de l'image ici

Les instructions SW et LW sont définies comme suit:

  sw $ t ,  offset ($ s )    :   1010   11 ss ssst tttt iiii iiii iiii iiii lw $ t ,  offset ($ s )    :   1000   11 ss ssst tttt iiii iiii iiii iiii 

SW effectue l’opération MEM [$ s + offset] = $ t, mais dans le chemin de données, il semble qu’ils aient effectué l’opération MEM [Data ($ s) + offset] = $ t, car au lieu de prendre la valeur $ s comme entrée dans l’ALU, il a pris les données stockées dans $ s.

LW effectue l’opération $ t = MEM [$ s + offset], mais en regardant le chemin de données, il semble qu’il exécute $ t = MEM [Data ($ s) + offset].

Une autre chose que je ne comprends pas est la raison pour laquelle nous utilisons l’extension de signe au lieu de simplement déplacer le signe vers le 32e bit et de remplir le reste des données avec des zéros. Si vous avez défini un décalage, c’est

0x8fff: 1000 1111 1111 1111

ce sera le signe étendu à 0xffff8fff: 1111 1111 1111 1111 1000 1111 1111 1111, qui est un nombre complètement différent de l’offset, le nombre dont nous avons vraiment besoin est 0x80008ffff.

Réponses


 Logique errante

$s et $t sont des spécificateurs de registre. Votre interprétation MEM[RegisterData(s) + offset] est fondamentalement correcte. $s signifie, essentiellement, « extraire les données du numéro de registre s dans le fichier de registre ». Donc, si s dans l’instruction est le motif binaire 10001 , alors $s signifie: lisez la valeur du registre 17, ajoutez les bits de décalage étendus au signe (les 16 bits représentés par i dans le codage), et utilisez-le comme adresse pour accéder à la mémoire. De même pour le $t dans l’instruction lw . Cela signifie réécrire les données dans le registre numéroté t .

Votre question sur l’extension de signe: recherchez le complément à deux . Le numéro de complément à 16 bits deux 0000 1111 1111 1111 est décimal +4095. Le numéro de complément à 16 bits deux 1000 1111 1111 1111 est décimal -28673. Le numéro de complément 32 bits deux 0xffff8fff est également -28673. Le numéro de complément 32 bits deux 0x80008fff est décimal -2147446785, ce qui n’est clairement pas ce que vous voulez.

 

(LW),, #et, comment, fonctionnent, instructions, Les, Load, MIPS, Store?, SW, Word

 

google

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *