addl %ebx, 4(%esi)
Mientras que el otro hace:
addl %ebx, %esi
Supuse que el segundo tardaría menos, pero lo cierto es que tardan lo mismo, más o menos, algunas veces uno es más rápido y otras veces es el otro. ¿es esto normal? ¿lo estoy entendiendo mal?
Los registros siempre son más rápidos que la RAM porque están dentro del CPU.
Es como cambiar estados de bits, mientras que para la RAM hay que dirigir un controlador de hardware para la RAM, y si se corre bajo un sistema operativo formal, el tiempo que las otras tareas usan para correr y la fragmentación de la memoria hace que sea más lento.
Pero es necesario.
En el primer ejemplo se estaba sumando el valor una dirección de memoria a un registro, y en el segundo se estaba sumando el valor de un registro en otro.
En las dos instrucciones se usan registros para obtener datos de registro mismo o de un índice de memoria, pero son casos diferentes que siempre se necesitan, siempre que se necesite usar memoria RAM masivamente es inevitable usar todos los casos, lentos y rápidos.