Narsil č. 07

Motorola 68000 (6. část)

↑

MOTOROLA 68000 (6. část)

------------------------

Další část našeho seriálu bude patřit těm příkazům, které jsme nedokázali zařadit ani do jedné ze základních skupin. A protože předpokládám, že na tyto příkazy nebude stačit pouze jeden díl našeho seriálu, dá se očekávát, že příště bude jejich pokračování:

BRA, přeskoč nepodmíněně

Syntaxe asembleru:

BRA <návěstí>

Délka operandu: byte, word

Příkaz zajistí relativní odskok od adresy, na které se právě nacházíte. Jasnější popis je u instrukcí Bcc.

BSR, skoč do podprogramu

Syntaxe asembleru:

BSR <návěstí>

Délka operandu: byte, word

Skočí do podprogramu, jedná se o relativní adresování, tzn. že při použití tohoto druhu odskoku nemusí docházet při spuštění k readresování, jinými slovy také relokaci, programu.

CHK, testuj registr na rozhraní a odskoč

Syntaxe Asembleru:

CHK <ea>, Dn

Délka operandu: word

Je-li spodní word datového registru zadaného instrukcí menší než 0, nebo je-li větší než hodnota zadaného operandu, dojde k použití vyjímkového vektoru odskoku 6, tj. adresy $18.

Hmmm, asi bych měl nějak vysvětlit, co to takový vyjímkový vektor je, že?

Procesor 68000 používá prvních 256 byte jako tabulku tzv. vektorů. V každých 4 bajtech za sebou je uložena nějaká adresa, která ukazuje na nějaký podprogram na nějž pak procesor v případě výjimečného stavu odskočí. Tabulka vypadá asi takhle:

Vektor, Adresa

0, 0 Adresa SSP po RESETu

1, 4 Adreda PC po RESETu

2, 8 Adresa, na kterou se odskočí při chybě sběrnice

3, 12 Odskok při chybě adresy

4, 16 Nedovolená instrukce (taktéž odskok)

5, 20 Dělení nulou - další odskok

6, 24 Příkaz CHK

Těchto vektorů je skutečně hodně, ale podrobněji se jim budeme věnovat někdy příště. Tentokrát by vám mělo stačit vědět, že při instrukci CHK se odskakuje podle vektoru na adrese 24. Ten si můžete pochopitelně změnit, ale pouze v Supervizor Módu.

CLR, Nuluj operand

Syntaxe Asembleru:

CLR.s <ea>

CLR.s Dn

Délka operandu: byte, word, long word

Všechny bity se v cílovém operandu vynulují. Jednodušeji - prostě se v datovém registru nebo v paměti vynuluje určený byte, word nebo long word.

DBcc

Jeden z dalších důležitých příkazů (ve strojovém kódu naštěstí nejsou nedůležité).

Syntaxe Asembleru:

DBcc Dn, <návěstí>

Délka operandu: byte, word

Jestli je zadaná podmínka splněna, pokračuje program na adrese PC+relativní odskok (-32767 až 32767). Předtím však sníží registr v Dn o 1. Pozor, jako PC se bere adresa za koncem tohoto příkazu a až za ní je přičítán posuv, stejně tak je to i při odskoku dozadu. Ve skutečnosti vás to nemusí ale znervózňovat, jelikož při kompilaci si celý problém vyřeší asembler sám.

Jaké jsou tedy možnosti oskoku?

CC - přenos nenastaven, Carry=0. Kdy k tomu dojde? Např. když sečtete dvě čísla a jejich součet není větší než délka, se kterou operuje (byte, word, long word).

CS - přenos nastaven, Carry=1. Totéž co CC, ale číslo je větší.

EQ - rovno, Z=1. Jsou-li si dvě čísla rovna.

GE - je-li cílový operand větší než zdrojový. Definici podmínkových bitů raději neuvádíme.

GT - cíl větší než start.

HI - více, tj. cíl větší než zdroj. Nebere se ohled na znaménkový bit.

LE - cíl menší nebo roven zdroji.

LS - méně nebo stejně. Opět bez znaménkového bitu.

LT - Cíl je menší než zdroj.

MI - záporné, N=1.

NE - nerovno, Z=0.

PL - kladné, N=0.

VC - není přetečení, V=0.

VS - je přetečení, V=1.

JMP, skok

Syntaxe asembleru:

JMP <ea>

Skočí na adresu určenou operandem. Pozor! Opět si uvědomte, že zde můžete používat všechny možné kombinace registru, jako například JMP (a5,d3.w) apod. Také si uvědomte, že skok je absolutní, což znamená, kód se před spuštěním musí naadresovat tak, aby souhlasily všechny adresy. Pochopitelně když vytváříte klasický program s příponou .PRG, .TOS apod., tak vás to nemusí znervózňovat, ale pokud byste chtěli používat nějakou asemblerovou proceduru např. v Basicu, měli byste na to myslet.

EXG, výměna dvou registrů

Syntaxe asembleru:

EXG Rx, Ry

Vymění dva registry mezi sebou, je povolená libovolná kombinace, ale nedoporučuje se měnit adresa zásobníku ;).

Pro dnešek vše a příště opět nashledanou.

HEAD