MOTOROLA 68000 (4.část)
-----------------------
Dnes se podíváme na logické instrukce.
AND, logické AND
Syntaxe asembleru:
AND.s <ea>,Dn
AND.s Dn,<ea>
délka operandu: byte, word, long word
Zdrojový operand se spojí s cílovým pomocí logického operandu a ten je přepsán výsledkem. Jak pracuje logické AND? No to snad říkat nemusím, ne? Dobrá:
cílový operand 1, zdrojový 1, výsledek 1
cílový operand 0, zdrojový 1, výsledek 0
cílový operand 1, zdrojový 0, výsledek 0
cílový operand 0, zdrojový 0, výsledek 0
Pozor, jako operandu nesmíte používat adresového registru.
ANDI, logické AND bezprostředně
Syntaxe asembleru:
ANDI.s <data>, <ea>
délka operandu: byte, slovo, dlouhé slovo
Data jsou spojena bezprostředně, tzn. že zdrojový operand je zapsán přímo v instrukci a cílový operand je potom přepsán výsledkem. Při přepisování stavového registru máme dvě možnosti zpracování, buď ovlivníme pouze první byte SR, což znamená, že ovlivňujeme pouze podmínkové bity, a nebo ovlivníme celý word, pak je však instrukce privilegovaná.
No, vidím, že asi dost dobře nechápete o čem je řeč. Motorola vložila do svého procesoru 68000 kromě 8 datových (D0-D7) a osmi adresových (A0-A7) taktéž stavový registr (SR).
SR se tedy dělí, jak už jste si asi povšimli, ze dvou byte, kdy spodní (bity 0-7) patří uživateli a může být měněn i v uživatelském módu. Horní část (bity 8-15) může být měněn pouze v módu supervizoru do kterého se musí procesor přepnout. Jak? To si vysvětlíme snad někdy jindy. Teď snad popis jednotlivých bitů.
Bit 0 : Carry - mění se při přenosu
Bit 1 : Overflow - mění se při přetečení
Bit 2 : Nula - nastaví se když je výsledek roven 0
Bit 3 : Negativ - nastaven při záporném výsledku
Bit 4 : Extend - rozšiřující bit, využití u sčítacích, odečítacích a posuvových operací
Bit 8-10 : Maskování přerušení určité úrovně, 0-7
Bit 13 : Supervizor bit. Jeho nastavení zajistí přepnutí do tzv. Supervizorového módu, kdy máte možnost používat i privilegované instrukce a zapisovat přímo do privilegovaných adresách, tj. hardwarových registrů, tabulek přerušení apod.
Bit 15 : Trace bit. Při nastavení tohoto bitu se počítač přepne do tzv. Krokového módu, což znamená, že po každé instrukci dojde ke skoku podle vektoru z přerušovací tabulky.
Pochopili jste více než třetinu? Ano? Pak jste lepší než já napoprvé. To co jsem vám k tomu napsal byl jakýsi nástin možností tohoto registru. Teď však raději k dalším instrukcím.
Příklad:
V registru D0 máme hodnotu 513 a v registru D1 je 512.
ANDI.W D1,D0 - výsledek bude takový, že v D0 zůstane 512, jelikož 0 bit nebyl v zdrojovém operandu nastaven.
NOT, logický doplněk
Syntaxe asembleru:
NOT.S <ea>
délka operandu: byte, word, long word
Tato operace pracuje velmi prozaicky, dá se to sice vysvětlit několika zcela nepochopitelnými způsoby, ale to co vám řeknu já, je zcela jednoduché. Všechny jedničky v operandu se změní na nuly a všechny nuly na jedničky, nebo se také prostě celý operand zinvertuje. Jasný? Snad.
Příklad: V registru D0 máme hodnotu 513.
NOT.W D0 - bity 1 a 8 budou vynulovány, ostatní nastaveny na 1, zbyde nám tedy číslo 65022
EOR, exkluzivní logický součet
Syntaxe asembleru:
EOR.s Dn, <ea>
délka operandu: byte, word, long word
Doufám že jste pochopili, co dělá instrukce NOT, protože není-li tomu tak, pak budete při vysvětlování této instrukce zcela ztraceni. Proč? Jelikož tato instrukce dělá totéž, mění nuly na jedničky a jedničky na nuly, ale rozdíl je v tomž, že u tohoto příkazu si můžete vybrat, které bity budete měnit. Ty jež jsou nastaveny na jedničku budou zinvertovány.
EORI, exkluzivní součet bezprostředně
Syntaxe asembleru:
EORI.s <data>, <ea>
délka operandu: byte, word, long word
Zdrojový operand je s cílovým operandem spojen exklusivním logickým OR a cílový operand je přepsán výsledkem. Jinak platí stejná funkce jako u EOR.
Příklad:
V registru D0 máme hodnotu 513 a v registru D1 je 1. EORI.W D1,D0 - v D0 bude číslo 512, jelikož bit 0 bude vynulován
OR, logické OR
Syntaxe asembleru:
OR.s <ea>, Dn
OR.s Dn, <ea>
délka operandu: byte, word, long word
Zdrojová operand je sečten s cílovým a cílový je pak přepsán výsledkem. Pracuje to asi takhle:
cílový 0, zdrojový 0, výsledek 0
cílový 1, zdrojový 0, výsledek 0
cílový 0, zdrojový 1, výsledek 1
cílový 1, zdrojový 1, výsledek 1
ORI, logické OR bezprostředně
Syntaxe asembleru:
ORI.s <data>, <ea>
délka operandu: byte, word, long word
Opět stejný funkce jako OR, ale umistění bezprostředních dat je přímo v instrukci.
Tato instrukce jde taktéž použít v spolupráci se SR a opět platí stejné zásady jako u AND, co se týče privilegovaných a uživatelsky přístupných instrukcí.
Příklad:
V registru D0 máme hodnotu 513 a v registru D1 je 2. ORI.W D1,D0 - v D0 bude číslo 515, jelikož bit 0 a bit 8 je naplněn v cílovém operandu D0 a v zdrojovém bezprostředním operandu je zapnut bit 1.
A už sem konečně u konce dnešního dílu, protože toto vysvětlování mě pokaždé stojí hodně usilí a navíc vůbec nevím, jestli to někdo čte a pochopil to z toho, avšak to se mnou nehne a já si ty klíny budu psát dál až se z toho zblázním (mé IQ se stejně neustále zvyšuje, právě minulý týden jsem dosáhl 132, což je oproti osmé třídě, kdy to bylo 106 rapidní vzestup. Nevím, nevím, kde to skončí)
HEAD