8080 – první program

Napíšeme si první program. Nekecám, opravdu první program v assembleru pro procesor 8080!

Nebude to Hello world, bude to něco sofistikovanějšího. Sečteme dvě čísla. Třeba 18H a 23H. (Výsledek je 03BH, kdo nevěří, ať tam běží.) Nebojte se toho, že nezačínám od základů, že ještě žádnou instrukci neznáte (ne, znáte jednu, z minulé lekce víte o NOP) ani že neřeknu hned všechno (třeba zamlčím existenci „registru“ M). Jen si odskočíme, abyste viděli, jak se v assembleru pracuje, a už v příští lekci to budeme brát systematicky instrukci po instrukci…

Ale teď: Jak sečíst dvě čísla v assembleru? Asi už tušíte, že to nebude prosté jako napsat „18+23“. Procesor 8080 totiž nic takového jako „sečti dvě čísla, která ti sem napíšu“ neumí. Co umí?

Umí sečíst dvě čísla, to je v pořádku. K sečtení slouží instrukce ADD, se kterou se seznámíme v dalších lekcích. ADD má jeden parametr, a tím je jméno registru. Vzpomeňte si na kapitolu o architektuře 8080: máme k dispozici registry B, C, D, E, H, L a akumulátor A. Instrukce ADD má symbolický tvar „ADD r“ (kde „r“ je právě to jméno registru) a její funkce je následující: Vezme obsah registru A, přičte k němu obsah zadaného registru, a výsledek uloží zase do A. Nějak takhle:

Instrukce Funkce
ADD B A = A + B
ADD C A = A + C
ADD D A = A + D
ADD E A = A + E
ADD H A = A + H
ADD L A = A + L
ADD A A = A + A

Postup bude tedy následující: Do jednoho registru si uložíme první číslo, tedy 18H, do druhého registru druhé číslo (23H), a pak je pomocí instrukce ADD sečteme. Protože ADD vyžaduje, aby jeden ze sčítanců byl v registru A, ušetříme si práci tím, že jedno z čísel umístíme rovnou do A, druhé třeba do B.

Jak do registrů nahrajeme nějaké číslo? Použijeme k tomu instrukci MVI (Move Immediate). Tato instrukce má dva parametry – první je jméno registru, druhý je hodnota 0-255, tedy 1 bajt. Symbolicky zapsáno je to „MVI r, n8“ (n8 se označuje osmibitové číslo). Všimněte si, že pořadí parametrů je podobné jako ve vyšších jazycích, tedy vlevo je to, KAM se ukládá, vpravo CO se tam má uložit. V našem případě použijeme dvojici instrukcí „MVI A, 23H“ a „MVI B, 18H“.

Celý program bude vypadat takto:

Co se tam děje? Nejprve říkáme překladači, ať si nastaví adresu 0, od té adresy se budou ukládat instrukce do paměti. Pak je instrukce, která do registru A uloží hodnotu 23h, pak do registru B uložíme 18h, a pak vykonáme ADD B, což je, jak už víme, ekvivalent „A = A + B“.

Ukažme si ještě listing:

Instrukce MVI zabírá vždy dva bajty. První bajt je kód instrukce (3Eh = MVI A; 06h = MVI B), druhý bajt je hodnota, která se má do registru nahrát.

Tak, to by bylo. A teď otázka nejdůležitější: Bude to fungovat? Bude. V tuhle chvíli vám nezbývá nic jiného, než mi věřit. Anebo si to vyzkoušet. Buď použijte svůj oblíbený assembler, spusťte si kód na svém počítači (třeba PMI-80) – no a nebo využijte ASM80, kde si můžete kód napsat, přeložit a odladit v emulátoru, a to všechno přímo v prohlížeči (tedy, pokud máte aspoň trošku modernější prohlížeč)! V okénku, co je pod tímto textem, máte k dispozici editor, překladač i debugger, takže si můžete výše zmíněný kód vyzkoušet. Napište ho do levého editoru (on už tam je předvyplněný…) a kliknutím na COMPILE ho přeložíte. V pravém editoru se ukáže listing. Funkčnost můžete otestovat kliknutím na Emulator – levý editor zmizí a místo něj se objeví okno s výpisem paměti, s výpisem jednotlivých registrů a s tlačítky Single step, 50 steps, Animate a Stop. Po vstupu do emulátoru je PC nastaven na 0000, procesor je připraven na první instrukci. Kliknutím na Single step ji provedete. Všimněte si, že se v registru A objevilo 23 a kurzor se posunul na další instrukci. Opět klikněte na Single Step, v registru B se objeví 18, no a po dalším kliknutí na Single step se provede i ta sčítací instrukce. Takto si můžete krokovat svoje programy a dívat se, jestli dělají to, co dělat mají.

Náš program nic víc neudělá. Když si ho odkrokujete, dostanete výsledek v registru A a pak se nestane nic.

Ale co, Řím taky nepostavili za den!

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 *