División de instrucciones de spim
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 !!
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.