Halt and Catch Fire (cod mnemonic HCF ) este o instrucțiune de asamblare ipotetică , la executarea căreia unitatea centrală de procesare a computerului oprește executarea comenzilor ulterioare, motiv pentru care este necesar să se efectueze o repornire „hard” pentru a restabili funcționalitatea .
Existența unor instrucțiuni de asamblare, a căror execuție ar aduce computerul într-o stare de inoperabilitate, a fost atribuită computerelor din arhitectura IBM System / 360 . Desemnarea mnemonică a instrucțiunilor de asamblare a fost efectuată în funcție de abrevierea funcției principale a instrucțiunii, de exemplu, ADD (adăugați un alt număr la un număr) sau CMP (comparați numere). Printre aceste comenzi au fost interpretate ambiguu comenzi precum ZAP (literal „Șoc”, de fapt - Zero și Add Packed , „Resetează registrul și adaugă un număr zecimal impachetat”) [1] . Programatorii care au lucrat cu acest asamblator au început să vină cu propriile lor denumiri mnemonice și să le atribuie o interpretare plină de umor. Deci, de exemplu, comenzile XPR ( Execute Programmer , „Execute a programator”), CAI ( Corrupt Accounting Information , „Spoil accounting data”) [2] , precum și „SDI” ( Self Destruct Immediately , „Immediately self-auto-). distruge”) [ 2] și CRN ( Convert to Roman Numerals , „Convert to Roman Numerals”) [3] . Printre aceste desemnări pline de umor a apărut și comanda HCF (Opriți și ia foc , „Opriți și ia foc”) [4] [5] [6] . Prima mențiune despre HCF a apărut undeva la mijlocul anilor 1970 [4] [5] .
În sensul inițial, sensul catch fire a însemnat nu o aprindere literală, ci o pierdere completă a funcționalității până la următoarea repornire „hard”. Dar au existat zvonuri despre defecțiuni ale echipamentelor din comenzi incorecte [7] . Există o legendă urbană : pe un computer din anii 1960, totul a fost mărit și a crescut viteza memoriei magnetice , cusute cu fire subțiri. Curenții crescuti nu au interferat cu funcționarea normală, cu toate acestea, operațiunea HLT ( Halt , așteptarea unui semnal de la un dispozitiv extern ) a fost implementată ca „dacă nu a existat niciun semnal, săriți la aceeași adresă”. Citirea repetată a aceleiași celule a dus la arderea firului corespunzător.
Microprocesorul Motorola 6800 a fost primul procesor care a avut o instrucțiune nedocumentată care era similară cu HCF [8] . Compania de dezvoltare a documentat 197 de operațiuni ( opcodes ), în timp ce arhitectura procesorului a permis 256 de combinații posibile. Cercetătorul Jerry Wheeler a încercat să emită pe rând cele 59 de „instrucțiuni nevalide” rămase procesorului, ceea ce a dus la rezultate neașteptate: una dintre instrucțiuni a pus procesorul în modul inactiv [8] :
Când instrucțiunea a fost executată, a fost posibil să aflați ce se întâmplă numai cu un osciloscop . Din punctul de vedere al utilizatorului, mașina se oprește și oprește toate încercările de repornire. Indicatorii de pe magistrala de adrese arată că procesorul începe să recitească secvenţial toată memoria foarte repede. Ca rezultat, magistrala de adrese se transformă într-un contor de 16 biți. Totuși, procesorul nu procesează ceea ce citește... doar citește.
Text original (engleză)[ arataascunde] Când această instrucțiune este rulată, singura modalitate de a vedea ce face este cu un osciloscop. Din punctul de vedere al utilizatorului, mașina se oprește și sfidează majoritatea încercărilor de a o reporni. Acele persoane cu lămpi indicatoare pe magistrala de adrese vor vedea că procesorul începe să citească toată memoria, secvenţial, foarte repede. De fapt, magistrala de adrese se transformă într-un contor de 16 biți. Cu toate acestea, procesorul nu ține seama de ceea ce citește... doar citește.Un alt cercetător, David Adans, a remarcat mai târziu: „Instrucțiunea DD a pus procesorul într-o buclă nesfârșită de citire secvențială a spațiului de adrese de memorie (unii ingineri au numit această instrucțiune HCF, dar noi am numit-o instrucțiunea Drop Dead ). Modul Drop Dead a fost excelent pentru identificarea problemelor hardware cu un osciloscop; citirea adreselor de memorie și funcționarea generatorului de frecvență se încadrează în frumoase unde pătrate” [9] . Astfel, această instrucțiune a fost de fapt o funcție nedocumentată pentru introducerea procesorului în modul de diagnosticare [10] .
În alte procesoare, în mare parte din cauza erorilor de proiectare sau a caracteristicilor nedocumentate, este posibil și un efect similar modului de instrucțiuni HCF. Deci, în procesoarele familiei Intel 8086 a existat o instrucțiune HLT ( Halt , „Stop”), care a oprit executarea instrucțiunilor ulterioare și a pus procesorul într-un mod de oprire, din care a fost posibil să ieși la primirea întreruperii corespunzătoare. , excepție de depanare, prin semnalul BINIT, INIT sau RESET [ 11] . Unele cipuri timpurii din familia 80486DX4 au avut o problemă în care ieșirea din modul HLT era imposibilă și sistemul putea fi doar repornit. Pentru a rezolva această problemă, dezvoltatorii sistemului de operare au introdus modul no-hlt , care ar porni o buclă de așteptare infinită în loc să execute instrucțiunea dată [12] .
Linia ulterioară Intel Pentium a avut o problemă hardware la executarea instrucțiunii F00F C7C8 . În circumstanțe normale, apariția unei astfel de instrucțiuni este imposibilă, cu toate acestea, un programator rău intenționat ar putea introduce manual această instrucțiune în codul executabil, ceea ce a dus la blocarea computerului până la următoarea repornire. Pentru a rezolva problema, Intel a lansat un microcod care corectează eroarea, iar ulterior a scăpat de această problemă în revizuirile ulterioare ale procesorului [13] [14] .
Un alt procesor utilizat pe scară largă în anii 1980, MOS 6502 , are 12 instrucțiuni nevalide care îl determină să se blocheze [15] [16] .
Procesorul Z-80 are și o secvență de instrucțiuni care duc la blocare: DI, HALT. Petrecerea demonstrativă DiHalt a fost numită după ea .