Narsil č. 03

Motorola 68000 (2. část)

↑

MOTOROLA 68000 (část 2)

Dnes vám dovysvětlíme příkazy MOVE a jeho modifikace + některé způsoby adresování pomocí registrů (Domnívám se, že není důležité to zpočátku pochopit komplexně, ale stačí jen nějaké způsoby. Zbytek časem pochopíte). Tak tedy dost okecávání a začněme.

MOVEP - Přesun dat do perifére, nebo z periférie

Syntaxe Asembleru:

MOVEP.s Dx, d(An)

MOVEP.s d(Ay), Dx

Délka operandu: word, long word

Obsah vybraného datového registru se přemístí do paměti počítače. Adresování paměti je provedeno přes součet hodnoty d a registru An, což je kterýkoliv adresový registr (A0-A7). Hodnota d je tzv. offset a může být velké od -32767 do 32768, pak vyjde hodnota adresy, kam chceme ukládat např. následujícím způsobem.

MOVEP.L D0, 100(A0) - řekněmě že A0 je 30000. 100+30000=30100 - Takže 4 byte z registru D0 se budou ukládat od adresy 30100. Jelikož se jedná o příkaz MOVEP, přemístí se hodnoty z registru do takhle.

Nejnižší byte registru D0 (bit 0-7) - 30100

Nejnižší byte registru D0+1 (bit 8-15) - 30102

Nejnižší byte registru D0+2 - (bit 16-24)- 30104

Nejnižší byte registru D0+3 - (bit 25-32) - 30106

Kdyby byla vypočítaná adresa 30101, tj. offset by byl např. 101, tak by se registr D0 rozmístil na adresu 30101, 30103, 30105, 30107.

Tento příkaz se používá skutečně většinou u periférií, protože ty jsou převážně umístěné buď na sudých, nebo lichých adresách. Pochopitelně, jestliže najdete využití i jinde, pak je to vaše věc.

MOVEQ - přesuň rychle

Syntaxe Asembleru:

MOVEQ

<číslo>, Dn

Tato instrukce přemístí 8 bitové číslo do registru Dn, ve kterém se však rozšíří na 32 bitů. Výhodou je vysoká rychlost přenosu a malá délka příkazu v paměti.

Příklad:

MOVEQ

20,D0 - přenese číslo 20 do registru D0

Příkaz MOVE má ještě několik neméně důležitých modifikací, které vám nyní ve zkratce přiblížím. Později se budeme registry, které s těmito příkazy MOVE použijeme chceme zabývat hlouběji.

MOVE to CCR - přemístění příznakových bitů, to jsou bity, které se změní při různých přesunech, testováních atd.

Syntaxe Asembleru:

MOVE <ea>,CCR

Přemistí se obsah adresy do příznakového registru. Délka operandu je vždy slovo, ale ovlivní jen spodních 8 bitů registru.

Příklad:

MOVE (A0),CCR - přemístí obsah z adresy, která je v registru A0 do registru CCR (příznakový registr).

MOVE to SR, MOVE from SR - přemistí stavový registr z paměti, nebo do paměti.

Syntaxe asembleru:

MOVE SR,<ea>

MOVE <ea>,SR

Příklad:

MOVE SR,$30000 - přemístí obsah stavového registru na adresu $30000. POZOR! Jedná se o privilegovanou instrukci, tzn. že tento příkaz můžete používat pouze v supervisor módu procesoru (a něm až někdy příště).

MOVE USP - přenes obsah uživatelského ukazatele zásobníku

Syntaxe Asembleru:

MOVE USP,An

MOVE An,USP

Příklad:

MOVE USP,A3 - přemístí uživatelský ukazatel zásobníku do registru A3. POZOR! Tato instrukce pracuje pouze v privilegovaném módu.

Pomocí této instrukce je jednoduše možno kontrolovat obsah ukazatele USP.

Nyní jsme si dovysvětlili všechny modifikace příkazu MOVE a měli bychom si také trochu vysvětlit způsoby adresování, které platí obecně u většiny příkazů, až na nějaké vyjímky. Nejlepší cestou jak si tyto způsoby zažít, je, vyzkoušet si všechny varianty s různými instrukcemi. Způsoby pro příkaz MOVE:

MOVE.W (A0),(A1)+

Přemístí word z adresy v registru A0 do adresy v registru A1. Registr A1 po provedení této instrukce svýší o word, tj. 2. U long word by to byly 4, u byte by to byla 1.

MOVE.W $30000,-(A1)

Přemístí word z adresy $30000 do adresy v registru A1. Registr A1 po provedení této operace o jedno slovo sníží. Kdyby byla přenášená déla long word, tak by se registr A1 snížil o čtyři, a kdyby byla 1 byte, tak by se snížil o jednu (Toto připomínám naposled, víckrát už to říkat nebudu).

MOVE.W $30000,4(A1)

Přemístí word z adresy $30000 do adresy ve registru A1, kterou snížíme o 4.

MOVE.W -100(A4),8(A5,D0.W)

Tentokrát jsme pro vás připravili na disku mnoho programů spolupracujících s formátem Spectrum 512 a jeden z nich je též jako zdrojový kód, tak si ho užijte. Má koncovku .S

HEAD