test syscall programming language jal instrucciones informatica assembler assembly mips

assembly - syscall - mips test



Lenguaje ensamblador MIPS-registro temporal vs registros guardados (1)

No hay diferencia entre las variables temporales y guardadas en cómo funcionan. La diferencia está en cómo se usan, o más bien, cómo se deben usar.

La convención de llamadas MIPS especifica cómo se utilizarán los distintos registros: los registros $v son para devoluciones de funciones, los registros $a son para argumentos de funciones, las variables $t son registros guardados temporalmente por el llamador , mientras que los registros $s son callee guardado

La diferencia entre la persona que recibe la llamada y la que se guarda es la siguiente: al llamar a una función, la convención garantiza que los registros $s son los mismos después de la devolución, mientras que la convención no garantiza esto para los registros $t . Por supuesto, esto significa que si desea utilizar los registros $s en una rutina, debe guardar y restaurar sus valores. Por ejemplo, si la función A usa los registros $t0 y $s0 y luego llama a una función B, debe guardar el registro $t0 si quiere usarlo después de que la función B regrese. La función B debe ahorrar $s0 antes de que pueda comenzar a usarla.

Un ejemplo:

main: li $s0 7 li $t0 7 jal myFunction #$s0 guaranteed to equal 7 #$t0 value not guaranteed

Este enlace parece información decente más profunda.

Por supuesto, todo esto es solo una convención y, por lo tanto, solo funciona si usted y los demás programas respetan la convención al guardar y restaurar $s registros de $s para que no sean sobrescritos por una llamada de función.

Hasta ahora he estado utilizando los registros $ s0- $ s9 y de la misma manera que los registros $ t0- $ t9. Me han dicho y leído innumerables publicaciones y párrafos de foros aquí y en Google que explican la diferencia, pero sin ejemplos de codificación. Me han dicho que debería ver la diferencia que conlleva el uso de procedimientos, pero he creado un sinnúmero de escenarios relacionados con procedimientos en un esfuerzo por encontrar la diferencia entre registros guardados y registros temporales, pero he fallado.

Me gustaría ver un ejemplo relativamente simple en el que un registro $ t0-9 no actuaría de la misma manera que un registro $ s0-9 y, como resultado, ¿produciría un valor diferente?