Záleží na architektuře. Většina nových procesorů vyvolá výjimku nebo přerušení. Některé starší procesory berou neznámý operační kód jako NOP. U některých architektur prostě neznámá instrukce neexistuje.
Je to opravdu různé. Starší mikroprocesory (většinou osmibitové) prostě takovou instrukci ve svém řadiči "nějak" dekódovaly a potom spustily. Většinou z toho vylezla úplná blbost, že se třeba na ALU poslal příkaz pro současné provedení dvou operací atd. Někdy se to dalo využít (třeba na 6502, když už jsme u toho Bendera :). Novější mikroprocesory buď mají všechny opkódy zaplněné nebo vyhodí výjimku.
Ještě existují nedokumentované instrukce, tj. instrukce, které výrobce z nějakých důvodů nezveřejnil. Třeba proto, že mnoho vyrobených mikroprocesorů mělo v daném místě chybu (výrobní postupy měly zpočátku třeba jen 30% úspěšnost), tak bylo lepší prostě instrukce, které v 70% případů nefungují, prostě nezveřejnit a vesele prodávat. Viz Z80 apod.
No a potom jsou instrukce, které lze nedokumentovaným způsobem rozšířit: viz dělení libovolných 8bitovým číslem i na 80186 pomocí instrukce pro dekadický převod, přechod z protected módu do reálného režimu na 80286 atd.
Budu teď mluvit za 6502ku, tam to mám vyzkoušené. Podívej se třeba na http://www.llx.com/~nparker/a2/opcodes.html. Třeba opkód AF vyvolá ve skutečnosti dvě instrukce LD, jednom pro registr A a podruhé pro X, což ještě projde, ale "dvojitá" ST už samozřejmě ne. Těch kombinací je tam víc, protože 6502 (ta originální) nechala v 256 možných kombinací spoustu volného místa.
jj, však říkám, že toto ještě bude fungovat (a je to docela dobrá instrukce), ale "paralelní" ST (třeba STA a STX) popsané v dalším odstavci už ne, ledaže by to ještě předtím udělalo nějakou logickou operaci nebo něco podobného :-)
Nektere nedokumentovane instrukce u Intelu byly celkem hojne vyuzivany - naprikal LOADALL, ktery byl nejspis navrzen k ladeni samotneho procesoru. Na i80286 se s nim daly delat zajimave veci, jako napr. sahat nad 1MB hranici i v realnem rezimu. Pokud vim, tak minimalne HIMEM.SYS LOADALL pouzival. Vice viz http://en.wikipedia.org/wiki/LOADALL .
Na i80386 a novejsich ale nebyl treba, protoze ty se daly prepinad do a z chraneneho rezimu bez problemu, kdezto u i80286 ho slo jen zapnou, vypinal se resetem pres radic klavesnice, po nemz se vracel na adresu nastavenou v CMOS pameti ... proste husta magie.
Ale i80386 zase mely treba nedokumentovany rezim, tzv. unreal rezim, kde slo pomoci manipulace s limity segmentovych registru (nastavenych v chranenem rezimu) sahat v realnem rezimu v plnem rozsahu 4GB pameti (tj. 16bit segmenty, ale 32bit ofsety). Sice byl problem tam vykonavat kod (kvuli presuseni), ale ten se vetsinou pod hranici 1MB vesel.
Bohuzel to ale nefungovalo ve v86 rezimu, tedy s pametovymi manazery a Windows, tak se to moc neujalo. Ale vsechny procesory ho od te doby podporuji (vcetne emulatoru), protoze to pouzivaji BIOSy na veci jako testy pameti a podobne. Vice viz http://en.wikipedia.org/wiki/Unreal_mode .
Tak trochu to záleží na mikrokódu procesoru(řadiče), jak se zachová. Nevím jak v reálu, ale na výukových procesorech DOP je každý operační znak postupně dekódován na základě bitů v Instr. Registru a v případě neznámé kombinace se je proveden NOP, resp. se přechází do stavu kontroly, zda nedošlo k nějakému přerušení.
Obecně, co procesor, to jiné řešení.
Procesor neudělá nic, protože řadič instrukcí neví co má udělat, proto se dělat nebude nic, bude to jako NOP.
Ale zas záleží na architektuře procesoru. Jsou jen 2 možnosti co to udělá: jako NOP, nebo to zamrzne.