Pređi na sadržaj

Korisnik:Lazargeratovic/prevod1

Izvor: Викикњиге

Ilegalni opkod

[uredi]

Nelegalan opkod, poznat i kao neimplementirana operacija[1], neželjeni opkod[2]ili nedokumentovana instrukcija, predstavlja instrukciju za procesor koja nije pomenuta u zvaničnoj dokumentaciji proizvođača, ali ipak ima efekat. Nelegalni opkodovi bili su česti na starijim procesorima iz 1970-ih, poput MOS Technology 6502, Intel 8086 i Zilog Z80. Na ovim starijim procesorima mnogi nelegalni opkodovi postoje kao sporedni efekat žičanih tranzistora u procesoru, često kombinujući funkcije koje nije bilo predviđeno kombinovati. Na starijim i modernim procesorima, takođe postoje instrukcije koje su proizvođači namerno uključili, ali nisu dokumentovane u zvaničnim specifikacijama.

Efekat mnogih nelegalnih opkodova na mnogim procesorima je obično postavljanje zamke koja vodi ka greškama. Međutim, neki procesori koji hvataju većinu nelegalnih opkodova ne čine to za sve nelegalne opkodove, a neki drugi procesori uopšte ne proveravaju nelegalne opkodove, već izvršavaju nedokumentovanu operaciju.

Pregled

[uredi]
Primer ilegalne instrukcije koju je napravio čovek

Dok većina slučajnih nelegalnih instrukcija ima beskorisne ili čak izuzetno nepoželjne efekte (kao što je pad sistema), neke mogu imati korisne funkcije u određenim situacijama. Takve instrukcije su ponekad iskorišćene u video igrama 1970-ih i 1980-ih da ubrzaju određene vremenski kritične delove. Druga uobičajena upotreba bila je u kontinuiranoj borbi između implementacija zaštite od kopiranja i krekovanja.

Jedna od opasnosti koja je povezana s upotrebom nelegalnih instrukcija je ta što, s obzirom na to da proizvođač ne garantuje njihovo postojanje i funkcionisanje, one mogu nestati ili se ponašati drugačije pri svakoj promeni unutrašnjih komponenti procesora ili prilikom nove revizije procesora, čime programi koji ih koriste postaju nekompatibilni sa novijim revizijama. Na primer, neke starije igre za Apple II nisu pravilno radile na novijem Apple IIc, jer je ovaj model koristio noviju reviziju procesora – 65C02 – koja je uklonila nelegalne opkodove.

Kasniji procesori, kao što su 80186, 80286, 68000 i njihovi potomci, nemaju ilegalne opkodove koji su široko poznati ili korišćeni. Idealno, procesor će se ponašati na dobro definisan način kada nađe nepoznat opkod u tokovima instrukcija, kao što je pokretanje određene izuzetne ili greške. Obrađivač izuzetaka ili grešaka operativnog sistema će obično prekinuti aplikaciju koja je izazvala grešku, osim ako program nije ranije postavio svoj obrađivač izuzetaka, u tom slučaju će taj obrađivač dobiti kontrolu. Još jedan, manje uobičajen način obrade ilegalnih instrukcija je definisanje da ne rade ništa osim onog što troši vreme i prostor (što je ekvivalentno zvaničnoj NOP instrukciji procesora); ovaj metod koriste procesori kao što su TMS9900 i 65C02. Alternativno, nepoznate instrukcije mogu biti emulirane u softveru (npr. LOADALL), ili čak mogu biti implementirane "nove" pseudo-instrukcije. Neki BIOS-ovi, upravljači memorijom i operativni sistemi iskorišćavaju ovo, na primer, da omoguće komunikaciju V86 zadatka sa osnovnim sistemom, tj. BOP (od "BIOS Operation") koji koristi Windows NTVDM.[3]

Uprkos Intel-ovoj garanciji protiv takvih instrukcija, istraživanja koja su koristila tehnike kao što je "Fuzz testing" otkrila su veliki broj nedokumentovanih instrukcija u x86 procesorima sve do 2018.[4] godine. Neke od ovih instrukcija su zajedničke za proizvođače procesora, što ukazuje na to da su Intel i AMD svesni ovih instrukcija i njihovog cilja, iako se ne pojavljuju u zvaničnoj specifikaciji. Druge instrukcije su specifične za određene proizvođače ili proizvodne linije. Namena većine nedokumentovanih instrukcija x86 procesora je nepoznata.

Danas su detalji ovih uputstava uglavnom od interesa za tačnu emulaciju starijih sistema.

Takođe pogledajte

[uredi]

Reference

[uredi]
  1. "1.2. Format instrukcija. PDP-10 Referentni priručnik: Programiranje sa PDP-10 skupom instrukcija (PDF). Tom 1. Digital Ekvipment Korporejšn (DEC). 1969. str. 1-7. Preuzeto 2022-05-13.
  2. Akeson, Linus (2013-03-31). „GCR dekodiranje u letu“. Arhivirano od originala 2017-03-21. Preuzeto 2017-03-21.
  3. Šulman, Endru; Braun, Ralf D.; Maksi, Dejvid; Mikels, Rejmond Dž.; Kajl, Džim (1994) [novembar 1993]. Nedomumentovani DOS: Programerski vodič za rezervisane MS-DOS funkcije i podatke – prošireno da uključi MS-DOS 6, Novel DOS i Vindous 3.1 (2. izd.).
  4. Domas, Kristofer (2017-08-31). „Razbijanje x86 skupa instrukcija“. Jutjub. Arhivirano od originala 2021-12-19. Preuzeto 2018-01-03.

Čitajte sledeće

[uredi]
  • Braun, Ralf D., ur. (2002-12-29) [2000-07-17, 1985]. „Lista prekida za x86“ (61. izd.). Arhivirano od originala 2017-08-22. Preuzeto 2011-10-14. [3][4][5][6][7][8][9] (Napomena: Lista prekida Ralfa Brauna takođe sadrži informacije o nedokumentovanim opkodima procesora i greškama procesora: OPCODES.LST od Aleksa V. Potemkina i 86BUGS.LST od Haralda Feldmana.)

Spoljašnje veze

[uredi]

Sajt Kristijana Ludlofa sandpile.org takođe sadrži informacije o nedokumentovanim kodovima operacija