2009-07-22 8 views
6

sto facendo un po 'di lavori che comportano MIPS di montaggio, e continuo a venire attraverso queste quattro load/store pseudoistruzioni in virgola mobile: l.s, l.d, s.s, s.d. Ho trovato alcuni documenti online e ho capito che ci sono quattro istruzioni "reali" che sembrano fare la stessa cosa: lwc1, ldc1, swc1 e .MIPS virgola mobile: SWC1 vs s.s

La mia unica domanda è, qual è la differenza? Per quanto posso dire, entrambe le serie di istruzioni fanno esattamente la stessa cosa. Forse gli pseudos esistono solo perché sono più facili da leggere?

Grazie in anticipo per eventuali approfondimenti.

risposta

7

La mia unica domanda è, qual è la differenza? Per quanto posso dire, entrambe le serie di istruzioni fanno esattamente la stessa cosa.

Sì, hai ragione. L'unica differenza che potrebbe apparire è quando una pseudo-istruzione è tradotta in più di un'istruzione "reale".

Gli pseudos possono esistere solo perché sono più facili da leggere?

Ancora, sì. Questo è perché esistono. Danno l'illusione di un set di istruzioni più espressivo. Citando Computer organization and design/Patterson & Hennessy:

... l'assemblatore può anche trattare varianti comuni di istruzioni in linguaggio macchina come se fossero istruzioni a tutti gli effetti. L'hardware non deve implementare queste istruzioni; tuttavia, la loro apparizione nel linguaggio assembly semplifica la traduzione e la programmazione. ...

Dato il tuo esempio, è più "chiaro" per dire:

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

di

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

così come si può capire meglio:

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

di

add $7, $18, $0 

Per me, è solo essere aiutato dai mnemonici per ottenere un codice migliore leggibile.

2

In realtà penso che,

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

ecc ...


Indovinate un po ', mi ha colpito su una pagina dei brevetti cercando di ricordare questi.

US Patent 5555384 - Ripianificazione conflittuali istruzioni impartite ritardando un'istruzione in conflitto nella stessa fase gasdotto come terza istruzione non in conflitto

Ci sono due tipi di istruzioni di carico attuate da FPC 20:
LWC1 (Load Coprocessore di parole 1, mostrato in figura 4) e
LDC1 (carica coprocessore parola doppia 1, mostrato in figura 8).

LWC1 carica una parola a 32 bit dal sottosistema di memoria nei registri generali FPC.
LDC1 carica una parola doppia a 64 bit dal sottosistema di memoria nei registri generali FPC.

che lo conferma.
(btw: non preoccupatevi di cercare le figure qui indicate a meno che non abbiate accesso al sito).

+0

Grazie, ma l'ho capito già (quelli sono elencati nella documentazione ufficiale). Forse avrei dovuto essere più chiaro, ma la mia domanda era la differenza tra la versione pseudoinstruction di ogni istruzione load/store single/double e la versione attuale (lwc1 vs l.s, ldc1 vs l.d, ecc.). –

+0

Mi aspetterei che il motivo per il psudocode e il nome del set di istruzioni sia per semplicità e portabilità dello psudocode tra le variazioni in ISA. – nik