Divisione di istruzioni SPIM
Domanda
[0x00400000] 0x3c011000 lui $1, 4096 ; 5: li $t0, 0x100000F4
[0x00400004] 0x342800f4 ori $8, $1, 244
[0x00400008] 0x8d100000 lw $16, 0($8) ; 6: lw $s0, 0($t0)
Quanto sopra è il mio programma SPIM, sono curioso di sapere che l'istruzione LI venga divisa in Lui e Ori qualcuno potrebbe spiegare cosa sta succedendo lì?
Qualsiasi aiuto apprezzato grazie !!
Soluzione
Li è uno pseudo-istruzioni (cioè, non esiste come codice operativo sui processori). Viene sempre espanso in un "carico superiore immediato"; e un'istruzione "o con immediata":
effettivamente: (4096 << 16) || 244
Il lui
L'istruzione verrà saltata se il numero non è grande; e ori
Will o con il registro 0.
Altri suggerimenti
Li è un carico immediato. Tuttavia, il valore che stai cercando di caricare è troppo grande per adattarsi alla sezione di dati immediati di tale istruzione. L'assemblatore lo divide quindi in due istruzioni che ogni metà di tale valore nelle parti superiore e inferiore di quel registro.