Pregunta

[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)

Lo anterior es mi programa SPIM, tengo curiosidad sobre la instrucción de LI que se divide en Lui y Ori, ¿alguien podría explicar lo que está pasando allí?

cualquier ayuda apreciada gracias !!

¿Fue útil?

Solución

Li es una pseudoinstrucción (es decir, no existe como código de operación en procesadores). Siempre se expande en una 'superior de carga inmediata'; y una instrucción 'o con inmediato':

efectivamente: (4096 << 16) || 244

los lui La instrucción se omitirá si el número no es grande; y ori voluntad o con el registro 0.

Otros consejos

Li es una carga inmediata. Sin embargo, el valor que está tratando de cargar es demasiado grande para encajar en la sección de datos inmediato de esa instrucción. Por lo tanto, el ensamblador lo divide en dos instrucciones que cada mitad de ese valor cargue en las partes superior e inferior de ese registro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top