Narsil č. 05

Motorola 68000 (4. část)

↑

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