2009-08-15 24 views
14

Así que estoy aprendiendo MIPS usando el simulador SPIM y estoy atascado en este problema.Agregando dos números de 64 bits en el ensamblaje

Quiero agregar dos números de 64 bits que se almacenan en cuatro registros de 32 bits. Así que agrego los bytes LO y luego el acarreo y los bytes HI. Pero no hay un comando adc/addc, es decir, agregar con carry.

Así que tendría que agregar el bit de acarreo en el registro de estado. Pero, ¿cómo exactamente leo este registro?

Si $ t0 es un registro temporal 1, ¿cuál es el equivalente del registro de estado que contiene el indicador de acarreo?

He buscado mucho en Google. Todavía no encuentro ejemplos que usen el registro de estado.

+0

no hay estado o indicador de registro en MIPS –

Respuesta

21

Agregar $ t2 t3 + $ $ $ t4 t5, resultan en $ t0 t1 $

addu $t1, $t3, $t5 # add least significant word 
sltu $t0, $t1, $t5 # set carry-in bit 
addu $t0, $t0, $t2 # add in first most significant word 
addu $t0, $t0, $t4 # add in second most significant word 

Para la segunda parte de su pregunta, no hay registro de estado. Ninguno en absoluto. Nada.

+0

Gracias. Tiene sentido por qué no pude encontrar el registro de estado :) Tu respuesta funciona perfectamente. ¿Hay algún lugar con consejos sobre una mejor codificación MIPS? –

+0

Hay pocos. Para mí, la meditación sobre la fuente de otras personas o mirar un objdump -S funciona. Puedes aprender de las raras ocasiones en que un compilador hace algo bien, pero puedes aprender aún más de los lugares, donde producen una gran basura, como de costumbre ;-) http://www.cs.unibo.it/~ solmi/teaching/arch_2002-2003/AssemblyLanguageProgDoc.pdf también proporciona algunos consejos útiles. – hirschhornsalz

+0

Gran solución. Me encanta cuando las soluciones a problemas aparentemente diificultivos (en mi humilde opinión) son tan elegantes. – Derek

Cuestiones relacionadas