2016-08-13 4 views
2

kann mir jemand erklären, warum MARS die Pseudobefehle in zwei Anweisungen übersetzen: lui & ori? Gibt es Fälle, in denen die Übersetzung nur eine Anweisung enthält?MIPS "la" Pseudobefehl

Antwort

1

Dieses einfache Programm

.data    
msg: .asciiz "This is a string" 
.text 
    la $a0, msg # pseudo-instruction to load the address of the label str 

Verschiebt den Anweisungen

Address Code  Basic      Source 

0x00400000 0x3c011001 lui $1,0x00001001  4  la $a0, msg # pseudo-instruction to load the address of the label str 
0x00400004 0x34240000 ori $4,$1,0x00000000 

Und es ist immer diese beiden AFAIK Anweisungen. Der Befehl lui bewirkt, dass der Sofortwert um 16 Bits nach links verschoben und im Register gespeichert wird. Die unteren 16 Bits sind Nullen.

Auf diese Weise können Sie 32-Bit-Adresse (in Mips32) mit 32-Bit-Anweisungen laden.

1

Wie Sie jede Art von Befehl wissen können ein „ähnlicher“ Struktur-Befehl ist so aufgebaut: enter image description here

Die Größe, die für den Wert gespeichert wird, ist wirklich das Problem/Grund, dass sie es auf zwei gespaltet verschiedene Befehle.

Sie können in der Abbildung sehen, dass der größte Typ für Wert (I-Typ, der niedrigste) nur 26 Bit hat. Die Adresse hat einen 32-Bit-Wert, da Sie wissen, dass ein 32-Bit-Wert nicht in einen 26-Bit-Befehl passt. Und so gespaltet sie es in zwei Schritte:

  • Erster Schritt: die Adresse an die oberen 16 Bit des Registers geladen wird einen R-Typ-Befehl (LUI) Last oberen unmittelbare welche die zweite Struktur in der Figur . Es kopiert einfach die oberen 16 Bit in die oberen 16 Bit des Registers.
  • Zweiter Schritt: Kopieren Sie die unteren 16 Bits der Adresse mit einem Befehl oder. Es wird also nur den unteren Teil der Adresse in den unteren Teil des Registers "kopieren".