Detener y prender fuego (informática)

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Instrucción del código informático

En ingeniería informática, Halt and Catch Fire, conocido por el mnemotécnico de ensamblaje HCF, es un modismo que se refiere a una instrucción de código máquina que hace que la computadora se active. s unidad central de procesamiento (CPU) deje de funcionar significativamente, lo que generalmente requiere reiniciar la computadora. Originalmente se refería a una instrucción ficticia en las computadoras IBM System/360 (introducida en 1964), haciendo una broma sobre sus numerosos mnemotécnicos de instrucciones no obvias.

Con la llegada del MC6800 (introducido en 1974), los programadores descubrieron un defecto de diseño. Debido a una decodificación incompleta del código de operación, dos códigos de operación ilegales, 0x9D y 0xDD, harán que el contador del programa en el procesador aumente sin cesar, lo que bloquea el procesador hasta que se reinicie. Esos códigos se han denominado extraoficialmente HCF. Durante el proceso de diseño del MC6802, los ingenieros originalmente planearon eliminar esta instrucción, pero la mantuvieron como está para fines de prueba. Como resultado, HCF fue reconocido oficialmente como una verdadera instrucción. Más tarde, HCF se convirtió en un término humorístico para designar instrucciones que pueden congelar un procesador, incluidas instrucciones intencionales con fines de prueba e instrucciones ilegales no intencionales. Algunos se consideran defectos de hardware y, si el sistema se comparte, un usuario malintencionado puede ejecutarlo para lanzar un ataque de denegación de servicio.

En el caso de instrucciones reales, la implicación de esta expresión es que, mientras que en la mayoría de los casos en los que una CPU ejecuta una instrucción no deseada (un error en el código) la computadora aún puede recuperarse, en el caso de una instrucción HCF, por definición, no hay forma de que el sistema se recupere sin reiniciar.

La expresión incendiarse es una exageración jocosa de la velocidad con la que el chip de la CPU estaría conmutando algunos circuitos del bus, provocando que se sobrecalentaran y quemaran.

Orígenes

Las computadoras Z1 (1938) y Z3 (1941) construidas por Konrad Zuse contenían secuencias ilegales de instrucciones que dañaban el hardware si se ejecutaban por accidente.

Historias apócrifas conectan este término con un código de operación ilegal en IBM System/360. Un procesador, al encontrar la instrucción, comenzaría a cambiar las líneas de bus muy rápidamente, lo que podría provocar un sobrecalentamiento.

En el lenguaje ensamblador de una computadora, se utilizan mnemónicos que son directamente equivalentes a las instrucciones del código de máquina. Los mnemónicos suelen tener tres letras, como ADD, CMP (para comparar dos números) y JMP (saltar a una ubicación diferente en el programa). La instrucción HCF era originalmente una instrucción ficticia en lenguaje ensamblador, que se decía que estaba en desarrollo en IBM para su uso en sus computadoras System/360, junto con muchos otros acrónimos divertidos de tres letras como XPR (Ejecutar programador) y CAI (Información contable corrupta). y similar a otras mnemónicas de broma como "SDI" para "Autodestrucción inmediata" y "CRN" para "Convertir a números romanos". Una lista de dichos mnemotécnicos, incluido HCF, aparece como "Mnemónicos sobreextendidos" en la edición de parodia de la otra cara de Creative Computing de abril de 1980.

En CPU modernas

Los diseñadores de CPU a veces incorporan una o más instrucciones de código de máquina no documentadas con fines de prueba, como la instrucción IBM System/360 DIAGnose.

Motorola 6800

El microprocesador Motorola 6800 fue el primero por el cual se hizo ampliamente conocido un mnemotécnico de ensamblaje HCF no documentado. Los códigos de operación (códigos de operación: las partes de las instrucciones en lenguaje de máquina que especifican una operación a realizar) son hexadecimales 9D y DD, y se informaron y recibieron el mnemónico no oficial HCF en un artículo escrito por Gerry Wheeler en la edición de diciembre de 1977 de BYTE. revista sobre códigos de operación indocumentados. Wheeler señaló que Motorola informó 197 códigos de operación válidos para el procesador M6800, por lo que dedujo que con 256 combinaciones posibles de 8 bits, debe haber 59 "instrucciones no válidas". Continúa describiendo el HCF como una "gran sorpresa" y, sobre la parte del apodo de Catch Fire, dice: "Bueno, casi":

Cuando esta instrucción se ejecuta la única manera 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 reiniciarlo. Las personas con lámparas indicadoras en el autobús de dirección verán que el procesador comienza a leer toda la memoria, secuencialmente, muy rápidamente. En efecto, el autobús de dirección se convierte en un contador de 16 bits. Sin embargo, el procesador no toma nota de lo que está leyendo... sólo lee.

El proceso es revisado por David Agans, así:

En los viejos tiempos del microprocesador Motorola 6800, el código de instrucción DD hizo que el procesador entrara en un bucle interminable, leyendo de cada dirección de memoria en orden. (Otros ingenieros se refirieron a esto como la instrucción "Halt and Catch Fire" [HCF], pero recordamos el código llamando la instrucción "Drop Dead".) El modo Drop Dead fue maravilloso para detectar el tiempo de hardware y abordar problemas lógicos con un alcance; todas las líneas de dirección y reloj eran agradables, las ondas cuadradas de ciclismo.

Motorola conocía el comportamiento del 6800 cuando se encontraba con HCF en 1976. Cuando el 6800 encuentra la instrucción HCF, el procesador nunca encuentra el final de la misma, incrementando sin cesar su contador de programa hasta que se reinicia la CPU. Por lo tanto, el bus de direcciones se convirtió efectivamente en un contador, permitiendo verificar rápidamente el funcionamiento de todas las líneas de direcciones. Una vez que el procesador entraba en este modo, no respondía a las interrupciones, por lo que el funcionamiento normal sólo podía restablecerse mediante un reinicio (de ahí los apodos "Drop Dead" y "Halt and Catch Fire"). Por lo tanto, estas referencias se referían al comportamiento que no responde de la CPU en este estado, y no a ninguna forma de comportamiento errático. Motorola mantuvo el comportamiento HCF en la variante 6802 del procesador (que se lanzó en 1977) como una autoprueba intencional para Los 128 bytes de RAM integrada del 6802.

Más tarde se encontraron otras instrucciones similares a HCF en el Motorola 6800 al ejecutar códigos de operación no documentados FD (ciclos dos veces más lentos que 9D/DD) o CD/ED (ciclos a una frecuencia muy baja legible por humanos en un número limitado de frecuencias altas). líneas de dirección).

Se cree que el mnemotécnico HCF es la primera función de autoprueba incorporada en un microprocesador Motorola.

Intel x86

El Intel 8086 y los procesadores posteriores de la serie x86 tenían una instrucción HLT (detener), código de operación F4, que detenía la ejecución de la instrucción y colocaba el procesador en estado HALT. Una interrupción habilitada, una excepción de depuración, la señal BINIT, la señal INIT o la señal RESET reanudaban la ejecución, lo que significaba que el procesador siempre podía reiniciarse. Algunos de los primeros chips Intel DX4 tenían un problema con la instrucción HLT y no se podían reiniciar después de usar esta instrucción, lo que deshabilitó la computadora y convirtió a HLT en una instrucción más bien HCF. El kernel de Linux agregó una opción "no-hlt" opción que le decía a Linux que ejecutara un bucle infinito en lugar de usar HLT, lo que permitía a los usuarios de estos chips rotos usar Linux.

El 80286 tiene el código de operación 0F 04 no documentado, lo que hace que la CPU se bloquee cuando se ejecuta. La única salida es restablecer la CPU. En algunas implementaciones, el código de operación se emuló a través del BIOS como una secuencia de detención.

Muchas computadoras de la línea Intel Pentium podrían bloquearse al ejecutar una instrucción no válida (F00F C7C8), lo que provocó que la computadora se bloqueara. Esto se conoció como el error Pentium F00F. Ningún compilador crearía la instrucción, pero un programador malintencionado podría insertarla en el código para dejar inoperable una computadora afectada hasta que se reinicie la máquina. Desde su descubrimiento, se han desarrollado soluciones para evitar que bloquee la computadora y el error se eliminó en los procesadores Intel posteriores.

Durante Black Hat USA 2017, Christopher Domas demostró que ha encontrado una nueva opción "Halt and Catch Fire" instrucciones sobre un modelo de procesador x86 no revelado que utiliza su propio fuzzer de procesador x86 llamado sandsifter.

Otras CPU

MOS Technology 6502 tiene 12 instrucciones no válidas que congelarán la CPU.

En Zilog Z80, ejecutar DI (deshabilitar interrupciones) seguido de HALT (esperar una interrupción) da como resultado que la CPU permanezca congelada indefinidamente, esperando una interrupción que no puede ocurrir. Sin embargo, la señal de interrupción no enmascarable se puede utilizar para salir de este estado, lo que hace que este par no sea un verdadero HCF. La señal /NMI está en el pin 17 del paquete DIP original de 40 pines. El par solo resultará en una condición HCF si el pin /NMI está conectado directamente al riel +5V, haciendo imposible la generación de esa señal, o si la rutina de interrupción que da servicio a /NMI termina con un retorno, colocándolo nuevamente en el estado ALTO.

El núcleo del procesador SM83 del sistema en chip LR35902 de Game Boy tiene un problema similar, provocado por dos HALT consecutivos con las interrupciones desactivadas. El núcleo en sí contiene 11 códigos de operación que bloquean completamente la CPU cuando se ejecuta.

El Hitachi SC61860 utilizado principalmente en las computadoras de bolsillo Sharp entre 1980 y 1990 también tiene una instrucción HCF no documentada con el código de operación 7B.

Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save