Oprește-te și ia foc

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 .

Origini

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.

Exemple existente

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 .

Note

  1. Principiile de funcționare IBM System/360 . IBM . Preluat la 2 iulie 2014. Arhivat din original pe 29 februarie 2012.
  2. 1 2 Dunlap, Bryan Un set de instrucțiuni propus (link indisponibil) . Departamentul de Fizică, Universitatea de Stat din Ohio . Consultat la 20 iunie 2016. Arhivat din original pe 8 septembrie 2017. 
  3. Far out op codes , Werner Cirsovius , < http://www.cirsovius.de/Firmen/Uni-Chaos/FUN/opcodes.html > . Preluat la 28 mai 2015. Arhivat la 5 martie 2016 la Wayback Machine 
  4. ↑ 1 2 „Subject: HCF instruction: from Principles of Operation” Arhivat la 24 februarie 2017 la Wayback Machine , Arhivat la textfiles.com
  5. ↑ 1 2 Mnemonice opcode apocrife, mult timp Arhivat din original pe 22 ianuarie 2011. , 23.04.1990, alt.folklore.computers , (prin Grupuri Google)
  6. Overextended Mnemonics , Creative Computing Vol . 6 (4): 17 (hex) (flip-side), aprilie 1980 /2up > . Preluat la 12 martie 2017. 
  7. H.C.F. _ www.catb.org. Consultat la 8 septembrie 2017. Arhivat din original pe 20 mai 2012.
  8. 12 Wheeler , Gerry. Instrucțiuni M6800 nedocumentate  // BYTE  :  revistă. - 1977. - Decembrie ( vol. 2 , nr. 12 ). - P. 46-47 .
  9. Agans, David J. Debugging : cele 9 reguli indispensabile pentru a găsi chiar și cele mai evazive probleme de software și hardware  . - New York: Asociația Americană de Management, 2002. - P. 77. - ISBN 9780814426784 . Arhivat pe 26 iulie 2014 la Wayback Machine
  10. Daniels, R. Gary; Bruce, William. Tendințe de autotestare încorporate în microprocesoarele Motorola   // IEEE Design & Test :revistă. - 1985. - Aprilie ( vol. 2 , nr. 2 ). - P. 64-71 . - doi : 10.1109/MDT.1985.294865 . „HACOF a devenit astfel prima funcție de autotest încorporată intenționat pe un microprocesor Motorola”.
  11. Referință set de instrucțiuni x86: HLT (link indisponibil) . Preluat la 2 iulie 2014. Arhivat din original la 14 iulie 2014. 
  12. Gortmaker, Paul Prompt de pornire Linux-Cum se face . Proiectul de documentare Linux (21 martie 2003). Preluat la 2 iulie 2014. Arhivat din original la 6 iulie 2015.
  13. Collins, Robert R. Bug Pentium F00F: Soluții pentru o problemă urâtă . Dr. Jurnalul lui Dobb (1 mai 1998). Consultat la 11 mai 2017. Arhivat din original la 30 aprilie 2022.
  14. Actualizarea specificațiilor procesorului Pentium  . - Intel , 1999. - S. 51-52. Arhivat pe 4 martie 2016 la Wayback Machine
  15. Steil, Michael Cum funcționează cu adevărat codurile opționale ilegale MOS 6502 . pagetable.com . Preluat la 11 mai 2017. Arhivat din original la 7 iulie 2016.
  16. Offenga, Freddy 6502 Opcodes nedocumentate . NesDev . Preluat la 11 mai 2017. Arhivat din original la 8 august 2016.