Feltétel nélküli átmenetek. MP eszközök programozásának alapjai (előadás) Vezérlés átviteli parancsok

  • 10.01.2024

A mikroprocesszoros utasításrendszer az aritmetikai számítások eszközeivel együtt rendelkezik a logikai adatkonverzió eszközeivel is. Logikai alatt olyan adattranszformációkat értünk, amelyeken alapul a formális logika szabályai.

A formális logika az igaz és hamis állítások szintjén működik. Mikroprocesszornál ez általában 1-et, illetve 0-t jelent. A számítógép a nullák és egyesek nyelvén natív, de a legkisebb adategység, amelyen a gépi utasítások működnek, a bájt. Rendszerszinten azonban gyakran szükséges rendkívül alacsony szinten – a bitszinten – működni.

Rizs. 29. Logikai adatfeldolgozó eszközök


A logikai adatátalakítás eszközei közé tartoznak a logikai parancsok és logikai műveletek. Az assembler utasítás operandusa általában lehet egy kifejezés, amely viszont operátorok és operandusok kombinációja. Ezen operátorok között lehetnek olyan operátorok is, amelyek logikai műveleteket valósítanak meg kifejezési objektumokon.

Mielőtt részletesen megvizsgálnánk ezeket az eszközöket, gondoljuk át, mi is maga a logikai adat, és milyen műveleteket hajtanak végre rajta.

Logikai adatok

A logikai adatfeldolgozás elméleti alapja az formális logika. Számos logikai rendszer létezik. Az egyik leghíresebb az propozíciós kalkulus. Az állítás minden olyan állítás, amely bármelyikre elmondható igaz, vagy hamis.

A propozíciószámítás olyan szabályok összessége, amelyek az állítások bizonyos kombinációinak igazságának vagy hamisságának meghatározására szolgálnak.

A tételszámítás nagyon harmonikusan ötvöződik a számítógép működési elveivel és programozásának alapvető módszereivel. Minden számítógépes hardverelem logikai chipekre épül. Az információ számítógépben a legalacsonyabb szinten történő megjelenítésére szolgáló rendszer a bit fogalmán alapul. A bit, amelynek csak két állapota van (0 (hamis) és 1 (igaz)), természetesen beleillik a propozíciós számításba.

Az elmélet szerint utasításokon (biteken) a következő logikai műveletek hajthatók végre.


1. Tagadás (logikai NEM) - logikai művelet egy operanduson, amelynek eredménye az eredeti operandus inverze.

Ezt a műveletet egyedi módon jellemzi a következő igazságtáblázat (12. táblázat).

12. táblázat: Igazságtáblázat a logikai tagadáshoz

2. Logikai összeadás (logikai inkluzív VAGY) - logikai művelet két operanduson, amelynek eredménye igaz (1), ha az egyik vagy mindkét operandus igaz (1), és hamis (0), ha mindkét operandus hamis (0).

Ezt a műveletet a következő igazságtáblázat (13. táblázat) írja le.

13. táblázat: Igazságtáblázat a logikai inkluzív VAGY-hoz

3. Logikai szorzás (logikai ÉS) - egy logikai művelet két operanduson, amely csak akkor értékeli ki az igazat (1), ha mindkét operandus igaz (1). Minden más esetben a művelet értéke false (0).

Ezt a műveletet a következő igazságtáblázat (14. táblázat) írja le.

14. táblázat: Igazságtáblázat a logikai ÉS-hez

4. Logikai kizáró összeadás (logikai kizárás VAGY) - logikai művelet két operanduson, amelynek eredménye igaz (1), ha a két operandus közül csak az egyik igaz (1), és hamis (0), ha mindkét operandus hamis (0) vagy "igazság" (1). Ezt a műveletet a következő igazságtáblázat (15. táblázat) írja le.

15. táblázat: Igazságtáblázat a logikai kizáró VAGY-hoz

A mikroprocesszoros utasításrendszer öt olyan utasítást tartalmaz, amelyek támogatják ezeket a műveleteket. Ezek az utasítások logikai műveleteket hajtanak végre az operandusok bitjein. Az operandusok méretének természetesen azonosnak kell lennie. Például, ha az operandusok mérete egy szó (16 bit), akkor a logikai műveletet először az operandusok nulla bitjein hajtjuk végre, és az eredményt az eredmény 0 bitje helyére írjuk. Ezután a parancs egymás után megismétli ezeket a műveleteket az összes biten az elsőtől a tizenötödikig.

Logikai parancsok

A mikroprocesszoros utasításrendszer a következő parancsokkal rendelkezik, amelyek támogatják a logikai adatokkal való munkát:

1) és operandus_1, operandus_2 – logikai szorzási művelet. A parancs bitenkénti logikai ÉS műveletet (konjunkciót) hajt végre az operandus_1 és operandus_2 operandusok bitjein. Az eredmény az operandus_1;

2) og operandus_1, operandus_2 – logikai összeadás művelet. A parancs bitenkénti logikai VAGY műveletet (disjunkciót) hajt végre az operandus_1 és operandus_2 operandusok bitjein. Az eredmény az operandus_1;

3) hog operandus_1, operandus_2 – logikai kizárólagos összeadás művelet. Az utasítás bitenkénti logikai exkluzív VAGY műveletet hajt végre az operandus_1 és operandus_2 bitjein. Az eredményt az operandus helyére írjuk;

4) teszt operandus_1, operandus_2 – „ellenőrzés” művelet (logikai szorzás segítségével). A parancs bitenkénti logikai ÉS műveletet hajt végre az operandus_1 és operandus_2 bitjein. Az operandusok állapota változatlan marad, csak a zf, sf és pf jelzők változnak, ami lehetővé teszi az operandus egyes bitjeinek állapotának elemzését azok állapotának megváltoztatása nélkül;

5) nem operandus – logikai negációs művelet. A parancs bitenkénti inverziót hajt végre (az értéket az ellenkezőjére cserélve) az operandus minden bitjénél. Az eredményt az operandus helyére írjuk.

Ahhoz, hogy megértsük a logikai utasítások szerepét a mikroprocesszoros utasításrendszerben, nagyon fontos megérteni alkalmazásuk körét és a programozásban használatukra vonatkozó tipikus technikákat.

Logikai parancsok használatával lehetséges kiosztás egyes biteket az operandusban abból a célból beállítása, visszaállítása, invertálása vagy egyszerűen egy bizonyos érték ellenőrzése.

Az ilyen bitekkel való munka megszervezéséhez az operandus_2 általában maszk szerepét tölti be. A maszk 1 bitjében beállított bitek felhasználásával meghatározzuk az adott művelethez szükséges operandus_1 biteket. Mutassuk meg, milyen logikai parancsok használhatók erre a célra:

1) bizonyos bitek 1-re állításához használja az og operandus_1, operandus_2 parancsot.

Ebben az utasításban az operandus_2, amely maszkként működik, egy bitet kell, hogy tartalmazzon azon bitek helyett, amelyeket az operandus_1-ben 1-re kell állítani;

2) bizonyos bitek 0-ra való visszaállításához használja a parancsot és az operandus_1, operandus_2.

Ebben az utasításban az operandus_2, amely maszkként működik, nulla bitet kell tartalmazzon azon bitek helyett, amelyeket 0-ra kell állítani az operandus_1-ben;

3) a hog operandus_1, operandus_2 parancs kerül alkalmazásra:

a) megtudni, hogy az operandus_1 és az operandus mely bitjei különböznek egymástól;

b) megfordítani a megadott bitek állapotát az operandus_1-ben.

A hog parancs végrehajtásakor a maszk minket érdeklő bitjei (operand_2) egynek, a többinek nullának kell lennie;

A megadott bitek állapotának ellenőrzéséhez használja a teszt operandus_1, operandus_2 (ellenőrizze operandus_1) parancsot.

Az operandus_1 ellenőrzött bitjeinek a maszkban (operandus_2) értékének egynek kell lennie. A tesztparancs működése hasonló az és parancs algoritmusához, de nem változtatja meg az operandus_1 értékét. A parancs eredménye a zf nulla zászló értékének beállítása:

1) ha zf = 0, akkor a logikai szorzás nulla eredményt, azaz a maszk egy egységbitjét eredményezett, amely nem egyezik az operandus megfelelő egy bitjével;

2) ha zf = 1, akkor a logikai szorzás nullától eltérő eredményt eredményezett, azaz. legalább egy a maszk egy bitje megegyezik az operandus_1 megfelelő egy bitjével.

A tesztparancs eredményére való reagáláshoz célszerű a jnz címke (Ugrás, ha nem nulla) - ugrás, ha a zf nulla jelzője nem nulla, vagy az ezzel ellentétes művelettel - jz címke (Ugrás) parancsot használni. if Zero) - ugrás, ha a nulla zászló zf = 0.

A következő két parancs az 1-re beállított operandus első bitjét keresi. Kereshet az operandus elejétől vagy végétől:

1) bsf operandus_1, operandus_2 (Bit Scanning Forward) – bitek pásztázása előre. Az utasítás letapogatja az operandus_2 bitjeit a legkisebb szignifikánstól a legjelentősebbig (a 0 bittől a legjelentősebb bitig), és megkeresi az első 1-re állított bitet. Ha talál egyet, akkor ennek a bitnek a száma egész értékként kerül az operandus_1-be. Ha az operandus_2 minden bitje 0, akkor a zf nulla jelző 1-re van állítva, ellenkező esetben a zf jelző 0-ra áll vissza;

2) bsr operandus_1, operandus_2 (Bit Scanning Reset) – a bitek pásztázása fordított sorrendben. Az utasítás az operandus_2 bitjeit a legjelentősebbtől a legkevésbé jelentősig (a legjelentősebb bittől a 0 bitig) keresi (pásztázza), megkeresve az első bitet 1-re. Ha talál egyet, akkor ennek a bitnek a száma az operandus_1-be kerül. egész érték. Fontos, hogy a bal oldali első bit pozícióját továbbra is a 0 bithez viszonyítva számítsuk. Ha az operandus_2 minden bitje 0, akkor a zf nulla jelző 1-re lesz állítva, ellenkező esetben a zf jelző 0-ra áll vissza. .

Az Intel mikroprocesszorok legújabb modelljeiben számos további parancs jelent meg a logikai parancsok csoportjában, amelyek lehetővé teszik az operandus egy meghatározott bitéhez való hozzáférést. Az operandus elhelyezhető a memóriában vagy egy általános célú regiszterben. A bitpozíciót a bitnek az operandus legkisebb jelentőségű bitéhez viszonyított eltolása határozza meg. Az eltolási érték megadható közvetlen értékként vagy egy általános célú regiszterben. A bsr és bsf parancsok eredményeit használhatja eltolási értékként. Minden utasítás hozzárendeli a kiválasztott bit értékét a CE jelzőhöz

1) bt operandus, biteltolás (bitteszt) – ellenőrizze a bitet. A parancs átviszi a bitértéket a cf jelzőbe;

2) bts operandus, biteltolás (Bit Test and Set) – a bit ellenőrzése és beállítása. Az utasítás átviszi a bitértéket a CF jelzőbe, majd a tesztelendő bitet 1-re állítja;

3) btr működőképes, biteltolás (Bit Test and Reset) – a bit ellenőrzése és visszaállítása. Az utasítás átviszi egy bit értékét a CF jelzőbe, majd ezt a bitet 0-ra állítja;

4) btc operandus, biteltolás (bitteszt és konvertálás) – ellenőrizze és invertálja a bitet. Az utasítás átviszi egy bit értékét a cf jelzőbe, majd megfordítja annak a bitnek az értékét.

Shift parancsok

Az ebben a csoportban található utasítások az operandusok egyes bitjeinek kezelését is lehetővé teszik, de a fent tárgyalt logikai utasításoktól eltérő módon.

Minden eltolási utasítás az operandusmezőben lévő biteket balra vagy jobbra mozgatja a műveleti kódtól függően. Minden shift utasításnak ugyanaz a szerkezete – cop operandus, shift_counter.

Az eltolt bitek száma – shift_counter – a második operandus helyén található, és kétféleképpen adható meg:

1) statikusan, amely magában foglalja egy fix érték megadását azonnali operandus segítségével;

2) dinamikusan, ami a shift számláló értékének a cl regiszterben való tárolását jelenti a shift utasítás végrehajtása előtt.

A cl regiszter mérete alapján egyértelmű, hogy a műszakszámláló értéke 0-tól 255-ig terjedhet. De valójában ez nem teljesen igaz. Optimalizálási célból a mikroprocesszor csak az értéket fogadja el öt legkisebb jelentőségű bit számláló, azaz az érték 0 és 31 között mozog.

Minden shift parancs beállítja a hordozás jelzőt vö.

Ahogy a bitek az operanduson túlra tolódnak el, először megütik a hordozó jelzőt, és azt az operanduson kívülre kerülő következő bit értékével egyenlőnek állítják. Hogy ez a bit hova kerül, az a shift utasítás típusától és a programalgoritmustól függ.

A működési elv alapján a shift parancsok két típusra oszthatók:

1) lineáris eltolási parancsok;

2) ciklikus váltási parancsok.

Lineáris eltolási parancsok

Az ilyen típusú parancsok közé tartoznak az eltolást végrehajtó parancsok a következő algoritmus szerint:

1) a következő „megnyomott” bit beállítja a CF jelzőt;

2) a másik végéről az operandusba bevitt bit értéke 0;

3) a következő bit eltolásakor a CF jelzőbe kerül, és az előző eltolt bit értéke elveszik! A lineáris eltolási parancsok két altípusra oszthatók:

1) logikai lineáris eltolási parancsok;

2) aritmetikai lineáris eltolási parancsok.

A logikai lineáris eltolási parancsok a következőket tartalmazzák:

1) shl operandus, shift_counter (Shift Logical Left) – logikai eltolás balra. Az operandus tartalma balra tolódik el a shift_count érték által meghatározott bitek számával. A jobb oldalon (a legkisebb jelentőségű bit helyén) nullákat írunk be;

2) Shr operandus, shift_counter (Shift Logical Right) – logikai eltolás jobbra. Az operandus tartalma a shift_count érték által meghatározott bitszámmal jobbra tolódik el. A bal oldalon (a legjelentősebb, előjeles bit pozíciójában) nullákat írunk be.

A 30. ábra bemutatja ezeknek a parancsoknak a működését.

Rizs. 30. Lineáris logikai eltolási parancsok működési sémája


Az aritmetikai lineáris eltolási utasítások abban különböznek a logikai eltolási utasításoktól, hogy speciális módon működnek az operandus előjelbitjén.

1) sal operandus, shift_counter (Shift Aithmetic Left) – aritmetikai eltolás balra. Az operandus tartalma balra tolódik el a shift_count érték által meghatározott bitek számával. Jobb oldalon (a legkisebb jelentőségű bit helyén) nullák állnak. A sal parancs nem jelet őriz, hanem beállítja a zászlót előjelváltás esetén/jellel egy másik visszahúzható bit. Egyébként a sal parancs teljesen hasonló az shl parancshoz;

2) sar operandus, shift_counter (Shift Aithmetic Right) – aritmetikai eltolás jobbra. Az operandus tartalma az érték által meghatározott bitszámmal jobbra tolódik el shift_counter. A bal oldalon nullák kerülnek be az operandusba. A sar parancs megőrzi a jelet, és minden következő bit eltolása után visszaállítja azt.

A 31. ábra a lineáris aritmetikai eltolási utasítások működését mutatja be.


Rizs. 31. Lineáris aritmetikai eltolási parancsok működési sémája

Parancsok forgatása

A Rotate shift parancsok olyan parancsok, amelyek az eltolandó bitek értékeit tárolják. Kétféle forgatási parancs létezik:

1) egyszerű ciklikus váltási parancsok;

2) ciklikus eltolási parancsok a carry flag segítségével, vö.

A csapatoknak egyszerű ciklikus a műszakok a következők:

1) rol operandus, shift_counter (Rotate Left) – ciklikus eltolás balra. Az operandus tartalma balra tolódik el az operandus által meghatározott bitek számával shift_counter. A balra eltolt bitek ugyanabba az operandusba íródnak a jobb oldalon;

2) gog operandus, shift_counter (Forgatás jobbra) – ciklikus eltolás jobbra. Az operandus tartalma az operandus által meghatározott bitszámmal jobbra tolódik el shift_counter. A jobbra eltolt bitek ugyanabba az operandusba íródnak a bal oldalon.

Rizs. 32. Egyszerű ciklikus eltolási parancsok működési sémája


A 32. ábrán látható, hogy az egyszerű ciklikus eltolási utasítások egy hasznos műveletet hajtanak végre működésük során, nevezetesen: a ciklikusan eltolt bit nemcsak a másik végéről tolódik be az operandusba, hanem egyúttal annak értéke is az operandus értékévé válik. CE zászló

Parancsok forgatása a CF átviteli jelzőn keresztül abban különböznek az egyszerű ciklikus shift parancsoktól, hogy az eltolandó bit nem kerül azonnal az operandusba a másik végéről, hanem először a CE hordozó jelzőbe íródik Csak ennek az eltolási utasításnak a következő végrehajtása (feltételezve, hogy ciklusban hajtják végre) azt eredményezi, hogy az előzőleg eltolt bit az operandus másik végére kerül(33. ábra).

Ciklikus váltási parancsokhoz hordozó zászlón keresztül a következők kapcsolódnak egymáshoz:

1) rcl operandus, shift_counter (Rotate through Carry Left) – ciklikus eltolás balra a hordozón keresztül.

Az operandus tartalma balra tolódik el az operandus által meghatározott bitek számával shift_counter. Az eltolt bitek váltakozva a carry flag értékévé válnak, vö.

2) rcg operandus, shift_counter (Rotate through Carry Right) – ciklikus eltolás jobbra a hordozón keresztül.

Az operandus tartalma az operandus által meghatározott bitszámmal jobbra tolódik el shift_counter. Az eltolt bitek váltakozva a CF átviteli jelző értékévé válnak.

Rizs. 33. Ciklikus eltolási parancsok a CF átviteli jelzőn keresztül


A 33. ábrán jól látható, hogy a hordozójelzőn keresztüli eltoláskor megjelenik egy köztes elem, amelynek segítségével különösen a ciklikusan eltolt bitek cseréje lehetséges, különösen eltérés bitsorozatok.

A továbbiakban egy bitsorozat hibás illeszkedése alatt olyan műveletet értünk, amely lehetővé teszi számunkra, hogy valamilyen módon lokalizáljuk és kivonjuk ennek a sorozatnak a szükséges szakaszait, és egy másik helyre írjuk őket.

További eltolási parancsok

A legújabb Intel mikroprocesszoros modellek parancsrendszere az i80386-tól kezdve további shift parancsokat tartalmaz, amelyek bővítik a korábban tárgyalt képességeket. Ezek shift parancsok dupla pontosság: 1) shld operandus_1, operandus_2, shift_counter – dupla pontosságú balra eltolás. Az shld parancs a cserét úgy hajtja végre, hogy az operandus_1 bitjeit balra tolja, és a jobb oldali bitjeit kitölti az operandus_2-ből kiszorított bitek értékeivel az ábra diagramja szerint. 34. Az eltolni kívánt bitek számát az érték határozza meg shift_counter, operandus_2 nem változik.


Rizs. 34. Az shld parancs sémája


2) shrd operandus_1, operandus_2, shift_counter – dupla pontosságú jobbra eltolás. Az utasítás úgy hajtja végre a cserét, hogy az operandus_1 bitjeit jobbra tolja, bal oldali bitjeit pedig a 35. ábra diagramja szerint kitölti az operandus_2-ből kiszorított bitek értékeivel. Az eltolt bitek számát az érték határozza meg. shift_counter, amely a 0... 31 tartományban lehet. Ez az érték megadható azonnali operandusként vagy a cl regiszterben is szerepelhet. Jelentése operandus_2 nem változik.

Rizs. 35. A shrd parancs sémája


Mint megjegyeztük, az shld és shrd parancsok legfeljebb 32 bites eltolást hajtanak végre, de az operandusok megadásának sajátosságai és a működési algoritmus miatt ezekkel a parancsokkal akár 64 bit hosszúságú mezőkkel is dolgozhatunk.

2. Vezérlő átviteli parancsok

Találkoztunk néhány csapattal lineáris a program szakaszaiban. Általában mindegyik végrehajt bizonyos műveleteket az adatok konvertálására vagy átvitelére, majd a mikroprocesszor átadja a vezérlést a következő parancsnak. De nagyon kevés program működik ilyen következetesen. A programban általában vannak olyan pontok, amelyeknél el kell dönteni, hogy melyik parancs kerül végrehajtásra legközelebb. Ez a megoldás lehet:

1) feltétel nélküli – ezen a ponton nem a következő parancsra kell átadni a vezérlést, hanem egy másikra, amely bizonyos távolságra van az aktuális parancstól;

2) feltételes - a következő parancs végrehajtásáról szóló döntés bizonyos feltételek vagy adatok elemzése alapján történik.

A program parancsok és adatok sorozata, amely bizonyos mennyiségű RAM-területet foglal el. Ez a memóriaterület lehet egybefüggő, vagy több töredékből állhat.

A mikroprocesszor egy regiszterpár tartalma alapján tudja, hogy melyik programutasítást kell ezután végrehajtani cs:(e)ip:

1) cs – szegmens kódregiszter, amely az aktuális kódszegmens fizikai (bázis)címét tartalmazza;

2) eip/ip – utasításmutató regiszter, amely a következő végrehajtandó utasítás memóriaeltolását reprezentáló értéket tartalmaz az aktuális kódszegmens elejéhez képest.

Az, hogy melyik regisztert használjuk, attól függ, hogy a címzési mód use16 vagy use32 értékre van állítva. Ha a use 16 van megadva, akkor az ip, ha a use32, akkor az eip.

Így a vezérlésátviteli utasítások megváltoztatják a cs és az eip/ip regiszterek tartalmát, aminek következtében a mikroprocesszor nem a sorrendben következő programparancsot választja ki végrehajtásra, hanem egy parancsot a program valamelyik másik szakaszában. A mikroprocesszorban lévő szállítószalag alaphelyzetbe áll.

A működési elve alapján a programban az átmenetek szervezését biztosító mikroprocesszoros parancsok 3 csoportra oszthatók:

1. Parancsok az irányítás feltétel nélküli átadására:

1) feltétel nélküli ugrási parancs;

2) parancs egy eljárás meghívására és az eljárásból való visszatérésre;

3) parancs a szoftvermegszakítások meghívására és a szoftvermegszakításokból való visszatérésre.

2. Vezérlőparancsok feltételes átadása:

1) ugrási parancsok az oldal-összehasonlító parancs eredménye alapján;

2) átmeneti parancsok egy bizonyos zászló állapota alapján;

3) parancsok az ecx/cx regiszter tartalmában való navigáláshoz.

3. Ciklusvezérlő parancsok:

1) parancs ciklus szervezésére ecx/cx számlálóval;

2) parancs egy ciklus megszervezésére ecx/cx számlálóval, a ciklusból való korai kilépés lehetőségével egy további feltétel mellett.

Feltétel nélküli ugrások

Az előző megbeszélés feltárta az átmenet mechanizmusának néhány részletét. Az ugrásutasítások módosítják az eip/ip utasításmutató regisztert és esetleg a cs kódszegmens regisztert. Hogy pontosan mit kell módosítani, az a következőktől függ:

1) az operandus típusa a feltétel nélküli ugrás parancsban (közel vagy távol);

2) az ugráscím előtti jelzésből (az ugrás parancsban) módosító; ebben az esetben maga az ugráscím lehet közvetlenül a parancsban (közvetlen ugrás), vagy egy regiszterben vagy memóriacellában (közvetett ugrás).

Módosító a következő értékeket veheti fel:

1) near ptr – közvetlen átmenet egy címkére az aktuális kódszegmensen belül. Csak az eip/ip regiszter módosul (a kódszegmens megadott típusától függően: use16 vagy use32) a parancsban megadott cím (címke) vagy az értékkinyerési karaktert használó kifejezés alapján - $;

2) far ptr – közvetlen átmenet egy másik kódszegmensben lévő címkére. Az ugráscím közvetlen operandusként vagy címként (címke) van megadva, és egy 16 bites választóból és egy 16/32 bites eltolásból áll, amelyek a cs, illetve az ip/eip regiszterekbe töltődnek be;

3) szó ptr – közvetett átmenet egy címkére az aktuális kódszegmensen belül. Csak az eip/ip módosul (a parancsban megadott címen található memóriából vagy a regiszterből származó offset értékkel). Eltolás mérete 16 vagy 32 bit;

4) dword ptr – közvetett átmenet egy másik kódszegmensben lévő címkére. Mindkét regiszter – cs és eip/ip – módosul (memóriából származó értékkel - és csak a memóriából, regiszterből). Ennek a címnek az első szava/dword az eltolást jelenti, és betöltődik az ip/eip-be; a második/harmadik szó betöltődik cs-be. jmp feltétel nélküli ugrási parancs

A feltétel nélküli ugrás parancs szintaxisa: jmp [módosító] jump_address – egy feltétel nélküli ugrás a visszatérési pont információinak tárolása nélkül.

A jump_address vagy címkecím, vagy annak a memóriaterületnek a címe, ahol az ugrásmutató található.

Összességében a mikroprocesszoros utasításrendszer több jmp feltétel nélküli ugrógép utasításkódot tartalmaz.

Különbségeiket az átmeneti távolság és a célcím megadásának módja határozza meg. Hatótávolság az átmenetet az operandus helye határozza meg átmeneti_cím. Ez a cím lehet az aktuális kódszegmensben vagy más szegmensben. Az első esetben az átmenetet ún intraszegmentális, vagy szerettei, a másodikban – interszegmentális, vagy távoli A szegmensen belüli ugrás feltételezi, hogy csak az eip/ip regiszter tartalma változik.

Három lehetőség van a jmp parancs szegmensen belüli használatára:

1) egyenes rövid;

2) egyenes;

3) közvetett.


Eljárások

Az Assembly nyelvnek számos eszköze van, amelyek megoldják a programkód szakaszainak többszörözését. Ezek tartalmazzák:

1) az eljárások mechanizmusa;

2) makró assembler;

3) megszakítási mechanizmus.

Az eljárás, gyakran ún szubrutin - ez valamely feladat bontásának (több részre osztásának) alapvető funkcionális egysége. Az eljárás egy adott részfeladat megoldására szolgáló parancsok csoportja, és rendelkezik az irányítás megszerzésével attól kezdve, hogy meghív egy magasabb szintű feladatot, és visszaadja az irányítást erre a pontra.

A legegyszerűbb esetben egy program egy eljárásból állhat. Más szóval, egy eljárást úgy definiálhatunk, mint egy helyesen formázott parancskészletet, amely a leírás után szükség esetén bárhol meghívható a programban.

A parancssorozat mint eljárás leírásához az assembly nyelv két direktívát használ: PROC és ENDP.

Az eljárás leírásának szintaxisa a következő (36. ábra).


Rizs. 36. Szintaxis egy eljárás leírására egy programban


A 36. ábrán látható, hogy az eljárásfejben (PROC direktíva) csak az eljárásnévre van szükség. A PROC direktíva nagyszámú operandusa közül a [távolság] külön említést érdemel. Ez az attribútum közeli vagy távoli értékeket vehet fel, és jellemzi az eljárás másik kódszegmensből történő meghívásának lehetőségét. Alapértelmezés szerint a [távolság] attribútum közel értékre van állítva.

Az eljárás bárhol elhelyezhető a programban, de úgy, hogy véletlenül se essen rá az irányítás. Ha egy eljárást egyszerűen beillesztünk az általános parancsfolyamba, akkor a mikroprocesszor az eljárásparancsokat ennek a folyamatnak a részeként fogja fel, és ennek megfelelően végrehajtja az eljárásparancsokat.

Feltételes ugrások

A mikroprocesszornak 18 feltételes ugrási utasítása van. Ezekkel a parancsokkal ellenőrizheti:

1) az előjeles operandusok közötti kapcsolat („több – kevesebb”);

2) az előjel nélküli operandusok közötti kapcsolat („fent – ​​lent”);

3) a ZF, SF, CF, OF, PF (de nem AF) aritmetikai zászlók állapotai.

A feltételes ugrási parancsok szintaxisa megegyezik:

jcc átmeneti_címke

Mint látható, az összes parancs mnemonikus kódja „j”-vel kezdődik - a szóból ugrás(ugrál), ő - meghatározza a parancs által elemzett konkrét állapotot.

Ami az operandust illeti átmeneti_címke, akkor ez a címke csak az aktuális kódszegmensen belül helyezkedhet el; a vezérlés szegmensek közötti átadása feltételes átmeneteknél nem megengedett. Ezzel kapcsolatban a módosító kérdése, amely a feltétel nélküli ugrásparancsok szintaxisában jelen volt, eltűnik. A korai mikroprocesszoros modellekben (i8086, i80186 és i80286) a feltételes ugrási utasítások csak rövid ugrásokat tudtak végrehajtani – -128 és +127 bájt közötti távolságra a feltételes ugrási utasítást követő utasítástól. A 80386-os mikroprocesszoros modelltől kezdve ez a korlátozás megszűnt, de amint látható, csak az aktuális kódszegmensen belül.

Ahhoz, hogy döntést hozhassunk arról, hogy a feltételes ugrási paranccsal hova kerüljön az irányítás átadása, először egy feltételt kell generálni, amely alapján meghozzuk a döntést az irányítás átadásáról.

Az ilyen állapot forrásai a következők lehetnek:

1) minden olyan parancs, amely megváltoztatja az aritmetikai zászlók állapotát;

2) az összehasonlítási parancsoldal, amely két operandus értékét hasonlítja össze;

3) az ecx/cx regiszter állapota.


cmp összehasonlítás parancsot

Az oldal összehasonlítása parancsnak érdekes működési elve van. Ez teljesen megegyezik a kivonási paranccsal - aloperand, operandus_2.

A lapparancs az alparancshoz hasonlóan kivonja az operandusokat és beállítja a zászlókat. Az egyetlen dolog, amit nem tesz, az az, hogy a kivonás eredményét írja az első operandus helyére.

A lapparancs szintaxisa oldal operandus_1, operandus_2 (összehasonlít) – összehasonlít két operandust, és az összehasonlítási eredmények alapján jelzőket állít be.

A lapparancs által beállított jelzők speciális feltételes elágazási parancsokkal elemezhetők. Mielőtt megnéznénk őket, fordítsunk egy kis figyelmet ezeknek a feltételes ugrásparancsoknak a mnemonikájára (16. táblázat). A feltételes ugrás parancsok nevének kialakításánál a jelölés megértése (a jcc parancs nevében szereplő, általunk kijelölt elem) megkönnyíti a memorizálást és a további gyakorlati felhasználást.

16. táblázat: A jcc parancs nevében szereplő rövidítések jelentése
17. táblázat: Az operandus_1, operandus_2 parancsoldal feltételes ugrási parancsainak listája

Ne lepődj meg azon a tényen, hogy ugyanazok a zászlóértékek a feltételes ugrásparancsok több különböző mnemonikus kódjának felelnek meg (a 17. táblázatban perjel választja el őket egymástól). A névbeli eltérés a mikroprocesszor-tervezők azon törekvéséből adódik, hogy megkönnyítsék a feltételes ugrásutasítások használatát bizonyos utasításcsoportokkal kombinálva. Ezért a különböző nevek inkább eltérő funkcionális irányultságokat tükröznek. Azonban az a tény, hogy ezek a parancsok ugyanazokra a zászlókra reagálnak, teljesen egyenértékűvé és egyenlővé teszi őket a programban. Ezért a 17. táblázatban nem név szerint vannak csoportosítva, hanem azon zászlóértékek (feltételek), amelyekre reagálnak.


Feltételes ági utasítások és zászlók

Egyes feltételes ugrásparancsok mnemonikus jelölése annak a zászlónak a nevét tükrözi, amellyel működnek, és a következő szerkezettel rendelkezik: a „j” karakter az első. (Ugrás,átmenet), a második vagy a zászló megjelölése vagy az „n” tagadás szimbólum, amelyet a zászló neve követ. Ez a csapatstruktúra a célját tükrözi. Ha nincs „n” karakter, akkor a zászló állapotát ellenőrzi, ha egyenlő 1-gyel, akkor átmenet történik az ugráscímkére. Ha az „n” karakter jelen van, akkor a zászló állapota ellenőrzi a 0 egyenlőséget, és ha sikeres, akkor ugrás történik az ugráscímkére.

A parancsok mnemonikus kódjait, zászlóneveit és átmeneti feltételeit a 18. táblázat tartalmazza. Ezek a parancsok minden olyan parancs után használhatók, amelyek megváltoztatják a megadott zászlókat.

18. táblázat Feltételes ugrási parancsok és zászlók

Ha alaposan megnézi a 17. és 18. táblázatot, láthatja, hogy sok feltételes ugrásparancs bennük egyenértékű, mivel mindkettő ugyanazon zászlók elemzésén alapul.


Feltételes ugrási utasítások és az ecx/cx regiszter

A mikroprocesszor architektúrája számos regiszter speciális használatát foglalja magában. Például az EAX/AX/AL regiszter akkumulátorként, a BP és SP regiszterek pedig a veremmel való együttműködésre szolgálnak. Az ESH/CX regiszternek meghatározott funkcionális célja is van: ellátja a szerepet számláló ciklusvezérlő parancsokban és karakterláncokkal végzett munka során. Lehetséges, hogy funkcionálisan az ecx/cx regiszterhez társított feltételes ugrásparancs pontosabban ebbe a parancscsoportba sorolható be.

Ennek a feltételes elágazási parancsnak a szintaxisa a következő:

1) jcxz jump_label (Ugrás, ha ex értéke nulla) – ugrás, ha cx nulla;

2) jecxz jump_label (Jump Equal exx Zero) – ugrás, ha exx nulla.

Ezek a parancsok nagyon kényelmesek ciklusok szervezésekor és karakterláncokkal való munka során.

Meg kell jegyezni, hogy a jcxz/jecxz parancsnak van egy korlátozása. Más feltételes vezérlés átviteli utasításokkal ellentétben a jcxz/jecxz utasítás csak rövid ugrásokat tud kezelni - -128 bájtnál vagy +127 bájtnál a következő utasítástól.

Ciklusok szervezése

A ciklus, mint tudják, egy fontos algoritmikus struktúra, amelynek használata nélkül valószínűleg egyetlen program sem képes. Megszervezheti a program egy bizonyos szakaszának ciklikus végrehajtását, például feltételes átviteli parancsok vagy a jmp feltétel nélküli ugrás parancs használatával. Az ilyen típusú ciklusszervezésnél a szervezéssel kapcsolatos összes művelet manuálisan történik. De tekintettel egy ilyen algoritmikus elem mint ciklus fontosságára, a mikroprocesszor-fejlesztők három parancsból álló csoportot vezettek be a parancsrendszerbe, hogy megkönnyítsék a ciklusok programozását. Ezek a parancsok az ecx/cx regisztert is használják ciklusszámláló.

Röviden leírjuk ezeket a parancsokat: 1) loop jump_label (Loop) – ismételje meg a ciklust. A parancs lehetővé teszi, hogy a magas szintű nyelvek for loopjához hasonló ciklusokat szervezzen a hurokszámláló automatikus csökkentésével. A csapat feladata a következő:

b) az ESX/CX regiszter összehasonlítása nullával: ha (ECX/CX) = 0, akkor a vezérlés átkerül a ciklus után következő parancsra;

2) loope/loopz átmeneti_címke

A loope és loopz parancsok abszolút szinonimák. A parancsok feladata a következő műveletek végrehajtása:

a) az ESH/CX regiszter csökkentése;

c) a ZF nulla zászló állapotának elemzése, ha (ECX/CX) = 0 vagy XF = 0, a vezérlés átkerül a ciklus után következő parancsra.

3) loopne/loopnz átmeneti_címke

A loopne és loopnz parancsok szintén abszolút szinonimák. A parancsok feladata a következő műveletek végrehajtása:

a) az ESH/CX regiszter csökkentése;

b) az ESX/CX regiszter összehasonlítása nullával;

c) a ZF nulla zászló állapotának elemzése: ha (ECX/CX) = 0 vagy ZF = 1, a vezérlés átkerül a ciklus után következő parancsra.

A loop/loopz és loopne/loopnz parancsok működési elvükben fordítottak. Kibővítik a ciklusparancs működését a zf jelző további elemzésével, amely lehetővé teszi a hurokból történő korai kilépés megszervezését, ennek a jelzőnek a használatával.

A loop, loop/loopz és loopne/loopnz parancsok hátránya, hogy csak rövid ugrásokat valósítanak meg (-128-ról +127 bájtra). A hosszú hurkok használatához feltételes elágazási parancsokat és jmp parancsot kell használnia, ezért próbálja meg elsajátítani mindkét ciklusszervezési módszert.

MP eszközök programozásának alapjai (előadás)

ELŐADÁSTERV

1. Mikroprocesszoros parancsok osztályozása

2.Címzés típusai

3. Az MP KR580VM80 felépítése és parancsformátumai

1. Mikroprocesszoros parancsok osztályozása

Mint már említettük, az MP alapvető előnye a programozhatóság. Ez azt jelenti, hogy az MP bemenetre parancsokat alkalmazva biztosítható a kívánt műveleti sorrend, pl. egy adott algoritmus megvalósítása.A megoldandó probléma algoritmusa tetszőlegesen összetett lehet, csak ezt az algoritmust kell lépésekre bontani az MP parancsrendszerének megfelelően, ezért a parancsrendszer nem fontos csak abból a szempontból, hogy mit tud az MP, hanem abból is, hogy az algoritmus hogyan hajtódik végre. A parancsok vagy parancscsoportok jelenléte vagy hiánya jelentősen befolyásolhatja az MP kiválasztását egy adott alkalmazáshoz.

Az MP parancsok osztályozását a 8. ábra mutatja be.

Az egy parancs befogadásához szükséges memóriacellák száma alapján megkülönböztetik az egy, két vagy három szó hosszúságú parancsokat. A két vagy három szóból álló utasítások lekéréséhez két vagy három memóriaelérési ciklus szükséges.

Sok esetben, különösen a hasonló architektúrájú MP-k összehasonlításakor, hasznos a parancsokat az MP architektúra jellemzőinek megfelelően osztályozni.

Funkcionális szempontból a csapatokat három nagy csoportra osztják: átvitel, menedzsment és adatfeldolgozás. Tekintsük részletesen az MP-ben használt főbb parancsokat, a funkcionális jellemzők szerinti osztályozás használatával. A parancsok neveit orosz szavak jelölik, amelyek jelzik a végrehajtott műveletek jelentését.

Adatátviteli parancsok egyszerű információtovábbítást biztosítanak feldolgozási műveletek elvégzése nélkül. Az ebbe a csoportba tartozó parancsok memóriahozzáféréssel, regiszterelérési parancsokra és bemeneti/kimeneti parancsokra vannak felosztva.

A memória-hozzáféréssel kapcsolatos parancsok a következők:

EMLÉKEZIK(WRITE), amellyel a regiszter tartalma a memóriacellába kerül.

A bájt vagy szó átvitelével kapcsolatos parancsokban fel kell tüntetni egy adott regiszter számát, a memóriacella címét és szükség esetén a tárolómodul számát.

A regiszterek elérésével kapcsolatos parancsokban fel kell tüntetni az információforrás számát és az eredményregiszter számát Az adatátviteli parancsok ebbe az alcsoportjába a következő parancsok tartoznak:

KÖZVETLEN LETÖLTÉS, amelyben a parancskódban megadott állandót írjuk a regiszterbe;

ELŐRE, amelyen keresztül az egyik regiszter tartalma egy másikba kerül.

Az I/O parancsok a következők:

BELÉP, amellyel a beviteli eszköz tartalma az MP belső regiszterébe kerül;

KÖVETKEZTETÉS, amelyben az MP belső regiszterének tartalma (általában egy akkumulátor) kerül a kimeneti eszközre.

Vezérlő parancsok , amelyeket gyakran átmeneti parancsoknak neveznek, lehetővé teszik a különféle műveletek végrehajtását a külső jelek vagy a rendszeren belül generált feltételek értékének megfelelően.. Minden vezérlőparancs feltétel nélküli és feltételes átmeneti parancsokra van felosztva.

A feltétel nélküli ugrási parancsok a következők:

FELTÉTEL NÉLKÜLI UGRÁS(BP), amely szerint a BP parancs címmezőjének tartalma a programszámlálóba íródik, azaz. átmenetet biztosít a programban a parancsban megadott címre;

FELTÉTEL NÉLKÜLI ÁTUTALÁS VISSZATÉRÍTÉSSEL(áttérés egy szubrutinra), amely szerint a programszámlálóba (a szubrutin első parancsának címe) új tartalmak íródnak, de a BP parancstól eltérően a programszámláló és néhány más regiszter állapota a memóriába kerül. . Amikor egy szubrutin az utolsó RETURN parancsára kerül végrehajtásra, a programszámláló és az összes regiszter tartalma visszaáll.

A feltételes ugrási utasítások ellenőrzik egy regiszterbit, a flip-flop jelzőjele vagy más paraméter állapotát. Az ellenőrzés eredménye határozza meg, hogy az átállás megtörténik-e vagy sem. Az átmenetet általában akkor hajtják végre, ha az ellenőrzés eredménye megegyezik a parancsban megadott feltétellel. A vezérlőparancsok ebbe az alcsoportjába tartozik:

FELTÉTELES UGRÁS(UP) cím szerint Az UP parancs kódjának jeleznie kell az ellenőrzött feltételt, amelyre az MT az eredmény nulla vagy nem nulla értékét használja, az eredmény pozitív vagy negatív előjelét, a carry meglétét vagy hiányát jelek, túlcsordulás stb.A feltétel teljesülése esetén a címszámláló tartalma a programszámlálóba íródik UE parancsmezők, pl. átmenetet biztosít a programban a parancsban megadott címre. Ha a feltétel nem teljesül, a vezérlés átkerül a következő programparancsra;

FELTÉTELES ÁTMENET VISSZAJÁRÁSSAL, ami abban különbözik a FELTÉTELEZETLEN UGRÁS VISSZATÉRÍTÉSSEL parancstól, hogy az alprogramra való áttérés csak a megadott feltétel teljesülése esetén történik meg.

Az MP parancsrendszer általában több kiegészítő parancsot is tartalmaz, amelyek lehetővé teszik a feltételes átmenetek végrehajtását befolyásoló regiszterek vagy triggerek állapotának szabályozását, például: SET FLAG, RESET FLAG, SET BATTERY HIGH BIT, RESET BATTERY HIGH BIT stb. .

Adatfeldolgozási parancsok aritmetikai és logikai részekre oszthatók. Az aritmetikai a következőket tartalmazza:

FOLD két regiszter vagy egy regiszter és egy memóriacella tartalma;

KIVONÁS egy memóriacella vagy regiszter tartalmából, egy regiszter tartalmából;

EMELÉS 1-VEL(INCREMENT) egy memóriacella vagy regiszter (veremmutató, indexregiszter, akkumulátor) tartalma;

CSÖKKENTÉS 1-VEL(DEKRÉM) egy memóriacella vagy regiszter tartalma;

HOZZÁADJA VÉGREHAJTÁSSAL, amellyel az átviteli trigger állapotának figyelembevételével az összeadás történik. Ez megkönnyíti a nagy számok feldolgozásának megszervezését;

A HITEL SZÁMVITELÉSÉNEK KIVONÁSA;

VÁLTÁS memóriacella vagy regiszter tartalma (általában egy bit).

A logikai parancsok alcsoportja a következő parancsokat tartalmazza:

ÉS(LOGIKAI SZORZAT), mellyel két regiszter vagy egy memóriacella és egy regiszter tartalma között történik a konjunkciós művelet;

VAGY(LOGIKAI HOZZÁADÁS), mellyel diszjunkciós műveletet hajtanak végre két regiszter vagy egy memóriacella és egy regiszter tartalma között;

ÉRVÉNYTELENSÉG, amely két regiszter vagy egy memóriacella és egy regiszter tartalmának bitenkénti összehasonlítását végzi;

INVERZIÓ memóriacella vagy regiszter tartalma.

2.Címzés típusai

Az MP egyik legfontosabb architekturális jellemzője a memória elérésének lehetséges módszereinek vagy a címzési típusoknak a listája. Az MP címzési képességei két szempontból is jelentősek.

Először is, a nagy mennyiségű memória nagy címhosszt igényel, mivel az n bites cím lehetővé teszi a 2n szó kapacitású memóriához való hozzáférést. A tipikus 8 bites MP szavak csak 256 memóriacellához teszik lehetővé a közvetlen hozzáférést, ami nyilvánvalóan nem elég. Ha figyelembe vesszük, hogy a memória elérése a legelterjedtebb művelet, akkor nyilvánvaló, hogy az MP használatának hatékonyságát nagymértékben meghatározzák az MP kis bitkapacitású, nagy mennyiségű memória címzésének módszerei.

Másodszor, a programozás megkönnyítése érdekében kívánatos egy egyszerű rendszer az adatcímek generálására, amikor tömbökkel, táblázatokkal és mutatókkal dolgozik. Nézzük meg e problémák megoldásának módjait.

Ha a parancs címmezője korlátozott és nem elegendő bármely memóriacella közvetlen eléréséhez, akkor a memória ilyen esetekben lapokra van felosztva, ahol 2n memóriacellát tekintünk oldalnak.

A kisbites parancs címmezőjének és a nagy kapacitású memóriának megfelelő összeegyeztetéséhez (az „oldal” probléma megoldására) különféle címzési típusokat használnak az MP-ben:

Közvetlen címzés az aktuális oldalra . Ezzel a címzéssel a programszámláló két mezőre oszlik: a magasabb rendű bitek az oldalszámot, az alacsonyabb rendű bitek pedig az oldalon lévő cella címét jelzik. A parancs címmezője az oldalon lévő cella címét tartalmazza, és az oldal címét más módon, például speciális paranccsal kell beállítani.

Közvetlen címzés oldalregiszter segítségével. Az MP-nek rendelkeznie kell egy speciális paranccsal betöltött, programozottan elérhető oldalregiszterrel. Ez a regiszter több bitet ad hozzá az utasítás címmezőjéhez, amelyek az összes memória címzéséhez szükségesek.

Közvetlen címzés kettős szavak használatával. A parancs címmezőjének hosszának növelése érdekében a címhez egy további szót (szükség esetén kettőt) rendelnek.

Címzés a programszámlálóhoz képest. Az utasítás címmezője előjeles egész számként kezelendő, amely hozzáadódik a programszámláló tartalmához a végrehajtási cím kialakításához. Ez a relatív címzési módszer lebegő oldalt hoz létre, és megkönnyíti a programok mozgatását a memóriában.

Az indexregiszterhez viszonyított címzés. A végrehajtási cím az indexregiszter tartalmának és a parancs címmezőjének összeadásával jön létre, előjeles egésznek tekintve. Az indexregiszter speciális parancsokkal van betöltve.

Közvetett címzés . Közvetett címzés használata esetén a parancs címmezője az aktuális oldalon lévő címet adja meg, ahol a végrehajtó cím tárolva van. Ebben az esetben egy további bit szükséges a parancsmezőben - ez a közvetett címzés jele. A végrehajtó cím nem memóriacellában, hanem egy általános célú regiszterben tárolható. Ebben az esetben az indirekt címzést regisztercímzésnek nevezzük.

3. Az MP KR580VM80 felépítése és parancsformátumai

A KR580VM80 sorozat MP parancsrendszere három formátumban tartalmaz parancsokat: egybájtos, kétbájtos és hárombájtos.

Az első bájt tartalma jelzi a parancsformátumot, a műveleti kódot, a címzés típusát és a regisztereket vagy regiszterpárokat, ha részt vesznek a műveletben, azonban nem lehet megadni, hogy az első háromhoz milyen konkrét biteket rendelnek. a parancs meghatározott összetevőit, mert ezek a parancs bármely bitjében elhelyezkedhetnek. Ennek ellenére feltételezzük, hogy egyetlen mezőként vannak kódolva, amelyet műveleti kód mezőnek neveznek. A parancs első bájtjának formátumváltozatai a 9. ábrán láthatók.

Ha a műveletben regiszterek vesznek részt, ezek közül egy vagy kettő megadható a parancs első bájtjában. Ebben az esetben a parancsmezőben a regiszterszámokhoz egészen specifikus biteket rendelünk: a három alacsony rendű bit (b2 – b0) az operandust tartalmazó forrásregiszter számát kódolja, a három középső (b5 – b3) – annak a célregiszternek a száma, amelybe a művelet eredménye elküldésre kerül Azokban az esetekben, amikor mindkét regiszter vagy az egyik nem vesz részt a művelet végrehajtásában, a műveleti kódhoz a megfelelő biteket használják.

A következő regiszterkódolás elfogadott:

000 – B regiszter, 100 – H regiszter,

001 – C regiszter, 101 – L regiszter,

010 – D regiszter, 110 – memóriacella,

011 – E regiszter, 111 – A elem.

A 100-as kód a H és L regiszterekben található 16 bites címet használó indirekt memóriacímzés jele, amely attól függően, hogy ez a kód hol található a parancsban, a megfelelő memóriacellát vagy egy operandushoz, vagy a művelet eredményeinek írásához lehet elérni. a művelet.

Számos MP parancs dupla hosszúságú számok feldolgozását vagy továbbítását teszi lehetővé. Ezekben az esetekben a B és C, D és E, illetve H és L regiszterpárok 16 bites 00, 01 és 10 regiszterekké egyesülnek. A parancsokban a regiszterpárok száma a b2 és b1 (forrásregiszter), b5 és b4 (célregiszter) bitekhez van hozzárendelve, a b0 és b3 bit pedig a műveleti kód jelzésére szolgál.

Az MP-ben a kétbájtos parancsok közé tartoznak a közvetlen címzésű és bemeneti/kimeneti parancsok, ennek megfelelően a csoport parancsának második bájtja egy 8 bites operandust vagy egy bemeneti vagy kimeneti eszköz 8 bites címét tartalmazza.

A hárombájtos utasításokban a második és harmadik bájt 16 bites címeket (a közvetlen címzési utasításokban) vagy 16 bites operandusokat (a regiszterpárok és a veremmutató betöltésére vonatkozó utasításokban) tartalmaz.

Minden egyes ALU művelet végrehajtása után öt előjel generálódik, amelyek értéke befolyásolhatja a későbbi információfeldolgozási és feltételes vezérlés átviteli parancsok végrehajtását, azonban figyelembe kell venni, hogy a különböző parancsok eltérő hatással vannak az egyes jelekre.

Az MP állapotának mentésének és visszaállításának kényelme érdekében a megszakítások és az alprogramokra való áttérés során az összes megadott jellemzőt egy speciális regiszterben tárolják - a jellemzők regiszterében. Az előjelek helyét a regiszterbitekben a táblázat mutatja.

ahol S a „jel” attribútum (a legjelentősebb bit értékét veszi fel

eredmény);

Z – nulla eredmény jele;

Az AC a segédátvitel jele (ha van átvitel

bájt tetrad között, akkor AC=1, egyébként AC=0;

P – az eredmény paritásának jele (ha az egyesek száma a bájtban

az eredmény páros, akkor P=1, egyébként P=0);

C – átruházás vagy kölcsönzés jele (ha parancsok végrehajtásakor,

Amikor vezető beosztásból vagy kölcsönbe helyezés történt vezető beosztásba,

A legmagasabb számjegy C=1, egyébként C=0).

Jegyzet: A logikai szorzási parancsoknál az AC kiegészítő hordozójel az eredmény negyedik bitjének értékét veszi fel.

A KR580VM80 MP sorozat teljes parancsrendszerét a „Mikroprocesszorok és mikroprocesszoros rendszerek” című tankönyv melléklete tartalmazza. Ott minden parancsnál fel van tüntetve, hogy végrehajtása után hogyan változik az egyes attribútumok értéke: a művelet eredményének megfelelően beáll (+), nem változik (–), nullára áll vissza (0 ) vagy állítsa egyre (1).

Általában a parancsnak a következő információkat kell tartalmaznia:

–műveleti kód, amely azt a műveletet jelzi, amelyet az MP-nek végre kell hajtania;

– két operandus címe (összeadások, részfejek stb.). Ha valamelyik operandus konstans, akkor a címe helyett magának az operandusnak az értéke adható meg a parancsban. Ennek a körülménynek azonban tükröződnie kell a műveleti kódban, hogy az MP a parancs megfelelő részét rendeltetésszerűen használja;

–a memóriacella címe, amelybe a művelet eredményét el kell helyezni;

– a következő parancs címe.

Azok. a parancs általában négycímes, de ez a parancsstruktúra hosszabb parancsformátumhoz vezet, ami viszont egy bonyolultabb feldolgozási folyamathoz és processzorstruktúrához kapcsolódik. Emiatt az MP technológiában a cím nélküli és az unicast parancsok a legelterjedtebbek, amelyek lehetővé teszik egy egyszerű processzor felépítését, azonban összetett műveletek végrehajtása során különféle parancsformátumokat alkalmaznak.

Az 580-as sorozatú MP utasításrendszer egy-, két- és hárombájtos utasításokkal rendelkezik.

A megcímzendő parancs mikéntjére vonatkozó információ a parancs első bájtjának műveleti kódjában található.

A számítások felgyorsítása érdekében néhány operandust a RON blokkban tárolunk. Az ezekkel az operandusokkal működő utasítások rövidített címkódokat használnak (regisztercímzés).

Ezek a parancsok lehetővé teszik a RAM-hoz való hozzáférés viszonylag hosszú ciklusának kiküszöbölését, és ezáltal jelentősen növelik a műveletek sebességét. A RON korlátozott kapacitása miatt és amikor nagy adattömbbel dolgozik, más címzési módszereket alkalmaznak, amelyek lehetővé teszik az MP-n kívüli memóriában található operandusok elérését. A legelterjedtebb a regiszter indirekt címzése, amely HL regiszterpárt használ.

A vezérlésátviteli parancsok csoportjában négyféle parancs található: feltétel nélküli ágak, feltételes ágak, hurkok és megszakítások .

Feltétel nélküli ugrási parancsok. Három emlékeztető kódot tartalmaz: JMP (feltétel nélküli ugrás), CALL (szubrutinhívás) és RET (visszatérés a szubrutinból).

A JMP parancs lehetővé teszi, hogy a program bármely pontjára ugorjon, amely mind az aktuális programszegmensben, mind egy másik szegmensben található. Az aktuális programszegmensen belüli ugráskor az első három JMP utasításformátum kerül felhasználásra.

Az első formátum átmenetet biztosít a program egy tetszőleges pontjára az aktuális programszegmensen belül, amelyhez 16 bites eltolást adnak az IP tartalomhoz kettes komplement kódban, amelynek a legjelentősebb bitje van aláírva. A második, rövidített formátum lehetővé teszi, hogy a JMP utasításból legfeljebb -128-f-127 címre ugorjon a programban. Végül a harmadik formátum betölti az utasításmutatót egy 16 bites számmal, amely a postbyte által meghatározott EA végrehajtó címen található. Ezt az átmenetet közvetettnek nevezik, mert indirekt címzést használnak.

Az aktuális programszegmensen kívüli programpontra való feltétlen ugrás megvalósításához, amikor a CS szegmensregiszter újratöltésére van szükség, a negyedik és ötödik JMP utasításformátumot használják.

A negyedik formátum egy közvetlen interszegmentális átmenetet határoz meg, amelyben a formátum második és harmadik bájtja az átmeneti pont relatív címét, a negyedik és ötödik bájt pedig az új CS értéket jelzi. Az ötödik formátum, egy postbyte segítségével, lehetővé teszi az EA végrehajtó cím meghatározását, amelyen az átmeneti pont relatív címe található (az EA, EA+1 címmel rendelkező memória bájtokban), és az új CS értéket (memória bájtokban). EA+2, EA+3).

A CALL parancs lehetővé teszi az aktuális programszegmensben vagy egy másik memóriaterületen található szubrutin meghívását. Ugyanolyan formátumú, mint a JMP parancs, csak rövidebb. A hasonló formátumú JMP paranccsal ellentétben a CALL parancs az IP vagy IP és CS értékek megváltoztatása előtt automatikusan beírja ezeknek a regisztereknek az aktuális értékeit a verembe, ami biztosítja, hogy az alprogram visszatérési pontja emlékezzen.

A szubrutinból való visszatéréshez használja a RET parancsot, amely az előző CALL parancs végrehajtásakor a verembe tolt visszatérési címre adja át a vezérlést. Az aktuális programszegmensben található szubrutinokból visszatérve a RET utasítás első két formátuma kerül felhasználásra, a második formátum pedig abban különbözik az elsőtől, hogy az utasítás 2. és 3. bájtjába írt konstans hozzáadódik az utasítás tartalmához. a veremmutató. Ez lehetővé teszi a szubrutinból való visszatéréssel egyidejűleg az alprogram végrehajtása során a verembe írt és a jövőben nem használt paraméterek visszaállítását.

A szegmensek közötti visszatéréshez a harmadik és negyedik RET formátumot használják, amelyek mind az utasításmutató, mind a programszegmens tartalmának helyreállítását biztosítják.

Feltételes ugrási parancsok. Vezérlés átvitele az előző műveletek eredményétől függően. Háromféle feltételes ugrás létezik, amelyek az előjeles számok, az előjel nélküli számok és a tetszőleges számok közötti kapcsolatok létrehozására szolgálnak. Az első két változatban különböző parancs-mnemonikus kódok vannak kiválasztva a számok közötti azonos kapcsolatokhoz, mivel a különböző zászlóértékek az előjeles és előjel nélküli számok közötti azonos kapcsolatoknak felelnek meg.

A feltételes ugrási parancsok mnemonikus kódjaiban az előjeles számok összehasonlításakor a betű a „nagyobb, mint” feltétel jelzésére szolgál. G (Nagyobb- több), és a „kevesebb” betű megjelölésére L (kevesebb- Kevésbé). Hasonló esetekben az előjel nélküli számok összehasonlításakor betűket használunk A (Fent- fent) és Lent- alatt). Az egyenlőségi feltételt a betű jelöli E (egyenlő- egyenlő), és valamilyen feltétel teljesítésének elmulasztása - levélben N (Nem- Nem). Megjegyzendő, hogy minden parancshoz két különböző mnemonikus kód használható; Például a JL és JNGF emlékeztető kódok egyenértékűek, mivel a „kisebb, mint” és a „nem nagyobb, mint vagy egyenlő” feltételek azonosak.

A parancsok mnemonikus kódjainak teljes listája, az ellenőrzött feltételek, valamint a jelzők megfelelő logikai kombinációi és értékei a táblázatban találhatók. 1.4.

1.4. táblázat

Parancs mnemonikus kód Feltétel A zászlók jelentése
Előjeles számokhoz
JL/JNGE Kevesebb/nem több, mint vagy egyenlő SF + OF = l
JNL/JGE Nem kisebb/nagyobb, mint vagy egyenlő SF + OF = 0
JG/JNLE Több/nem kisebb vagy egyenlő (SF + OF) V ZF = 0
JNG/JLE Nem nagyobb/kisebb, mint vagy egyenlő Előjel nélküli számok esetén (SF + OF) V ZF = l
JB/JNAE Kevesebb/nem több, mint vagy egyenlő CF=1
JNB/JAE Nem kisebb/nagyobb, mint vagy egyenlő CF=0
JA/JNBE Több CF V ZF = 0
JNA/JBE Nincs több Egyéb adatokért CF V ZF = 1
JE/JZ Egyenlő/nulla ZF = 1
JNE/JNZ Nem egyenlő/nulla ZF = 0
JS Mínuszban SF = 1
JNS A pozitív oldalon SF = 0
JO Túlcsordulás OF = l
JNO A túlfolyás hiánya miatt OF = 0
JP/JPE Egyenletes paritás szerint PF = 1
JNP/JPO Páratlan paritás szerint PF = 0

Minden feltételes ugrási utasításnak ugyanaz a kétbájtos formátuma, amelynek első bájtja a műveleti kódot (OPC) határozza meg, a második pedig egy 8 bites eltolás, amelyet előjeles számként kezelünk, és ezért lehetővé teszi a cím megváltoztatását a tartományban. -128-tól + 127-ig. Ha egy távolabbi („távolabbi”) átmenetre van szükség, ha egy feltétel teljesül, egy további feltétel nélküli átmenet parancsot használnak.

A feltételes ugrás utasítások mindegyikének végrehajtási ideje két esetben van feltüntetve: 1) a feltétel teljesül, és az eltolásnak megfelelően ténylegesen átadásra kerül a vezérlés, 2) a feltétel nem teljesül, így a vezérlés átkerül a következő utasításra.

Csapatok ciklusok szervezésére. Bekerült a CPU-ba a számítási ciklusok végrehajtásának kényelme érdekében. Ezek közé tartoznak a következő emlékeztető kódok: LOOP (hurok addig, amíg (CX) nem egyenlő 0-val), LOOPNZ/LOOPNE (hurok nulláig/nem egyenlő), LOOPZ/LOOPE (hurok nulláig/egyenlő) és JCXZ (ugrás nulla SH-ban). Ezen parancsok mindegyike két bájtos formátummal rendelkezik, amelynek második bájtja határozza meg az ugrás elrendezéséhez használt 8 bites eltolást. Ezt az eltolást a rendszer előjeles számként kezeli, és az ugráscím kiszámítása előtt előjeles-bővíti 16 bitre.

A hurokparancsok és a karakterlánc-elemek manipulálására szolgáló parancsok együttes használatával meglehetősen összetett karakterlánc-konverziós programokat hozhat létre. Tekintsünk egy példát egy olyan program összeállítására, amely egy hexadecimális számrendszerben írt adatsort olyan kódká alakít, amelyhez a konverziós tábla a BX-ben megadott kezdőcímtől a memóriában található, az XLAT táblakonverziós parancsának használatához. kódokat. Tételezzük fel továbbá, hogy a forráskarakterlánc 80 elemet tartalmaz, és a 100-as relatív kezdőcímről van a memóriában, az eredmény karakterláncot pedig a 200-as relatív címről kell elhelyezni. az irányjelző DF=0 értéke a következő lesz:

MOVSI ,100
MOV DI ,200
MOV CX, 80

Itt az 1.2-ben leírt XLAT táblakonverziós parancsot használjuk.

Megszakítási parancsok. Három emlékeztetőt tartalmaz: INT (megszakítás), INTO (megszakítás túlcsorduláskor) és IRET (megszakítás visszatérés).

Megszakítási parancs INT at v=1 kétbájtos formátummal rendelkezik, amelynek második bájtja egy 8 bites, a típust meghatározó számot tartalmaz (típus) vagy megszakítási szint. INT paranccsal típus A processzor végrehajtja a megadott szintű megszakítási szolgáltatási programot, és automatikusan végrehajtja a megszakítási ponthoz való visszatéréshez szükséges műveleteket. Ezek a műveletek a következők: az F flags regiszter tartalma a verembe íródik (PUSHF), az IF és TF flagek visszaállításra kerülnek, a CS regiszter és az IP utasításmutató aktuális értékei a verembe íródnak.

A szervizprogram kezdőcímének meghatározása az érték szerint típus A megszakítási szint táblázatot használják. A táblázatban szereplő 256 megszakítási szint mindegyikéhez négy bájt van lefoglalva: az első két bájt határozza meg az IP utasításmutató értékét, a második - a CS szegmensregiszter értékét. Ez a négy bájt határozza meg a szervizprogramok kezdőcímeit (CS, IP-érték párok), amelyeket először a 0-3FFH abszolút című memóriacellákba kell írni. Az INT parancsban megadottnak megfelelő táblacím típus A megszakítási szintet a CPU-ban az alábbiak szerint határozzuk meg. A CS és GR aktuális értékeinek veremben való tárolása után a betöltés megtörténik: CS = típus x 4 + 2 és IP = típus x 4. Új CS és IP értékek a címcellákból típus x 4 + 2 És típus x 4, határozza meg a szükséges karbantartási program kezdőcímét.

A fent tárgyalt INT megszakítási parancs, amikor a mező értéke v=0 egybájtos formátumú, vagyis nem igényli a megszakítási szint külön jelzését. Ezt a parancsot a processzor automatikusan 3. szintű megszakításként érzékeli. (típus=3)és a programokban általában ellenőrzőpontként használják.

Az INTO túlcsordulási megszakítás parancs átmenetet eredményez a negyedik szintű megszakítás kiszolgálására (típus = 4) abban az esetben, ha a túlcsordulás jelző értéke OF = 1. Az INTO parancsot általában az előjeles aritmetikai parancsok után használják. Általában az első néhány megszakítási szint (legfeljebb 32) számos konkrét helyzet feldolgozására van fenntartva, mint például a nullával való osztási kísérlet, túlcsordulás és hasonlók.

A fenntartott szintű megszakítások feldolgozásának sajátossága, hogy a processzor az IF megszakítás engedélyező jelzőjének értékétől függetlenül folytatja azok kiszolgálását.

Az egybájtos IRET utasítás minden megszakítási szolgáltatási rutin végére kerül, és megszakítás-visszaadást biztosít. Ezzel a paranccsal a processzor lekéri az IP utasításmutató és a CS programszegmens értékét a veremből, valamint visszaállítja az F flag regiszter korábbi tartalmát is (mint a POPF parancsnál). Szükség esetén a megszakított programnak megfelelő fennmaradó CPU regiszterek tartalma a veremben tárolható a szervizprogramba való áttéréskor, majd onnan visszatérve a veremhozzáférési utasítások segítségével visszaállítható.

Közvetett címmel

PCHL – az ugráscímet a HL regiszterpár tárolja. Amikor végrehajtódik (HL) → PC.

Feltételes ugrási parancsok

Jcon @, ahol a con egy feltétel-mnemonika az angol condition szóból.

Korábban megjegyeztük, hogy az RgP (F) bitjeinek (jelzőinek) állapotát átmeneti feltételként használják. Az ezeknek az állapotoknak megfelelő mnemonikát az ábra mutatja be. 6.18.

Például: JC 8BFE – ha C=1 a 8BFE címre megy, ha C=0, a következő parancs végrehajtásra kerül a címen.

Parancsok a PP hívásához és a visszatéréshez

Korábban megjegyezték, hogy a visszaküldési cím automatikusan a veremben tárolódik, azaz. (PC) ® verem.

Feltétel nélküli parancsok

CALL @ – szubrutin hívása;

RET – visszatérés az alprogramból.

Feltételes parancsok

Ccon @ – szubrutinhívás;

Rcon – visszatérés a szubrutinból.

A parancsok működése hasonló a feltételes ugrásparancsok működéséhez, azaz. ha a feltétel igaz, akkor hívjon vagy térjen vissza. Ha nem, akkor a következő parancsok kerülnek végrehajtásra.

Egyéb vezérlőparancsok

RST n, ahol n = 0,1,...,7 – újraindítás az n megszakítási vektor szerint.

A parancs végrehajtásakor a vezérlés átkerül a megszakítást kiszolgáló szubrutinhoz. Az RST utasítás végrehajtása során a PC-s programszámláló tartalma a veremben tárolódik, és a megfelelő megszakítási vektor címe kerül a PC-re.

Ez a cím a következőképpen van beállítva. Az RST parancs szerkezete 11NN N111, azaz. egy bájt. A hárombites NNN kombinációt az n érték adja meg (n = 0...7). A PC parancsszámlálójába a 0000 0000 00NN N000 érték kerül be, amely a megfelelő megszakítási vektor címeként szolgál.

Így egy bizonyos n érték beállításával előállíthatja a 8 megszakítási vektor egyikének a címét. Ezek a címek a címtér 0000H-tól 0038H-ig terjedő zónájában helyezkednek el, és 8 bájton keresztül mennek át, azaz. Az első 64 memóriacella van lefoglalva számukra (a 8 vektor mindegyikéhez 8 bájt van lefoglalva). Ezekben a zónákban (mindegyik 8 bájt) csak a megfelelő szubrutinokhoz (kezelőkhöz) való ugráshoz szükséges parancsok íródnak, amelyek más memóriaterületeken találhatók.

Az alprogramok megszakításának (mint a normál szubrutinoknak) a RET paranccsal kell végződnie. Ennek a parancsnak a végrehajtása során a veremből kiválasztjuk annak a főprogram parancsnak a címét, amely előtt a megszakítás történt, és átkerül a PA címregiszterbe, és az 1-gyel növelt értéket beírjuk a programszámlálóba.

EI – megszakítás engedélyezése. Ez a parancs annak a programrésznek az elejére kerül, ahol engedélyezve van a megszakítás. Ezzel a paranccsal a megszakítás engedélyezése trigger az MP vezérlőegységben 1-es állapotba kerül.

DI – megszakítás tiltása. Ez a parancs annak a programrésznek a végére kerül, ahol a megszakítás engedélyezve volt, és visszaállítja a triggert 0-ra.

A NOP egy „üres” parancs. 4 mértéket kihagy. Csak a PC változik.

HLT – állj meg. A program végrehajtását leállítja, és leállított állapotba lép. Az MP le van választva a külső cím- és adatbuszról (azaz puffereik Z állapotba kerülnek). A WAIT (várakozás) kimenet 1-es szintre van állítva. Ez az állapot megszakítható MP indítójelekkel vagy megszakítási állapotba helyezésével.

ÖNTESZT KÉRDÉSEK

1. Milyen eszközökre van szükség egy egyszerű mikroszámítógép elkészítéséhez?

2. Soroljon fel 5 lehetőséget a mikroszámítógép-struktúrákhoz!

3. Köztes interfész használata.

4. Mit tartalmaz a „PU vezérlő” fogalma?

5. Sorolja fel az I8080 processzor jellemzőit!

6. Adatnyilvántartások. A céljuk.

7. Aláírási nyilvántartások. Milyen attribútumokat tárolnak ezek a regiszterek?

8. Ismertesse a belső és külső SD közötti kétirányú adatcsere elvét!

9. Milyen regisztereket használhat a programozó?

10. Adja meg az MP KR580VM80 alapú mikroszámítógép blokkvázlatát!

11. Milyen ciklusokból áll egy gépi ciklus?

12. Sorolja fel az MP KR580VM80 adatformátumait.

13. Sorolja fel az MP KR580VM80 parancsformátumait.

14. Milyen címzési módszereket használ az MP KR580VM80?

15. Milyen csoportokba sorolhatók az MP KR580VM80 csapatok?

16. Egybájtos átvitelek. Mondjon példákat a csoport parancsaira.

17. Kétbájtos átvitelek. Mondjon példákat a csoport parancsaira.

18. Milyen akkumulátoros működéseket ismer?

19. Műveletek RON-ban és memóriában. Milyen műveleteket tartalmaznak?

20. Sorolja fel a vezérlőparancsokat.

ELLENŐRZÉSI FELADATOK

1. A válaszlapokon fel kell tüntetni a csoport számát, a tanuló vezetéknevét és választási lehetőségének számát.

2. A kérdésszámokat a tanuló választja ki az érdemjegyzőkönyvben szereplő utolsó két számjegyének megfelelően. A 6.1. táblázatban n-1 a szám utolsó előtti, n pedig az utolsó számjegye. A táblázat celláiban azon kérdések száma szerepel, amelyekre írásban kell válaszolni.

Kérdés számok 6.1. táblázat

a n a n-1
1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18 3,5,8, 13,17 4,6,7, 14,19 1,8,10,13,17 2,5,7, 14,18
3,6,8, 15,19 4,7,9, 13,16 1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18 1,7,12,13,18 2,8,10,14,19 3,5,11,15,20 4,6,9, 13,17
2,7,9, 13,20 1,8,11,15,19 4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18
3,5,8, 13,17 4,6,7, 14,19 1,8,10,13,17 2,5,7, 14,18 3,6,8, 15,19 4,7,9, 13,16 1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18
1,7,12,13,18 2,8,10,14,19 3,5,11,15,20 4,6,9, 13,17 2,7,9, 13,20 1,8,11,15,19 4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17
3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18 3,5,8, 13,17 4,6,7, 14,19 1,8,10,13,17 2,5,7, 14,18 3,6,8, 15,19 4,7,9, 13,16
1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18 1,7,12,13,18 2,8,10,14,19 3,5,11,15,20 4,6,9, 13,17 2,7,9, 13,20 1,8,11,15,19
4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18 3,5,8, 13,17 4,6,7, 14,19
1,8,10,13,17 2,5,7, 14,18 3,6,8, 15,19 4,7,9, 13,16 1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18 1,7,12,13,18 2,8,10,14,19
3,5,11,15,20 4,6,9, 13,17 2,7,9, 13,20 1,8,11,15,19 4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19

A feltétlen átmenet művelet (BP) az irányítás feltétel nélküli átadásának műveleteire utal, és a következőkből áll. A művelet kezdetén a CC tartalma, amely a BP-t (return address) követő parancsot jelzi, elküldésre kerül a P1 AU-nak, ha a program visszaküldést biztosít; Ez lehetővé teszi a visszatérési cím mentését a P1 tartalmának további átvitelével (például 3G művelettel) a memóriába. Ehhez a programrész első parancsainak, amelyre az áttérés történik, tartalmaznia kell egy megfelelő műveletet. A művelet következő szakaszában az 1-14 bites tartalmat, ami az átmeneti cím, a RAM vagy ROM cellából az SchK-ban a BP parancsban megadott címmel olvassuk ki. Ezen a címen azután egy kérés érkezik a ROM-hoz arra a parancsra, amelyre az áttérés történik.

Váltóműködés

A shift formátumban (FSD) az „Aritmetikai eltolás jobbra (balra)” és „Logikai eltolás jobbra (balra)” műveletek kódolva vannak. Végrehajtásukkor a műveleteket az AC-ban található számon hajtják végre. Az attribútumok a parancsban megadva vannak: az eltolás iránya (5 r), az eltolás típusai (8,9 r) és azok száma (1-4 r). A művelet során a P2 regiszter bitjei eltolódnak, az eredményt a P2 és РСм regiszterek rögzítik, és a jobbra eltolás egyszerre 3 bittel történik, a balra eltolás 1 bit. Az 5. bit „1”-el egyenlő értéke határozza meg a balra tolódást, „0”-val egyenlő - jobbra.

A műveletek ciklikusak. A váltási ciklusok számát a ciklusszámláló (CC) számolja. A művelet ciklikus részének végrehajtása előtt a parancs 1-5 bitjének konstanst és eltolásjelet tartalmazó tartalma a központba kerül. Ezután a P2 tartalma elküldésre kerül az RSM-nek. Maga az eltolás a P2 és Pcm regiszterek tartalmának P2’, illetve Pcm’ regiszterek tartalmának „ferde” másolása miatt valósul meg. Ezután a PCm' és P2' SM1 és SM2 közötti eltolódás eredménye átíródik P2-re és PSM-re. A művelet befejezését az SchT =0 értéke jelzi.

Az eltolás típusától függően (L vagy A) vagy mind a 16 bit (L), vagy csak a 15 bit (mantissza) előjel nélkül (A) eltolódik. A jobbra való eltoláskor a megüresedett magasabb rendű bitek egy előjellel, balra tolódáskor pedig a megüresedett alacsonyabb rendű bitek nullákkal vannak feltöltve. A jobbra vagy balra történő logikai eltolás során a megüresedett bitek nullákkal töltődnek fel.

Az eltolási állandót programozottan is módosíthatja.

32 A CB processzor blokkdiagramjának csomópontjainak és elemeinek kölcsönhatása feltételes ugrási műveletek végrehajtása során.

Feltételes ugrási műveletek



A művelet végrehajtása az átmeneti feltétel megvalósíthatóságának ellenőrzésével kezdődik úgy, hogy az előző művelet eredmény attribútuma értékét összehasonlítjuk a parancsban szereplő „maszk” kóddal. Ha a feltétel teljesül, akkor megtörténik az átmenet a parancs végrehajtására, amelynek címe a PFU formátum cím-operandus részében van. Ha az átmeneti feltétel nem teljesül, akkor a programban a „Feltételes ugrás” parancsot követő parancs végrehajtásra kerül.

A „Feltételes ugrás” (JJ) parancs két szomszédos ROM cellát foglal el. Az első cella a parancsot, a második cella az ugráscímet tartalmazza. A feltételes ugrást a parancs 7-9 bitjének kombinációja, a visszatérési cím elhelyezésének feltételét a 6. bit határozza meg.

A feltétel teljesülése esetén az átmeneti cím bekerül a programszámlálóba, ezért az ezzel a címmel rendelkező cellából a következő parancs kódja kerül kiolvasásra. A visszatérési cím P1-be kerül, ha a 6. bit egyenlő 0-val, és Pcm-ben, ha ennek a bitnek az értéke eggyel egyenlő.

Ha az átmeneti feltétel nem teljesül, a következő utasítás az i+2 címkódú cellából kerül kiválasztásra. Ebben az esetben a megadott kód (visszaadási cím) a parancs 6. bitjének értékétől függetlenül kerül beírásra a P1-be. Ez utóbbit az SV processzor működési algoritmusa határozza meg az UE műveleti kód megfejtésekor.

A visszatérési cím megadása a PCM-en annak a ténynek köszönhető, hogy az AC kódbuszra történő kimenetén csak a megadott regiszter található.

Az NC művelet végrehajtásának sajátossága, hogy ha a parancs „maszk” bitjeiben 111-es vagy 000-as kód van, akkor a feltételes átmenet feltétel nélkülivé, illetve az alapregiszterekbe küldő műveletté degenerálódik. Ezekben az esetekben az utasítás cím-operandus részének (AOC) az ugráscímek vagy az alapregiszterek küldési címei vannak.

A BR-nek való küldés művelete során az AOC tartalma a parancs 15-17 bitjének tartalmától függően egy vagy több BR-be kerül egyszerre. A visszaküldési cím ebben az esetben nem kerül elküldésre a P1-nek és az RSM-nek.



Az NC-művelet TCU-műveletként történő végrehajtása a megszakításokban használható megszakító programokra ugráshoz. Ehhez a parancs 5. bitjében beállítjuk a programozott átmenet (PNT) attribútumait. Ebben az esetben a parancs a ROM-ból egy megszakítási jelen (ISR) keresztül kerül beolvasásra a processzorba. Ebben az esetben a ROM hozzáférési címet (megszakítási címet) a processzor megszakító áramköre állítja elő.

A művelet sajátossága ebben az esetben, hogy a megszakítások visszatérési címe nem a parancsot követő FUP formátumú parancs címe, hanem annak a parancsnak a címe, amely előtt a megszakítás történt. Az atomerőmű jelének feldolgozása a következőképpen történik. Ezen jel alapján a processzor megszakító áramköre megszakítási címet (APr) állít elő, amely megegyezik az ugrásutasítás első cellájának címével FUP(i) formátumban. Ez a cím a kapcsolón és a ROM-címregiszteren keresztül kerül a memóriába. A megszakítási címeket úgy választjuk ki, hogy a parancs első cellájának címe (i) páros, a második celláé (i+1) pedig páratlan legyen. A második címet úgy kapjuk meg, hogy (hardverben) a legkisebb jelentőségű számjegyet a CC részvétele nélkül nulláról egyre változtatjuk. A ROM-ból egy parancs kiolvasása és végrehajtása során az SchK (K+1) tartalma az AC P1 regiszterében, a parancs második cellájának (i+1) pedig a amely a j címû parancsra való áttérés címe, be kell írni az SchK-ba. Kérelem a ROM-hoz a CC új tartalmával kapcsolatban. Így a következő utasítás címe a megszakítás időpontjában (K+1) a P1 regiszterben tárolódik. A megszakítás feldolgozása után ez a cím szolgál a megszakított programhoz való visszatéréshez.

33 Az SV processzor blokkdiagramjának csomópontjainak és elemeinek kölcsönhatása processzor- és rendszervezérlési műveletek végrehajtása során.