Instrukce 6502 – logické a bitové operace

Blížíme se ke konci, zbývá doprobrat už jen pár instrukcí, konkrétně logické operace a manipulace s bity.

AND, ORA, EOR

Trojice instrukcí pro základní bitové operace – and, or, xor (exclusive or) se u procesoru 6502 jmenují AND, ORA a EOR. Provedou danou logickou operaci s obsahem registru A, výsledek uloží do A a nastaví příznaky N a Z.

Všechny tři instrukce mají poměrně bohaté možnosti adresování:

  • imm – přímý operand: AND #1 provede operaci A = A & 01
  • abs, zp – přímo zadaná adresa, buď plná, nebo v zero page
  • abx,aby – absolutní adresa, zvýšená o obsah registru X či Y
  • zpx – adresa v zero page, indexovaná přes registr X
  • izx, izy – nepřímo adresovaný operand (viz adresní módy)

Rotace – ROL, ROR

Instrukce ROL a ROR rotují bitově obsah registru A nebo paměti (ROL doleva, ROR doprava). Při rotaci se rotuje přes příznak C.

ROL 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, je zapsán do příznaku C, a původní hodnota z C je přesunuta do pozice 0 v registru A. ROR funguje stejně, jen obráceným směrem. Graficky to vypadá nějak takto:

Operace Pozice v operandu Příznak
7 6 5 4 3 2 1 0 C
Výchozí stav Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 C
ROL Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 C Bit 7
ROR C Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Instrukce ROL a ROR nabízejí opět několik adresních módů. Bez operandu pracuje s obsahem registru A. Pokud chcete pracovat s obsahem paměti, můžete buňku adresovat buď absolutně (abs, 2 bajty adresa), v nulové stránce (zp, 1 bajt), nebo indexovaně (abx nebo zpx).

Posuny – ASL a LSR

Posuny se od rotací liší v tom, že „vypadnuvší“ bit je přesunut do příznaku C, ale původní hodnota tohoto příznaku je zahozena a místo ní vstoupí zpět hodnota 0. ASL posouvá doleva, zprava doplní 0, LSR posouvá doprava, zleva doplní 0. Adresní módy jsou stejné jako u rotací – bez operandů se pracuje s registrem A, pokud chcete pracovat s pamětí, můžete použít abs, zp, abx nebo zpx.

Matematicky odpovídá posun doleva vynásobení hodnoty dvojkou, posun doprava pak celočíselnému dělení 2 (zbytek je v příznaku C). Grafické znázornění zde:

Operace Pozice v operandu Příznak
7 6 5 4 3 2 1 0 C
Výchozí stav Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 C
ASL Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 0 Bit 7
LSR 0 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Instrukce BIT

Instrukce BIT provede logický součin (AND) obsahu registru A a operandu, který je adresován buď absolutní adresou (abs), nebo nulovou stránkou (zp). Výsledek je zahozen, ale předtím je podle něj nastaven stav příznaku Z. Je-li tedy výsledek 0, je Z=1.

Instrukce BIT ještě nastaví příznaky N a V – zkopíruje do nich šestý a sedmý bit operandu (bit 7 do příznaku N, bit 6 do příznaku V).

Líbil se vám článek? Podpořte autora na Patreonu
Příspěvek byl publikován v rubrice 6502. Můžete si uložit jeho odkaz mezi své oblíbené záložky.

3 komentáře u Instrukce 6502 – logické a bitové operace

  1. Martin Bórik napsal:

    Tak, ako som si pri predošlom článku ťukal na čelo, že ako musí chýbať inkrement a dekrement akumulátora, tak teraz ma nahlodala inštrukcia BIT, ktorá funguje ako x86 TEST a ktorá mi na Z80 toľkokrát chýbala! 😉

Napsat komentář

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