2010-02-22 3 views
12

Si je veux charger une valeur à partir d'une mémoire qui adresse de base est à $ a0 et off set t2 $, pourquoi je ne peux pas faire ce qui suit:MIPS mot de charge syntaxe

lw $s2, $a1($t2) 

Quelle est donc la équivalent de l'expression ci-dessus?

Répondre

14

Vous ne pouvez pas faire cela parce qu'il n'y a pas d'encodage d'instruction MIPS qui supporte une telle chose. Vous devez faire l'ajout vous:

add $a2, $a1, $t2 
lw $s2, 0($a2) 

L'encodage d'instructions lw ressemble à ceci:

1000 11ss ssst tttt iiii iiii iiii iiii 

sssss est le numéro de registre source, ttttt est le numéro de registre de destination et iiiiiiiiiiiiiiii est l'immédiat . Il n'y a pas de place dans cet encodage (et pas d'encodages d'instructions alternatifs) qui utilisent deux registres pour générer l'adresse mémoire. L'instruction de machine spécifique qui s'encodée de l'exemple ci-dessus est:

1000 1100 1101 0010 0000 0000 0000 0000 

Depuis l'immédiat est 0, $s2 est registre 18 et $a2 est registre 6.

+2

j'aime mips ... si simple – Polaris878

+1

@ Polaris878, Yay pour RISC! –