Un código de operación ilegal , también llamado instrucción indocumentada , es una instrucción para una CPU que no se menciona en ninguna documentación oficial publicada por el diseñador o fabricante de la CPU, que sin embargo tiene un efecto. Los códigos de operación ilegales eran comunes en las CPU más antiguas diseñadas durante la década de 1970, como MOS Technology 6502 , Intel 8086 y Zilog Z80 . En estos procesadores más antiguos, muchos existen como efecto secundario del cableado de los transistores.en la CPU y, por lo general, combinan funciones de la CPU que no estaban destinadas a combinarse. En los procesadores antiguos y modernos, también hay instrucciones incluidas intencionalmente en el procesador por el fabricante, pero que no están documentadas en ninguna especificación oficial.
Descripción general
Si bien la mayoría de las instrucciones ilegales accidentales tienen efectos inútiles o incluso muy indeseables (como bloquear la computadora), algunas pueden tener funciones útiles en determinadas situaciones. En ocasiones, estas instrucciones se aprovecharon en los juegos de ordenador de los años setenta y ochenta para acelerar ciertas secciones en las que el tiempo era crítico. Otro uso común fue en la batalla en curso entre las implementaciones de protección contra copias y el craqueo . Aquí, eran una forma de seguridad a través de la oscuridad , y su secreto por lo general no duraba mucho.
Un peligro asociado al uso de instrucciones ilegales era que, dado que el fabricante no garantiza su existencia y funcionamiento, estas podrían desaparecer o comportarse de manera diferente con cualquier cambio en los internos de la CPU o cualquier nueva revisión de la CPU, renderizando programas que utilícelos incompatibles con las revisiones más recientes. Por ejemplo, varios juegos antiguos de Apple II no funcionaron correctamente en el Apple IIc más nuevo , porque este último usa una revisión de CPU más reciente, 65C02 , que elimina los códigos de operación ilegales.
Las CPU más recientes, como 80186 , 80286 , 68000 y sus descendientes, no tienen códigos de operación ilegales que sean ampliamente conocidos / utilizados. Idealmente, la CPU se comportará de una manera bien definida cuando encuentre un código de operación desconocido en el flujo de instrucciones, como la activación de una cierta excepción o condición de falla. El manejador de excepciones o fallas del sistema operativo generalmente terminará la aplicación que causó la falla. Otra forma menos común de manejar instrucciones ilegales es definiéndolas para que no hagan nada excepto ocupar tiempo y espacio (equivalente a la instrucción NOP oficial de la CPU ); este método es utilizado por los procesadores TMS9900 y 65C02 , entre otros.Alternativamente, se pueden emular instrucciones desconocidas en software (por ejemplo, LOADALL ), o incluso se pueden implementar pseudoinstrucciones "nuevas". Algunos BIOS , administradores de memoria y sistemas operativos aprovechan esto, por ejemplo, para permitir que las tareas de V86 se comuniquen con el sistema subyacente ("bop").
A pesar de la garantía del fabricante contra tales instrucciones, la investigación que utiliza técnicas como fuzzing ha descubierto una gran cantidad de instrucciones indocumentadas en los procesadores x86 modernos. [1] Algunas de estas instrucciones se comparten entre los fabricantes de procesadores, lo que indica que Intel y AMD conocen la instrucción y su propósito, a pesar de que no aparece en ninguna especificación oficial. Otras instrucciones son específicas para fabricantes o líneas de productos específicas. Se desconoce el propósito de la mayoría de las instrucciones indocumentadas x86.
Hoy en día, los detalles de estas instrucciones son principalmente de interés para la emulación exacta de sistemas más antiguos.
Ver también
Referencias
- ^ Domas, Christopher. "Rompiendo el conjunto de instrucciones x86" . Consultado el 3 de enero de 2018 .
- Códigos de operación ilegales en el 6502: http://www.ffd2.com/fridge/docs/6502-NMOS.extra.opcodes (consulte también Cómo funcionan realmente los códigos de operación ilegales de MOS 6502 )
- Códigos de operación ilegales en el Z80: http://www.myquest.nl/z80undocumented/