Detente y prende fuego

Halt and Catch Fire (código mnemotécnico HCF ) es una instrucción ensambladora hipotética , tras su ejecución, la unidad central de procesamiento de la computadora deja de ejecutar más comandos, por lo que es necesario realizar un reinicio "duro" para restaurar la funcionalidad .

Orígenes

La existencia de alguna instrucción en ensamblador, cuya ejecución llevaría a la computadora a un estado de inoperabilidad, se atribuyó a las computadoras de la arquitectura IBM System/360 . La designación mnemotécnica de las instrucciones de ensamblaje se realizó de acuerdo con la abreviatura de la función principal de la instrucción, por ejemplo, ADD (agregar otro número a un número) o CMP (comparar números). Entre estos comandos se interpretaron ambiguamente comandos como ZAP (literalmente "Shock", de hecho - Zero y Add Packed , "Reiniciar el registro y agregarle un número decimal empaquetado") [1] . Los programadores que trabajaron con este ensamblador comenzaron a idear sus propias designaciones mnemotécnicas y les atribuyeron una interpretación humorística. Entonces, por ejemplo, los comandos XPR ( Ejecutar programador , "Ejecutar un programador"), CAI ( Información contable corrupta , "Datos contables estropeados") [2] , así como "SDI" ( Autodestrucción inmediata , " Autodestrucción inmediata"). destruct”) [2] y CRN ( Convertir a números romanos , "Convertir a números romanos") [3] . Entre estas designaciones humorísticas, también apareció el comando HCF (Halt and Catch Fire , "Halt and catch fire") [4] [5] [6] . La primera mención de HCF apareció a mediados de la década de 1970 [4] [5] .

En el sentido original, el significado de prenderse fuego no significaba una ignición literal, sino una pérdida completa de funcionalidad hasta el próximo reinicio "duro". Pero hubo rumores sobre fallas en el equipo debido a comandos incorrectos [7] . Hay una leyenda urbana : en una computadora de la década de 1960, todo aumentó y aumentó la velocidad de la memoria magnética , cosida con cables delgados. Las corrientes aumentadas no interfirieron con la operación normal, sin embargo, la operación HLT ( Halt , esperando una señal de un dispositivo externo ) se implementó como "si no había señal, salta a la misma dirección". La lectura repetida de la misma celda condujo al agotamiento del cable correspondiente.

Ejemplos existentes

El microprocesador Motorola 6800 fue el primer procesador en tener una instrucción no documentada que era similar a HCF [8] . La empresa desarrolladora documentó 197 operaciones ( opcodes ), mientras que la arquitectura del procesador permitió 256 combinaciones posibles. El investigador Jerry Wheeler intentó enviar las 59 "instrucciones no válidas" restantes al procesador, lo que condujo a resultados inesperados: una de las instrucciones puso el procesador en modo inactivo [8] :

Cuando se ejecutaba la instrucción, era posible averiguar qué estaba pasando solo con un osciloscopio . Desde el punto de vista del usuario, la máquina se detiene y detiene todos los intentos de reinicio. Los indicadores en el bus de direcciones muestran que el procesador está comenzando a releer secuencialmente toda la memoria muy rápidamente. Como resultado, el bus de direcciones se convierte en un contador de 16 bits. Sin embargo, el procesador no procesa lo que lee... solo lee.

Texto original  (inglés)[ mostrarocultar] Cuando se ejecuta esta instrucción, la única forma de ver lo que está haciendo es con un osciloscopio. Desde el punto de vista del usuario, la máquina se detiene y desafía la mayoría de los intentos de reiniciarla. Aquellas personas que tengan luces indicadoras en el bus de direcciones verán que el procesador comienza a leer toda la memoria, secuencialmente, muy rápidamente. En efecto, el bus de direcciones se convierte en un contador de 16 bits. Sin embargo, el procesador no se da cuenta de lo que está leyendo... simplemente lee.

Otro investigador, David Adans, señaló más tarde: “La instrucción DD puso al procesador en un ciclo sin fin de lectura secuencial del espacio de direcciones de la memoria (algunos ingenieros llamaron a esta instrucción HCF, pero nosotros la llamamos instrucción Drop Dead ). El modo Drop Dead fue excelente para identificar problemas de hardware con un osciloscopio; la lectura de las direcciones de memoria y el funcionamiento del generador de frecuencia encajan en bellas ondas cuadradas” [9] . Por lo tanto, esta instrucción era en realidad una función no documentada para ingresar el procesador en modo de diagnóstico [10] .

En otros procesadores, en gran parte debido a errores de diseño o características no documentadas, también es posible un efecto similar al modo de instrucción HCF. Entonces, en los procesadores de la familia Intel 8086 , había una instrucción HLT ( Halt , "Stop"), que detuvo la ejecución de más instrucciones y puso el procesador en modo de parada, del cual era posible salir al recibir la interrupción adecuada. , excepción de depuración, mediante la señal BINIT, INIT o RESET [ 11] . Algunos de los primeros chips de la familia 80486DX4 tenían un problema en el que era imposible salir del modo HLT y el sistema solo podía reiniciarse. Para solucionar este problema, los desarrolladores del sistema operativo introdujeron el modo sin hlt , que iniciaría un ciclo de espera infinito en lugar de ejecutar la instrucción dada [12] .

La última línea Intel Pentium tenía un problema de hardware al ejecutar la instrucción F00F C7C8 . En circunstancias normales, la aparición de dicha instrucción es imposible, sin embargo, un programador malicioso podría ingresar manualmente esta instrucción en el código ejecutable, lo que provocó que la computadora se congelara hasta el próximo reinicio. Para resolver el problema, Intel lanzó un microcódigo que corrige el error y luego eliminó este problema en revisiones posteriores del procesador [13] [14] .

Otro procesador ampliamente utilizado en la década de 1980, el MOS 6502 , tiene 12 instrucciones no válidas que hacen que se cuelgue [15] [16] .

El procesador Z-80 también tiene una secuencia de instrucciones que conducen a un bloqueo: DI, HALT. La fiesta de demostración de DiHalt lleva su nombre .

Notas

  1. IBM System/360 Principios de funcionamiento . IBM . Consultado el 2 de julio de 2014. Archivado desde el original el 29 de febrero de 2012.
  2. 1 2 Dunlap, Bryan Un conjunto de instrucciones propuesto (enlace no disponible) . Departamento de Física, Universidad Estatal de Ohio . Consultado el 20 de junio de 2016. Archivado desde el original el 8 de septiembre de 2017. 
  3. Códigos de operación lejanos, Werner Cirsovius , < http://www.cirsovius.de/Firmen/Uni-Chaos/FUN/opcodes.html > . Consultado el 28 de mayo de 2015. Archivado el 5 de marzo de 2016 en Wayback Machine . 
  4. ↑ 1 2 "Asunto: instrucción HCF: de los principios de funcionamiento" Archivado el 24 de febrero de 2017 en Wayback Machine , Archivado en textfiles.com
  5. ↑ 1 2 Nemónicos de código de operación apócrifos, largos Archivado desde el original el 22 de enero de 2011. , 23/04/1990, alt.folklore.computers , (a través de Grupos de Google)
  6. Overextended Mnemonics , Creative Computing Vol . 6 (4): 17 (hexadecimal) (reverso), abril de 1980 /2up > . Consultado el 12 de marzo de 2017. 
  7. HCF _ www.catb.org. Consultado el 8 de septiembre de 2017. Archivado desde el original el 20 de mayo de 2012.
  8. 12 Ruedas , Gerry. Instrucciones M6800 no documentadas  // BYTE  :  magazine. - 1977. - Diciembre ( vol. 2 , no. 12 ). - Pág. 46-47 .
  9. Agans, David J. Depuración : las 9 reglas indispensables para encontrar incluso los problemas de software y hardware más esquivos  . - Nueva York: American Management Association, 2002. - P. 77. - ISBN 9780814426784 . Archivado el 26 de julio de 2014 en Wayback Machine .
  10. Daniels, R. Gary; Bruce, Guillermo. Tendencias de autocomprobación incorporadas en los microprocesadores de Motorola   // Diseño y prueba de IEEE :revista. - 1985. - Abril ( vol. 2 , no. 2 ). - P. 64-71 . -doi : 10.1109/ MDT.1985.294865 . "HACOF se convirtió así en la primera función de autocomprobación integrada intencional en un microprocesador de Motorola".
  11. Referencia del conjunto de instrucciones x86: HLT (enlace no disponible) . Consultado el 2 de julio de 2014. Archivado desde el original el 14 de julio de 2014. 
  12. Gortmaker, Paul El indicador de inicio de Linux : instrucciones . The Linux Documentation Project (21 de marzo de 2003). Consultado el 2 de julio de 2014. Archivado desde el original el 6 de julio de 2015.
  13. Collins, Robert R. El error del Pentium F00F: soluciones para un problema desagradable . Dr. Diario de Dobb (1 de mayo de 1998). Consultado el 11 de mayo de 2017. Archivado desde el original el 30 de abril de 2022.
  14. Actualización de la especificación del procesador Pentium  . - Intel , 1999. - S. 51-52. Archivado el 4 de marzo de 2016 en Wayback Machine .
  15. Steil, Michael Cómo funcionan realmente los códigos de operación ilegales MOS 6502 . pagetable.com . Consultado el 11 de mayo de 2017. Archivado desde el original el 7 de julio de 2016.
  16. Offenga, Freddy 6502 Códigos de operación no documentados . NesDev . Consultado el 11 de mayo de 2017. Archivado desde el original el 8 de agosto de 2016.