Charge 32 bits constant de s'inscrire dans MIPS
J'ai été confus au sujet de cette partie alors que j'ai étude MIPS.
Le livre écrit par le Professeur John L. Hennessy dire si nous avons un peu grand constant de charge, nous devrions
lui $s0, upper(big)
ori $s0, $s0, lower(big)
Mais pourquoi ne pas simplement faire
addi $s0, $zero, big
Depuis la tenue des registres de 32 bits, ce qui est plus strightforward, n'est-ce pas?
OriginalL'auteur lucasKo | 2012-10-31
Vous devez vous connecter pour publier un commentaire.
L'immédiat argument passé à
addi
est que de 16 bits. Pour charger une version 32 bits de la valeur immédiate qui est en dehors de la plage d'une valeur 16 bits, vous devez le faire en deux fois, comme dans l'exemple de votre livre de texte.(Anticipant une autre question, la raison pour laquelle il n'y a pas de charge, immédiatement ou à ajouter immédiate de l'instruction qui prendre un 32 bits de la valeur immédiate est parce que le MIPS ISA utilise fixe la taille de 32 bits instructions, il y a donc toujours < 32 bits disponible pour toute instruction arguments - ce qui est très commun dans les architectures RISC.)
OriginalL'auteur Paul R
Oui les registres de 32 bits, mais comment pouvez-vous préciser un nombre de 32 bits dans une instruction qui est en 32 bits? Une instruction se compose d'opcode et de données. Donc, on ne peut pas contraindre un opcode + 32-bits de données dans un seul addi.
OriginalL'auteur yaman
Alternativement, à l'aide de .les données et .texte
OriginalL'auteur Rafael Nagel
Vous pouvez utiliser littérale de la piscine si vous avez besoin de charger beaucoup de constantes. Ensuite, chaque constante de la charge uniquement les frais de 1 instruction de chargement. Plus d'informations ici et ici
OriginalL'auteur phuclv