Instrukce 8080 – rotace

„Cože? Rotace? Proč ne něco Opravdu Důležitého?“ – ale ony jsou docela důležité, věřte mi, a když je správně použijete, tak ušetří spoustu času.

Procesor 8080 oplývá sadou instrukcí, která dokáže provádět takzvané bitové rotace registru A. Co to znamená?

Představme si registr A jako osm bitů, očíslovaných (od nejnižšího) 0-7. Představme si je napsané vedle sebe.

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

To je on. S ním budeme teď pracovat a jako první si ukážeme operaci „rotace vlevo“:

RLC

Instrukce RLC posune bity o 1 doleva. To znamená, že bit 0 se přesune na pozici 1, bit 1 na pozici 2, bit 2 na pozici 3 a tak dál, a bit 7, který nám vypadne zleva ven, se zase vrátí zprava na pozici 0. (A právě proto, že takhle „krouží“, se té operaci říká „rotace“. Kdyby vypadl a byl zahozen, byl by to „posuv“ – ale takové instrukce 8080 nemá). Bit 7 je zároveň zkopírován do příznaku CY.

Operace Pozice v registru A Příznak
7 6 5 4 3 2 1 0 CY
Výchozí stav Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 CY
RLC Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Bit 7 Bit 7

RRC

Instrukce RRC posune bity o 1 doprava. To znamená, že bit 7 se přesune na pozici 6, bit 6 na pozici 5, bit 5 na pozici 4 a tak dál, a bit 0, který tentokrát vypadne vpravo, se vrátí zleva na pozici 7, a návdavkem je zkopírován do příznaku CY.

Operace Pozice v registru A Příznak
7 6 5 4 3 2 1 0 CY
Výchozí stav Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 CY
RRC Bit 0 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

RAL

Další dvě instrukce berou v úvahu i obsah příznaku CY. RAL funguje stejně jako RLC, ale s jedním rozdílem – bit 7, který zleva vypadne, je zapsán do příznaku CY, a hodnota z CY je přesunuta do pozice 0 v registru A. Graficky to vypadá nějak takto:

Operace Pozice v registru A Příznak
7 6 5 4 3 2 1 0 CY
Výchozí stav Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 CY
RAL Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 CY Bit 7

RAR

RAR je obdoba předchozí funkce RAL, jen směr je opačný – bity se posouvají doprava, bit 0 jde do CY a „staré CY“ jde na pozici 7.

Operace Pozice v registru A Příznak
7 6 5 4 3 2 1 0 CY
Výchozí stav Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 CY
RAR CY Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Víc rotací procesor 8080 nemá.

Jaké mají tyto operace smysl? Když se nad tím zamyslíte, je to analogické jako u desítkové soustavy: když máte číslo (123) a posunete ho o jednu pozici doleva (a zprava doplníte nulou), dostanete jeho desetinásobek (1230). Když ho posunete doprava, dostanete celočíselný výsledek dělení deseti. U dvojkové soustavy platí totéž – posun doleva je totéž jako vynásobit dvěma, posun doprava je dělení dvěma.

Trochu tam hapruje to rotování kolem dokola, ale to lze obejít pomocí vhodného domaskování nebo tím, že si předem nastavíte příznak CY na požadovanou hodnotu.

Dají se použít ještě na spoustě dalších míst – ale to si ještě ukážeme.

STC, CMC a jak nastavit příznak CY?

Přiznám se, že jsem váhal, kam zařadit instrukce STC a CMC, a nakonec je zařadím sem. Instrukce STC nastaví CY na 1, instrukce CMC neguje jeho hodnotu. Pokud chcete CY nastavit na nulu, musíte buď udělat STC a CMC, nebo (pokud vám nevadí, že přijdete o hodnotu v příznacích S, Z, P) zkusit třeba CMP A – tato instrukce porovná registr A se sebou samotným. Výsledek je, nepřekvapivě, „hodnota se sobě rovná“, takže instrukce nastaví Z na 1 a S a CY nuluje.

Rotace 8080 – souhrn

Operace Pozice v registru A Příznak
7 6 5 4 3 2 1 0 CY
Výchozí stav Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 CY
RLC Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Bit 7 Bit 7
RRC Bit 0 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
RAL Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 CY Bit 7
RAR CY Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Líbil se vám článek? Podpořte autora na Patreonu
Příspěvek byl publikován v rubrice 8080. Můžete si uložit jeho odkaz mezi své oblíbené záložky.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *