2009-07-22 8 views
6

Je fais un travail impliquant l'assemblage MIPS, et je continue à venir à travers ces quatre virgule flottante de chargement/stockage pseudo-instructions: l.s, l.d, s.s, s.d. J'ai trouvé de la documentation en ligne et j'ai compris qu'il y avait quatre instructions «réelles» qui semblaient faire la même chose: , ldc1, swc1 et sdc1. Ma seule question est, quelle est la différence? Autant que je sache, les deux séries d'instructions font exactement la même chose. Est-ce que les pseudos existent peut-être simplement parce qu'ils sont plus faciles à lire?MIPS à virgule flottante: SWC1 contre s.s

Merci d'avance pour tout renseignement.

Répondre

7

Ma seule question est, quelle est la différence? Autant que je sache, les deux séries d'instructions font exactement la même chose.

Oui, vous avez raison. La seule différence qui pourrait apparaître est quand une pseudo-instruction est traduite en plus d'une instruction "réelle".

Les pseudos existent peut-être juste parce qu'ils sont plus faciles à lire?

Encore une fois, oui. C'est pourquoi ils existent. Ils donnent l'illusion d'un ensemble d'instructions plus expressif. En citant Computer organization and design/Patterson & Hennessy:

... l'assembleur peut également traiter des variations courantes d'instructions de langage machine comme s'il s'agissait d'instructions en elles-mêmes. Le matériel n'a pas besoin de mettre en œuvre ces instructions; cependant, leur apparence dans un langage d'assemblage simplifie la traduction et la programmation. ...

Compte tenu de votre exemple, il est plus "clair" à dire:

l.s $f2, 24(t1)  # Load Single contained in 24(t1) to $f2 

que

lwc1 $f2, 24(t1)  # Load Word into Coprocessor 1 from 24(t1) to $f2 

aussi bien que vous pouvez mieux comprendre:

move $7, $18  # move contents of $18 to $7 

que

add $7, $18, $0 

Pour moi, les codes mnémotechniques facilitent l'obtention d'un code plus lisible.

2

En fait, je pense,

LWC1 is Load Word to Co-processor 1 
LDC1 is Load Double Word to Co-processor 1 

etc ...


Devinez quoi, je frappe sur une page de brevet en essayant de se rappeler ces derniers.

US Patent 5555384 - Rééchelonnement contradictoires instructions en retardant une instruction contradictoire dans le même stade de pipeline en tant que troisième instruction non contradictoire

Il existe deux types d'instructions de charge mises en œuvre par FPC 20:
LWC1 (charge Coprocesseur de mots 1, représenté sur la figure 4) et
LDC1 (Charger le coprocesseur à double mot 1, représenté sur la figure 8). LWC1 charge un mot de 32 bits à partir du sous-système de mémoire dans les registres généraux de FPC


LDC1 charge un double mot de 64 bits du sous-système de mémoire dans les registres généraux FPC.

qui le confirme.
(btw: ne vous embêtez pas à rechercher les chiffres référencés ici à moins que vous n'ayez accès au site ).

+0

Merci, mais je l'ai déjà compris (ceux-ci sont listés dans la documentation officielle). Peut-être aurais-je dû être plus clair, mais ma question était la différence entre la version de pseudo-construction de chaque instruction charge/magasin simple/double et la version actuelle (lwc1 vs l.s, ldc1 vs l.d, etc.). –

+0

Je m'attendrais à ce que la raison du pseudo-code et du nom de l'ensemble d'instructions soit la simplicité et la portabilité du psudocode à travers les variations de l'ISA. – nik

Questions connexes