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