Tengo algunos aspectos adicionales aquí:
Considere la operación "a = b / c" x86 implementaría esto como
mov eax,b
xor edx,edx
div dword ptr c
mov a,eax
Como una ventaja adicional de la instrucción div, edx contendrá el resto.
Un procesador RISC requeriría primero cargar las direcciones de byc, cargar byc de la memoria a los registros, hacer la división y cargar la dirección de ay luego almacenar el resultado. Sintaxis de dst, src:
mov r5,addr b
mov r5,[r5]
mov r6,addr c
mov r6,[r6]
div r7,r5,r6
mov r5,addr a
mov [r5],r7
Aquí normalmente no quedará un resto.
Si alguna variable se va a cargar a través de punteros, ambas secuencias pueden volverse más largas, aunque esto es una posibilidad menor para el RISC porque puede tener uno o más punteros ya cargados en otro registro. x86 tiene menos registros, por lo que la probabilidad de que el puntero esté en uno de ellos es menor.
Pros y contras:
Las instrucciones RISC se pueden mezclar con el código circundante para mejorar la programación de instrucciones, esto es menos posible con x86 que, en cambio, hace este trabajo (más o menos bien dependiendo de la secuencia) dentro de la propia CPU. La secuencia RISC anterior normalmente tendrá una longitud de 28 bytes (7 instrucciones de 32 bits / 4 bytes de ancho cada una) en una arquitectura de 32 bits. Esto hará que la memoria fuera del chip funcione más al recuperar las instrucciones (siete recuperaciones). La secuencia x86 más densa contiene menos instrucciones y, aunque sus anchos varían, probablemente también esté viendo un promedio de 4 bytes / instrucción allí. Incluso si tiene cachés de instrucciones para acelerar esto, siete recuperaciones significa que tendrá un déficit de tres en otros lugares para compensar en comparación con el x86.
La arquitectura x86 con menos registros para guardar / restaurar significa que probablemente hará cambios de hilo y manejará las interrupciones más rápido que RISC. Más registros para guardar y restaurar requieren más espacio de pila de RAM temporal para realizar interrupciones y más espacio de pila permanente para almacenar estados de subprocesos. Estos aspectos deberían hacer que x86 sea un mejor candidato para ejecutar RTOS puros.
En una nota más personal, me resulta más difícil escribir un ensamblaje RISC que x86. Resuelvo esto escribiendo la rutina RISC en C, compilando y modificando el código generado. Esto es más eficiente desde el punto de vista de la producción de código y probablemente menos eficiente desde el punto de vista de la ejecución. Todos esos 32 registros para realizar un seguimiento. Con x86 es al revés: 6-8 registros con nombres "reales" hacen que el problema sea más manejable e infunde más confianza en que el código producido funcionará como se esperaba.
¿Feo? Eso está en el ojo del espectador. Prefiero "diferente".