Halt and Catch Fire (mnemonisk kod HCF ) är en hypotetisk assemblerinstruktion , vid exekvering av vilken datorns centralenhet slutar utföra ytterligare kommandon, varför det är nödvändigt att utföra en "hård" omstart för att återställa funktionaliteten .
Förekomsten av någon assemblerinstruktion, vars exekvering skulle föra datorn till ett tillstånd av inoperabilitet, tillskrevs datorer med IBM System/360 -arkitekturen . Den mnemoniska beteckningen av monteringsinstruktioner utfördes enligt förkortningen av instruktionens huvudfunktion, till exempel ADD (lägg till ett annat nummer till ett nummer) eller CMP (jämför nummer). Bland dessa kommandon fanns tvetydigt tolkade kommandon som ZAP (bokstavligen "Shock", i själva verket - Noll och Lägg till packad , "Återställ registret och lägg till ett packat decimaltal till det") [1] . Programmerare som arbetade med denna assembler började komma på sina egna mnemoniska beteckningar och tillskriva dem en humoristisk tolkning. Så till exempel uppfanns XPR-kommandon (Execute Programmer , "Execute a programmer"), CAI ( Corrupt Accounting Information , "Spoil accounting data") [2] , samt "SDI" ( Self Destruct Immediately , "Immediately self-destruct") [2] och CRN ( Konvertera till romerska siffror , "Konvertera till romerska siffror") [3] . Bland dessa humoristiska beteckningar dök också kommandot HCF (Stoppa och fånga eld , "Stoppa och fånga eld") [4] [5] [6] . Det första omnämnandet av HCF dök upp någonstans i mitten av 1970-talet [4] [5] .
I den ursprungliga betydelsen innebar betydelsen av brand inte en bokstavlig antändning, utan en fullständig förlust av funktionalitet tills nästa "hårda" omstart. Men det gick rykten om utrustningsfel från felaktiga kommandon [7] . Det finns en urban legend : på en dator från 1960-talet ökades allt och ökade hastigheten på magnetiskt minne , sytt med tunna trådar. De ökade strömmarna störde inte normal drift, men HLT- driften ( Halt , väntar på en signal från en extern enhet ) implementerades som "om det inte fanns någon signal, hoppa till samma adress." Upprepad avläsning av samma cell ledde till utbrändhet av motsvarande tråd.
Motorola 6800- mikroprocessorn var den första processorn som hade en odokumenterad instruktion som liknade HCF [8] . Utvecklarföretaget dokumenterade 197 operationer ( opcodes ), medan processorarkitekturen tillät 256 möjliga kombinationer. Forskaren Jerry Wheeler försökte utfärda de återstående 59 "ogiltiga instruktionerna" till processorn i sin tur, vilket ledde till oväntade resultat: en av instruktionerna satte processorn i viloläge [8] :
När instruktionen utfördes var det möjligt att ta reda på vad som hände endast med ett oscilloskop . Ur användarens synvinkel stannar maskinen och stoppar alla försök att starta om. Indikatorerna på adressbussen visar att processorn börjar läsa om allt minne sekventiellt mycket snabbt. Som ett resultat förvandlas adressbussen till en 16-bitars räknare. Processorn bearbetar dock inte det den läser... den läser bara.
Originaltext (engelska)[ visaDölj] När denna instruktion körs är det enda sättet att se vad den gör med ett oscilloskop. Ur användarens synvinkel stannar maskinen och trotsar de flesta försök att få den att startas om. De personer med indikatorlampor på adressbussen kommer att se att processorn börjar läsa hela minnet, sekventiellt, mycket snabbt. I själva verket förvandlas adressbussen till en 16-bitarsräknare. Processorn tar dock ingen notis om vad den läser... den läser bara.En annan forskare, David Adans, noterade senare: "DD-instruktionen placerade processorn i en ändlös loop av sekventiell läsning av minnesadressutrymmet (vissa ingenjörer kallade den här instruktionen HCF, men vi kallade den Drop Dead- instruktionen ). Drop Dead -läget var utmärkt för att lokalisera hårdvaruproblem med ett oscilloskop; läsningen av minnesadresser och driften av frekvensgeneratorn passar in i vackra fyrkantsvågor” [9] . Således var denna instruktion faktiskt en odokumenterad funktion för att sätta processorn i diagnostiskt läge [10] .
I andra processorer, till stor del på grund av designfel eller odokumenterade funktioner, är en effekt liknande HCF-instruktionsläget också möjlig. Så i processorerna i Intel 8086- familjen fanns det en instruktion HLT ( Halt , "Stopp"), som stoppade exekveringen av ytterligare instruktioner och satte processorn i ett stoppläge, från vilket det var möjligt att avsluta vid mottagande av lämpligt avbrott , felsökningsundantag, med signalen BINIT, INIT eller RESET [ 11] . Vissa tidiga chips i 80486DX4- familjen hade ett problem där det var omöjligt att lämna HLT-läget och systemet bara kunde startas om. För att komma runt detta problem introducerade OS-utvecklare no-hlt-läget , som skulle starta en oändlig vänteloop istället för att köra den givna instruktionen [12] .
Den senare Intel Pentium -linjen hade ett hårdvaruproblem när F00F C7C8-instruktionen kördes . Under normala omständigheter är uppkomsten av en sådan instruktion omöjlig, men en skadlig programmerare kan manuellt mata in denna instruktion i den körbara koden, vilket ledde till att datorn fryser till nästa omstart. För att lösa problemet släppte Intel en mikrokod som korrigerar felet och blev senare av med detta problem i efterföljande processorrevisioner [13] [14] .
En annan mycket använd processor på 1980-talet, MOS 6502 , har 12 ogiltiga instruktioner som får den att hänga sig [15] [16] .
Z -80- processorn har också en sekvens av instruktioner som leder till ett häng: DI, HALT. DiHalt-demofesten döptes efter henne .