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 !!

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top