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