
En informática , un opcode ilegal , también llamado operación no implementada , [ 1 ] opcode no intencionado [ 2 ] o instrucción no documentada , 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, pero que, sin embargo, tiene un efecto. Los opcodes ilegales eran comunes en las CPU antiguas diseñadas durante la década de 1970, como la MOS Technology 6502 , la Intel 8086 y la Zilog Z80 . A diferencia de los procesadores modernos, esos procesadores antiguos tenían un presupuesto de transistores muy limitado, por lo que, para ahorrar espacio, sus diseñadores a menudo omitían circuitos para detectar opcodes inválidos y generar una interrupción para un manejador de errores. El funcionamiento de muchos de estos opcodes ocurre como un efecto secundario del cableado de los transistores en la CPU y, por lo general, combina funciones de la CPU que no estaban destinadas a combinarse. En 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 el bloqueo del dispositivo), algunas pueden tener funciones útiles en ciertas situaciones. Dichas instrucciones se explotaron en ocasiones en los videojuegos de las décadas de 1970 y 1980 para acelerar ciertas secciones críticas en cuanto al tiempo. Otro uso común se dio en la constante batalla entre las implementaciones de protección anticopia y el cracking . En este caso, constituían una forma de seguridad por ocultación , y su secreto generalmente no duraba mucho.
Un peligro asociado al uso de instrucciones ilegales era que, dado que el fabricante no garantizaba su existencia ni su funcionamiento, estas podían desaparecer o comportarse de forma diferente con cualquier modificación de los componentes internos de la CPU o con cualquier nueva revisión de la misma, lo que hacía que los programas que las utilizaban fueran incompatibles con las revisiones más recientes. Por ejemplo, varios juegos antiguos de Apple II no funcionaban correctamente en el Apple IIc , porque este último utilizaba una revisión de CPU más reciente ( la 65C02 ) que eliminaba los códigos de operación ilegales.
Las CPU más recientes, como la 80186 , la 80286 , la 68000 y sus descendientes, no tienen códigos de operación ilegales ampliamente conocidos o utilizados. Idealmente, la CPU se comportará de manera bien definida cuando encuentre un código de operación desconocido en el flujo de instrucciones, por ejemplo, activando una excepción o condición de fallo . El manejador de excepciones o fallos del sistema operativo generalmente finalizará la aplicación que causó el fallo, a menos que el programa haya establecido previamente su propio manejador de excepciones o fallos, en cuyo caso dicho manejador tomará el control. Otra forma menos común de manejar las instrucciones ilegales es definirlas 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, las instrucciones desconocidas pueden emularse en software (por ejemplo, LOADALL ), o incluso pueden implementarse pseudo-instrucciones "nuevas". Algunas BIOS , administradores de memoria y sistemas operativos aprovechan esto, por ejemplo, para permitir que las tareas V86 se comuniquen con el sistema subyacente, es decir, BOP (de "BIOS Operation") utilizado por el NTVDM de Windows . [ 3 ]
A pesar de la garantía de Intel contra este tipo de instrucciones, investigaciones que utilizaron técnicas como el fuzzing descubrieron una gran cantidad de instrucciones no documentadas en procesadores x86 incluso en 2018. [ 4 ] Algunas de estas instrucciones son compartidas entre fabricantes de procesadores, lo que indica que tanto Intel como AMD conocen la instrucción y su propósito, aunque no aparezca en ninguna especificación oficial. Otras instrucciones son específicas de fabricantes o líneas de productos específicas. Se desconoce el propósito de la mayoría de las instrucciones no documentadas de x86.
Actualmente, los detalles de estas instrucciones son de interés principalmente para la emulación exacta de sistemas antiguos.
Véase también
Referencias
- ↑ "1.2. Formato de instrucción". Manual de referencia del PDP-10: Programación con el conjunto de instrucciones del PDP-10 ( PDF) . Vol. 1. Digital Equipment Corporation (DEC). 1969. págs. 1-7 . Consultado el 13 de mayo de 2022 .
- ↑ Åkesson, Linus (31 de marzo de 2013). "Decodificación GCR sobre la marcha" . Archivado del original el 21 de marzo de 2017. Recuperado el 21 de marzo de 2017 .
- ↑ Schulman, Andrew; Brown, Ralf D .; Maxey, David; Michels, Raymond J.; Kyle, Jim (1994) [noviembre de 1993]. Undocumented DOS: Guía del programador para funciones y estructuras de datos reservadas de MS-DOS, ampliada para incluir MS-DOS 6, Novell DOS y Windows 3.1 (2.ª ed.). Reading, Massachusetts: Addison Wesley . ISBN 0-201-63287-X.(xviii+856+vi páginas, disquete de 3,5 pulgadas) Erratas:
- ↑ Domas, Christopher (31 de agosto de 2017). "Rompiendo el conjunto de instrucciones x86" . YouTube . Archivado del original el 19 de diciembre de 2021. Consultado el 3 de enero de 2018 .
Lecturas adicionales
- Vardy, Adam (27-09-1996) [22-08-1995]. "Instrucciones adicionales de la CPU de la serie 65XX" . Archivado del original el 28-08-2021 . Recuperado el 18-11-2021 .(Nota: Códigos de operación ilegales en el 6502.)
- Steil, Michael (29/07/2008). "Cómo funcionan realmente los códigos de operación ilegales de MOS 6502" . pagetable.com - Se requiere algo de ensamblaje . Archivado del original el 19/11/2021 . Consultado el 18/11/2021 .
- Young, Sean (18 de septiembre de 2005) [1997]. "Documentación del Z80: El Z80 no documentado documentado" . 0,91. Archivado del original el 9 de octubre de 2021. Recuperado el 18 de noviembre de 2021 .(Nota: Códigos de operación ilegales en el Z80).
- Brown, Ralf D. , ed. (29-12-2002) [17-07-2000, 1985]. "La lista de interrupciones x86" (61.ª ed.). Archivado del original el 22-08-2017 . Recuperado el 14-10-2011 .(Nota: La lista de interrupciones de Ralf Brown también contiene información sobre códigos de operación y errores del procesador no documentados: OPCODES.LST de Alex V. Potemkin y 86BUGS.LST de Harald Feldmann).
Enlaces externos
- El sitio web sandpile.org de Christian Ludloff también contiene información sobre códigos de operación no documentados.
- Código máquina