Navigátorposledních 10 z diskuze |
Assembler 7 - Logické operace , násobení, dělení, rotaceDnes si naučíme pracovat s logickými operacemi AND, ORA, EOR a násobit, dělit hodnoty včetně rolování bitů. Logické operace - ANDPro vysvětlení logických operací zabrousíme do binárního zápisu, kterým Turboassembler na C64 nebo pro PC disponuje. LDA #$8E
Logický AND provede s bity následující : 1 a 1 = 1 LDA #%10001110 Výsledek operace naleznete na adrese $2000. Příkaz and můžeme používat ve všech těchto podobách syntaxu. AND #$xx Logické operace - ORAInstrukce ORA je logický součet bitů. Opět si vyzkoušíme instrukci na stejném příkladě jako u instrukce AND. LDA #$8E
Logický ORA provede s bity následující : 1 a 1 = 1 Opět zde platí, že v případech, kde používáme logické operace je lepší použít binární zápis dat. Syntaxy pro ORA jsou totožná jako pro AND, tudíž lze orovat jak hodnoty, tak hodnoty na adresach. Logické operace - EORInstrukce EOR neboli Exclusive OR je poslední z logických instrukcí. Opět stejný příklad. LDA #$8E
Logický EOR provede s bity následující : 1 a 1 = 0 A tak jako u AND, ci ORA i instrukce EOR má stejné možnosti zápisu a také ovlivňuje pouze akumulátor. Všechny tyto příkazy si vysvětlíme v příkladě na konci lekce .. a že to už bude opravdu pořádný příklad ... uvidíte :) Násobení - ASLNásobení je opět instrukce pracující pouze s akumulátorem. Instrukce ASL dokáže naši hodnotu vynásobit dvěma, kde osmý, tj. nejvyšší bit nastavuje příznak CARRY. V praxi to vypadá následovně. #$04 * 2 = #$08 LDA #$04 #$08 * 2 = #$10 LDA #$08 zkuste si ověřit, jaké hodnoty se nachází na aresách 2000 a 3000. Ale když už jsme načali tento díl bitovými operacemi, podívejme se na instrukci násobení ASL taktéž bitově. #$04 * 2 = #$08 LDA #%00110100
Zde jsme vynásobili hodnotu 52 . Všimněte si , že násobení je posun bitů do leva o 1 pozici ! Bit označený hvězdičkou se sice nenásobí, ale zde nastavuje příznak CARRY na 0. Další příklad vynásobí hodnotu dvěma a nastaví CARRY na 1.
Zde jsme došli k výsledku následovně: 176 * 2 - 256 = 96 , kde poslední bit nastavuje CARRY na 1 a tudíž je-li C nastaveno, víme, že násobení přeteklo přes osmý bit a je zapotřebí s tímto počítat. Procesor 6502 nám ovšem dovoluje násobit pouze hodnotou 2. Jak ale vynásobíme naši hodnotu například devíti ???
Na tomto příkladě je jasně vidět, že násobit např. 9x .. lze .. Syntaxy : ASL Dělení - LSRA Dělení není nic jiného jako násobení s tím rozdílem, že se bity při násobení posouvají směrem doprava a první bit ( zde první zprava) nastavuje CARRY. Příklad:
V tomto případě je po dělení Carry nastaveno na 0.
A k čemu jsme se dopočítali ?? Na adrese $2001 se po dělení osmi a následném vynásobení osmi nachází hodnota jiná než 150 a to 144 ... holt .. počítání bez desetinně čárky jde pěkně na nervy ... Syntaxy jsou stejné pro LSR jak pro instrukci ASL ROL - Rotate on left neboli rolujeme s bity do levaJak již název napovídá, instrukce ROL provádí rotaci bitů do leva s tím,že na první místo se nastavuje příznak CARRY. Je to vlastně podobné jako násobení jen s tím rozdílem, že zde se nenastavuje CARRY po přetečení na osmém bitu, ale dle nastaveného CARRY se nastavuje nebo nenastavuje bit první. Nejlépe je to ukázat na příkladě:
Vše se chová jako při násobení .. a k čemu je příkaz ROL vhodný ??? jednoduché ... nechceme-li přijít při násobení o "vypadlý" bit , který jde do carry, použijeme příkaz ROL a CARRY si opět nastavíme zpět. v příkladě: jsr $e544 ; vymaze obrazovku ROR - Rotate on right neboli rolujeme s bity do prava.Tak čtete-li naše díly opravdu postupně a pochopili jste je všechny, nevím, zda-li má smysl vůbec příkaz ROR rozebírat. Bude myslím stačit, když řeknu, že ROR a LSR se má k sobě jako ROL a ASL ... tudíž chcete-li s bity rolovat do prava (rorovat :), použijete právě příkaz ROR.
Jestliže jste opravdu pochopili vše , co jsme zatím probírali ve všech lekcích včetně této, mám tu pro vás velmi jednoduchý prográmek, kterým můžete prohlížet znakoou sadu počítače Commodore 64 pěkně převedenou do znaků... to vše pomocí všech příkazů, které jsme dnes probírali ... Zdrojový kód prográmku prohlizec_znakove_rom.asm stahujte kliknutím Po úspěšném přeassemblování a nahrátí do C64 nebo emulátoru spustíte prográmek příkazem SYS 4096 Pro ty, kteří chtějí videt pouze výsledný effekt ... stahujte zde ... ale prostudujte pořádně zdrojový kód výše .. opravdu to má cenu. |
Poslední recenzereakce na článkyTOP 10 HRY
|