Narsil č. 08

Motorola 68000 (7. část)

↑

MOTOROLA 68000 (7. část)

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

POZOR!!!! Místo znaku čtverce (je vedle Backspce), který se v asembleru běžně používá, jsme z důvodu jeho použití při editaci textů pro Narsil, museli použít jako náhradu znak @)

Minule jsme skončili u příkazů, které jsme nezařadili do žádné ze skupin, dnes v nich budeme pokračovat.

EXT, rozšíření o znaménko

Syntaxe asembleru:

EXT.s Dn

Délka operandu: word, long word

Jestliže použijeme jako operand word, zkopíruje se nám v podstatě obsah 7. bitu do 8-15 bitu. Použijeme-li long, zkopíruje se obsah 15. bitu do 16-30 bitu.

Příklad v D1 máme binární číslo 0001111100000001, což je hexadecimálně opravdu hodně ;), to nás ale vůbec nemusí znervózňovat, protože jestliže použijeme EXT.W D1, zkopíruje se obsah 7. bitu do 8-15 bitu a D1 jako slovo je pak rovno 1.

JSR, Skok do podprogramu

Syntaxe asembleru:

JSR <ea>

V principu velmi podobné JMP, jediný rozdíl spočívá v tom, že se po odskočení do podprogramu uloží na zásobník zpáteční adresa, na kterou bude po použití příkazu RTS odskočeno. Jinak se také jedná o skok absolutní, u kterého můžete pro naadresování odksočení použít různé registry. Dokonce se dá použít i jako relativní, pak vypadá zápis například takhle JSR 20(PC).

LEA, Naplnění efektivní adresy

Syntaxe asembleru:

LEA <ea>, An

Délka operandu: long word

Instrukce naplní jeden z registrů An číslem, které zadáte do operandu. Je možné používat i různé kombinace: např. LEA 20(A0),A0 - v principu zvýší registr A0 o 20 a je dokonce o 4 takty procesoru rychlejší než ADD.L

20,A0.

Chcete-li kopírovat mezi adresovými registry, musíte použít syntaxi LEA (A1),A2 - kopíruje z registru A1 do A2.

Dokonce můžete pracoval s LEA i relativně, tak jinak napsat 20(PC),A1 a do A1 se zapíše adresa o 20 vyšší, než kde právě beží váš program.

PEA, uložení efektivní adresy

Syntaxe asembleru:

PEA <ea>

Uloží na zásobník efektivní adresu.

Pracuje jinak stejně jako LEA.

LINK, linkování a alokace

Syntaxe asembleru:

LINK An, @<posun>

Nejdříve se uloží An na adresu SP (totéž co A7), potom se do registru An uloží obsah SP a přičte se k němu, s ohledem na znaménko, hodnota '<posun>'.

Tuto funkci teoreticky velmi těžce pochopíte, nutno vyzkoušet a odtrasovat.

UNLK, konec linkování

Syntaxe asembleru:

UNLK An

Uloží registr An do SP (A7) a obsah adresy (A7) je uložen do registru An, tím skončí celé linkování.

Předcházející příkazy jsou u vyšších programovacích jazyků použity pro výrobu lokálních proměnných.

TRAPV

Syntaxe asembleru:

TRAPV

Jestliže během vašeho výpočtu došlo k přetečení a bude-li právě v tuto chvíli procházet program přes tuto instrukci, dojde k odskočení. Adresa odskoku se čte z tabulky vektorů, o které jsme si řekli něco více již minule. V této tabulce se jedná o vektor č. 7 a adresu 28.

Nedojde-li však k přetečení, program přes tento příkaz přejde, jako by se nic nestalo.

TRAP, odskok podle vektoru přerušení

Syntaxe asembleru:

TRAP @vektor

Jestliže program narazí na tento příkaz, přepne se ihned do supervizor módu a odskočí podle vektoru přerušení. Těchto vektorů ma MC 68000 16 (0-15), ale některé jsou již využity. Např.:

TRAP @1; GEMDOS

TRAP @2, VDI

TRAP @13; BIOS

TRAP @14; XBIOS

Na další momentálně nevzpomínám.

No nic, pro dnešek je to vše, příště ten výčet příkazů snad už dorazíme.

HEAD