P Ř E D M L U V A ------------------- Stalo se vám to taky? Tu jste si koupili computer a časem zjišťujete, že vlastníte zařízení na zpracování dat. A tím začíná zlobení. S programem BASIC je vám to jasné, ale programy jsou pomalé. Odborný tisk však mluví o pojmech jako Hexmonitor, strojový jazyk, assembler,bity a byty. Jedno je jasné. Lze se dovědět o těchto problémech víc, než uvádí výrobce i návod k obsluze. Konečně se též chcete dovědět více o vnitřní činnosti vašeho počítače. Ve vaší touze po vědění zjistíte, že existují odborné knihy o počítači, avšak bohužel může jen obeznámená osoba něco provádět s těmito zmatenými kolonkami Hexadecimálních čísel, které údajně představují nějaké adresy a kódy. A tu buď ztrácíte potěšení na věci nebo si začínáte zoufat. Aby k tomu nedošlo má zajistit tento kurs. Krok za krokem vás uvede tento kurs do vnitřního života počítače, abyste nakonec mohli zapisovat vlastní programy. Zjistíte též, že vaše strojové programy probíhají mnohem rychleji, než programy BASIC. A co je při omezené kapacitě paměti vašeho počítače zvlášť důležité, že stejné programy často zaberou jen zlomek místa v paměti. Poznáte, že "vnitřní cestičky" vašeho domácího počítače nejsou tak neproniknutelné a spletité jak jste se stále domnívali. A tak náhle můžete mnohem nevázáněji rozvíjet vaši tvořivost jako ve vyšších jazycích. Naším cílem bylo, poskytnout vám co nejsrozumitelnější vstup do strojového programování. Avšak i profesionál si zde má přijít na své. K tomuto kursu patří též "učební software" s moduly : Kalkulátor, Hexmonitor, Line-assembler, Disassembler a Tracer s jejichž pomocí si můžete hned na příkladech které jsou v knížce uvedeny vyzkoušet na počítači jak pracují. Neučíte se pouze "šedou teorii", ale můžete všechno hned prakticky vyzkoušet. "Učební program" obsahuje užitečné a důležité nástroje pro váš odborný růst strojového programátora. Profesionálovi se tím dává k dispozici užitečná pomůcka pro jeho práci. Příliš speciální problémy jsme vynechali. Zde se mají předat pouze nutné základy a technické informace o tomto počínání. Obsáhlý dodatek vám poskytne mnoho informací o počítači a o CPU Z-80 a tak vám později poslouží jako výborná příručka, obzvláště nutné je se odvolávat na přiloženou referenční kartu. Doufáme, že vás objevitelská cesta vaším počítačem potěší. Až na této cestě k profesionálovi v programování mikropočítačů, budete moci počítač používat mnohem všestraněji - náhle budete schopen řešit úlohy, které nebylo možno zvládnout pouhým BASICem. Poznáte nejen že jste se něco naučili, ale že se konečně můžete zůžastnit hovoru, když odborníci se budou bavit o ROM listingu, registrech, assembler programech a podobně. str.ii D Ů L E Ž I T Ý P O K Y N ----------------------------- MZ-LEARN (učitel) je původní chráněný program RVS DATENTECHNIK a je prodáván s podmínkou, že bude používán kupujícím výhradně na MZ-Computer, že žádná jeho část nesmí být kopírována nebo nahrávána do jiných počítačů ani předávána dále. Žádná část této knihy nesmí být bez předchozího svolení vydavatele elektronicky, mechanicky nebo fotokopiemi či páskovým záznamem rozmnožována nebo přenášena. Porušení tohoto ustanovení bude trestně a civilněprávně stíháno. MZ-LEARN byl sestaven za největší možné pečlivosti a přezkoušen. RVS DATENTECHNIK neposkytuje záruku jak ve vztahu na tuto knihu, tak na v ní uvedený SOFTWARE, jeho kvalitu, proveditelnost nebo použitelnost pro určitý účel.RVS DATENTECHNIK v žádném případě neručí za přímo, či nepřímo způsobené škody, které vycházejí buď z neodborného zacházení nebo z jakychkoliv chyb na software. Změny které slouží technickému pokroku jsou vyhrazeny. Štastnou cestu za poznánim a příjemné bezesné noci !!! Na tomto místě bych chtěl poděkovat za překlad orig. manuálu Milanu Bůbelovi a dále za pomoc při psaní tohoto českého překladu Mirkovi Kolomazníkovi a Antonínu Beranovi Havlíček Josef. ZO.087 Svazarm, Praha 10, Tolstého 16 Manuál nebyl redigován, proto zašlete své připomínky na výše uvedenou adresu do listopadu 1988. Děkuji. str.1 O B S A H 1. Systémy čísel: 1 a 1 je 10 .............................. 1 1.1 Nahrání a start Learn-programu ...................... 1 1.2 Kalkulátor .......................................... 2 1.3 Systémy čísel ....................................... 8 1.4 Bit, Byte a K ....................................... 13 1.5 Dvojková aritmetika ................................. 15 1.6 Logika pomocí AND, OR, NOT, XOR ..................... 18 2. Prostor adresy: Paměť a jiné věci ....................... 23 2.1 Adresy, PEEK a POKE ................................. 24 2.2 RAM, ROM a Port ..................................... 28 2.3 Plán pamětí ......................................... 29 3. Kódy: Co všechno obsahuje paměť ......................... 33 3.1 Texty: Kód ASCII .................................... 33 3.2 Čísla, texty a program BASIC ........................ 39 3.3 Strojový program: Op-kódy a dvojková čísla .......... 41 4. Strojový jazyk: První přehled ........................... 43 4.1 CPU: Srdce celku .................................... 43 4.2 Jak vypadají strojové programy? ..................... 52 4.3 Zadávání a test strojových programů ................ 54 4.4 Kterým povelům rozumí CPU ? ......................... 59 4.5 Způsoby adresování: Odkud bere CPU data ? ........... 62 5. Povelová věta: Co všechno umí CPU ....................... 67 5.1 Skokové povely ...................................... 68 5.2 Nahrávání a ukládání ................................ 79 5.3 Aritmetické povely .................................. 91 5.4 Logické povely ......................................104 5.5 Porovnávací povely ..................................109 5.6 Posouvací povely bitů ...............................118 5.7 Jiné povely .........................................124 6. Použítí: Příklady programů ..............................127 6.1 Computer jako klavír ................................127 6.2 Klíčování ...........................................130 6.3 Měření času .........................................131 7. Profesionální programování: Assembler a jiné věci ...................................135 7.1 Assembler ...........................................135 7.2 Debugger ............................................139 7.3 Systémové znalosti a soubory podprogramů ............139 7.4 Programovací technika ...............................140 str.2 D O D A T E K A. Kódování: Značkový kód, Tokeny, Znázornění čísel ........................................145 A.1 Značkový kód ........................................145 A.2 Znázornění čísel ....................................147 B. CPU: Model programování, Mnemonics, Flagy Druhy adresování ........................................153 B.1 Model programování Z-80 CPU .........................153 B.2 Mnemonics ...........................................156 B.3 Povely ovlivňující Flagy ............................158 B.4 Druhy adresování ....................................159 C. Povelová věta: Tabulky ..................................161 D. Learn-Program: Návod k obsluze ..........................185 D.1 Nahrání a start .....................................185 D.2 Obsluha .............................................186 E. Plán ukládání, podprogramy ..............................197 E.1 Plán ukládání .......................................197 E.2 Podprogramy z ROM ...................................206 E.3 Důležitá místa paměti ROM ...........................208 F. Kazetový záznam: Pokyny k obsluze .......................207 str.3 KAPITOLA 1 Systémy číslic: 1 a 1 je 10 V této kapitole jsou některá předběžná cvičení, která můžete klidně vynechat jestliže již znáte různé systémy číslic (dvojkový, šestnáctkový), počítání s dvojkovými čísly a logickou působnost operací (AND, OR, NOT). V každém případě musíte přečíst kapitolu 1.1 ( Nahrávání a start učebního programu ) a krátce se podívejte na kapitolu 1.2 (Kalkulátor), abyste poznali kalkulátor z učebního programu. 1.1 Zavádění a start učebního programu. Chcete-li pracovat se souborem učebního programu, po zapnutí MZ 800 vložte učební MZ kazetu a zvolte z nabízeného menu opci C (kasetu). Startujte nahrávání kazety. Po hlášení IPL is loading MZ-LEARN se MZ-LEARN zavádí. Samozřejmě můžete program LEARN zavádět taky povelem monitoru. ---------------------------------- | # #| ------ kalkulátor |--------------------------------| |0000 : . 00 | |0001 : . 00 | |0002 : . 00 | |0003 : . 00 | |0004 : . 00 | |0005 : . 00 | |0006 : . 00 | |0007 : . 00 | |--------------------------------| |0000 : NOP | | | | | | | | | ---------------------------------- Nedivte se, jestliže se na obrazovce objeví jiné znaky. Zobrazené hodnoty závisí na tom, co právě se náhodou nachází v paměti počítače. V následujícím věnujeme pozornost pouze třem nejhořejším okénkům kalkulátoru. Jestliže běžící kursor náhodným stiskem klávesy putoval do některého z jiných okének, stiskněte, prosím, znovu nebo dvakrát klávesu , dokud se cursor nevrátí opět do horního okénka. Měla-li vypadat sestava na obrazovce zcela jinak, pak jste patrně omylem stiskli dvakrát klávesu . Opětným stiskem této klávesy se znovu objeví správný obraz. str.4 1.2 Kalkulátor Kalkulátor je částí učebního programu. Jedná se zde o zcela zvláštní kapesní kalkulačku. Tato disponuje funkcemi, které jsou zvlášť pro programování ve strojovém jazyce užitečné. Čísla se mohou zadávat šestnáctkově,desítkově nebo dvojkově a znázorňovat. Vedle čtyřech základních početních úkonů umí calkulatér též logické operace AND, OR, NOT, XOR a různé jiné věci užitečné pro strojové programování. Avšak je počítáno vždy pouze s celými čísly v rozsahu 0...65535. To však je taky přesně ten rozsah, který potřebujeme pro programování ve strojovém jazyce. Počítání s kalkulátorem Kalkulátor užívá programovací jazyk FORTH nebo některé kalkulačky tzv. obrácenou polskou notaci (UPN) Podle této notace se zadávají napřed čísla, mezi nimiž se má provést oerace, a pak teprve vlastní operace. Chcete-li např. sečíst dvě čísla, zadejte napřed první číslo, pak druhé a konečně stiskněte klávesu (+). Příklad: Sčítání -------------------------- indikace | # 0| -------------------------- vstup 70 -------------------------- indikace | 70 # 1| -------------------------- Po stisku klávesy je posunuto číslo směrem doleva. Hodnota 1 vpravo v okénku značí, že bylo do vstupu vloženo číslo. vstup 80 ------------------------- indikace | 80 # 2| ------------------------- Teď jste zadal dvě čísla vstup <+> ------------------------- indikace | 150 # 1| ------------------------- Součet byl proveden. Výsledek 70+80 je znázorněn indikací. Právě tak fungují i ostatní početní úkony: str.5 Odečítání vstup indikace poznámka ------------------------ | # 0| paměť vymazat |----------------------| 200 | 200 # 1| |----------------------| 150 | 150 # 2| |----------------------| <-> | 50 # 1| 200-150=50 ------------------------ Násobení vstup indikace poznámka ----------------------- | # 0| paměť vymazat |---------------------| 3 | 3 # 1| |---------------------| 15 | 15 # 2| |---------------------| <*> | 45 # 1| 3x15=45 ----------------------- Dělení vstup indikace poznámka ---------------------- | # 0| vymazat paměť |--------------------| 90 | 90 # 1| |--------------------| 9 | 9 # 2| |--------------------| | 10 # 1| 90/9=10 ---------------------- Aby se prováděla obrácená polská notace rozumně, pracuje kalkulátor interně způsobem tzv. stohování (anglicky stack ), t.j. způsob se kterým se setkáte při strojovém programování ještě častěji. Zadáte-li číslo, je toto napřed vloženo na číslicový stoh. Příklad: vstup indikace stack ---------------------- | # 0| |--------------------| 5 | 5 # 1| 5 |--------------------| 6 | 6 # 2| 5, 6 |--------------------| 7 | 7 # 3| 5, 6, 7 |--------------------| 8 | 8 # 4| 5, 6, 7, 8 |--------------------| str.6 Teď je též jasné, co stojí v indikaci zcela vpravo: Počet čísel, které jsou uloženy na stohu (stack). Když po vložení čísel provedete operaci příkladem <+>, jsou odebírány obě horní čísla se stohu, sečteny a výsledek odložen na stoh. Příklad: vstup indikace stack poznámka ---------------------- | 8 # 4| 5, 6, 7, 8 |--------------------| <+> | 15 # 3| 5, 6, 15 7+8=15 |--------------------| <*> | 90 # 2| 5, 90 6*15=90 |--------------------| <+> | 95 # 1| 95 5+90=95 |--------------------| Stack pracuje jako tzv. paměť Last-in-First-out . Poslední odložená hodnota se odebírá opět jako první ze stohu. Tento princip je používán v mnoha programech nebo programovacích jazycích. Můžete u kalkulátoru přirozeně také smazat číslo ze stohu. K tomu slouží klávesa <šipka dolů>, kterou se maže nejhořejší číslo. Příklad: vstup indikace stack ---------------------- | # 0| |--------------------| 5 | 5 # 1| 5 |--------------------| 6 | 6 # 2| 5, 6 |--------------------| <šipka dolů> | 5 # 1| 5 ---------------------- Pomocí lze smazat celý stoh najednou. Nejhořejší číslo stohu můžete taky zdvojit jednoduchým stlačením klávesy . Příklad: vstup indikace stack ---------------------- | # 0| |--------------------| 5 | 5 # 1| 5 |--------------------| | 5 # 2| 5, 5 |--------------------| 6 | 6 # 3| 5, 5, 6 |--------------------| | 6 # 4| 5, 5, 6, 6 ---------------------- Kalkulátor má ještě podstatně více funkcí, které poznáte v dalším. Shrnutí ve zkráceném návodu najdete v dodatku D. str.7 1.3 Systémy čísel Než se budeme zabývat dvojkovými nebo šestnáctkovými čísly, vezmeme si pod lupu dobrý starý desítkový systém. Decimální čísla v desítkové soustavě čísel se skládají z cifer 0 1 2 3 4 5 6 7 8 9 tak, že jednotlivá místa vícemístného čísla dostávají rozdílné řádové hodnoty např. 1985 znamená: 1 tisícovka + 9stovek + 8desítek + 5jednotek 1 * 1000 + 9*100 + 8*10 + 5*1 První místo (zprava doleva) udává v desítkové soustavě jednotky, druhé desítky, třetí stovky atd. Prvních pět míst desítkové soustavy mají následující hodnoty: místo 5 4 3 2 1 hodnota 10000 1000 100 10 1 Jak patrno, vyplývá hodnota dalšího místa vždy z násobku desíti. Dvojková čísla Binární soustava čísel (dvojkový systém pracuje na principu jako desítková soustava, pouze s tím rozdílem, že včechna čísla jsou skládána z cifer 0a1. Hodnota místa v dvojkovém systému je vždy právě dvojnásobkem předcházejícího místa. Prvních pět míst (zprava doleva) v binární soustavě mají následující hodnoty: místo 5 4 3 2 1 hodnota 16 8 4 2 1 dvojkově 1101 znamená* 1 osmička+1 čtyřka+0 dvojka+1 jednička 1 * 8 + 1 * 4 + 0 * 2 + 1 Tedy desítkově 8+4+0+1=13. Zkuste to spočítat dvojkově. Nula je 0, jedna je 1. Teď přistupuje nové místo. Dvě je 10 (jedna dvojka a nula jedničky). Tři je 11 (jedna dvojka a jedna jednička). Teď už se musí přidat další místo. Čtyři je 100 (jedna čtyřka, nula dvojky a nula jedničky). Pět je pak 101 a šest je 110 atd. Čísla 0 až 10 se tvoří následovně: 0 0 1 1 2 10 3 11 4 100 5 101 6 110 7 111 8 1000 9 1001 10 1010 str.8 Větší čísla dávají v dvojkové soustavě docela pěkně dlouhé tasemnice. Čtyř-místné desítkové číslo 8193 v dvojkové soustavě má již 14 míst a vypadá takto 10000000000001 Naštěstí se nemusíte starat o princip dvojkových čísel do desítkových a obráceně, protože od toho máme kalkulátor. Dvojková čísla pomocí kalkulátoru --------------------------------- Když při počítání s kalkulátorem stisknete klávesu přepojuje se na číselné vyjádření v binární soustavě. Stisknutím klávesy lze opět přepojit zpět po vyjádření v desítkové soustavě. Příklad: vstup indikace poznámka ---------------------- | # 0| vymazat stack |--------------------| 9 | 9 # 1| |--------------------| B | 1001B # 1| dvojkově 9 |--------------------| 110 | 110B # 2| |--------------------| D | 6 # 2| desítkově 110 |--------------------| <+> | 15 # 1| 9+6=15 |--------------------| B | 1111B # 1| dvojkově 15 ---------------------- B v indikaci znamená dvojkové vyčíslení. Chcete-li zadat číslo, musíte napřed aktivovat způsob vyčíslení. Vidíte, že pomocí kalkulátoru neexistují hlavolamy s dvojkovými čísly. Ostatně kalkulátor počítá vnitřně vždy s 16ti místnými dvojkovými čísly. Nejvyšší číslo je proto právě 1111111111111111 tedy desítkově 65535. Šestnáctková soustava čísel Pro počítčové specialisty je šestnáctková soustava zvlášť zajímavá, protože se tím zkracují dlouhé řady dvojkových čísel. V šestnáctkové soustavě se sdružují totiž 4 místa dvojková v v jedno šestnáctkové místo. Přitom se však vedle číslic 0 až 9 používají ješt písmena A až F aby bylo možno vyjádřit 16 možných hodnot binárních čtyřčíslí. str.9 dvojkový sled čísel šestnáctkové číslo 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 A 1011 B 1100 C 1101 D 1110 E 1111 F Tedy když chceme přeměnit dvojkové číslo na šestnáctkové, bereme zprava do leva vždy po 4 cifrách a měníme tyto na příslušné šestnáctkové číslo. Příklad: dvojkové číslo 10100101111 rozklad na čtveřice 0101 0010 1111 šestnáctkové číslo 5 2 F Jinak je šestnáctkový systém čísel jako každý jiný. 16 číslic je : 0 1 2 3 4 5 6 7 8 9 A B C D E F cifry A....F mají hodnotu 10....15 Čísla se znázorňují sledem cifer, přičemž hodnoty jednotlivých míst v šestnáctkové soustavě mají hodnoty: místo : 4 3 2 1 hodnota : 4096 256 16 1 Hodnotu čísla obdržíme když hodnoty čísel znásobíme hodnotami místa. Příklad: 1AF2 znamená : 1*4096 + 10*256 + 15*16 + 2*1 (=A) (=F) tedy desítkově 4096 + 2560 + 240 + 2 = 6898 Šestnáctková čísla pomocí kalkulátoru ------------------------------------- Klávesou se mění kalkulátor na šestnáctkový provozní režim. str.10 Příklad: vstup indikace poznámka ---------------------- | 0| stack smazat |--------------------| 15 | 15 # 1| |--------------------| | FH # 1| vyjádření v 16.sous. |--------------------| 1F0 | 1F0H # 2| |--------------------| | 496 # 2| desít. vyjádření 1F0 |--------------------| <+> | 511 # 1| 15 + 496 = 511 |--------------------| | 1FFH # 1| šestn. vyjádření 511 |--------------------| | 111111111B # 1| dvojkové vyj. 511 ---------------------- 1.4 Bit, Byte a K ----------------- V tomto odstavci se jedná o množství informací a místa v paměti. Současně se vysvětlují některé zkratky. Bit je informační jednotka kterou se vyanačuje právě množství informace, která je obsažena v jednoduchém rozhodnutí ANO/NE jako např. prší/neprší. V počítači je Bit jedním paměťovým prvkem, který může zaujmout stavy "0" nebo "1" takže lze v něm uchovat výsledek jednoduchého rozhodnutí ano/ne. 0=neprší, 1=prší V jednom Bitu lze uchovat rovněž jedno jednotlivé místo dvojkového čísla. Byte jako Byte označujeme skupinu 8Bitů. U 8mi bitového počítače tak jako i u MZ je každá paměťová buňka o 8mi Bitech, tedy jeden Byte. Do jednoho Byte můžeme tedy právě umístit osmimístné dvojkové číslo. Nejvyšší číslo ve dvojkové soustavě které lze ještě umístit v jednom Byte je desítkově 255 (=dvojkově 11111111) 8Bitů jednoho Bytu se normálně znamená zprava doleva číslicemi 0 až 7. MSB LSB B7 B6 B5 B4 B3 B2 B1 B0 Bit 7 (B7) označuje se též jako MSB (Most Signifikant Bit česky Bit s nejvyšší hodnotou). Bit 0 jako LSB (Least Significant Bit česky Bit s nejnižší hodnotou). Aby bylo možno ukládat vyšší čísla než 255, je zapotřebí více než jeden Byte. Použijeme-li např. jako v kalkulátoru 16Bitů, tedy 2 Byte, pak lze ukládat i vyšší čísla. Rozsah hodnot 16 Bitového čísla (2 Byty) : 0.....65535 (dvojkově: 0000000000000000 až 1111111111 111111) 16 ti Bitová čísla hrají v následujícím důležitou roli. K ukládání těchto čísel je tedy zapotřebí 2 Bytů. Byte, který obsahuje 8 levých míst nazýváme H-Bytem (High Byte), Byte, který obsahuje 8 pravých míst nazýváme L-Bytem (Low Byte). str.11 K protože se u počítačů děje konají dvojkově, byla pro 1024 zavedena zkratka K, tak jako jinak 1000 se zkracuje K (kilo). K je nazýváno též "kilo". 1kByte (někdy též označováno 1K) je tedy 1024 Bytů, 1KBit je 1024 Bitů. 1.5 Dvojková aritmetika ----------------------- Počítání s dvojkovými čísly funguje vlastně právě tak jako při počítání s čísly desítkovými. Jednotlivé početní operace se dvojkově provádí dokonce jednodušeji, protože se pracuje pouze s nulami a jedničkami. S kalkulátorem můžete provádět všechny čtyři základní početní operace s dvojkovými čísly. Zkuste následující početní příklady na kalkulátoru. Sečítání : Při sčítání dvou čísel se sčítá zprava doleva po místech 0+0 je pak 0, 0+1 je pak 1, 1+0 je pak 1, 1+1 je pak 0 a jedna 1 jako přenos na další místo. Příklad: 11011001 + 10001001 ----------- 1 11 1 přenos 101100010 výsledek Odečítámí : Právě tak se děje odečítání, jen s tím, že se z dalšího místa "vypůjčuje" 1-0 je 1, 1-1 je 0, 0-0 je 0, 0-1 je 1 přičemž se vypůjčuje 1 z dalšího místa. Příklad: 11101010 - 01011001 ----------- 1 1 přenos (vypůjčení) 10010001 výsledek Násobení : Násobení dvojkových čísel je podstatně jednodušší naž násobení v desítkové soustavě, protože dvojková malá násobilka pozůstává pouze z 0*0 je 0, 0*1 je 0, 1*0 je 0, 1*1 je 1. Jinak jako obvykle se násobí postupně místa a následně se sčítá. Příklad: 10010110 * 101 ---------- 10010110 (*1) + 00000000 (*0) + 10010110 (*1) ----------- 1011101110 str.12 Dělení : Stejně jednoduše jako u dvojkového násobení se provádí dvojkové dělení. Musí se pouze zkusit zda dělitel je 1 krát obsažen ve zbytku dělence či ne, a pak jej odečíst. Příklad: 11101 : 11 = 1001 zbytek 10 - 11 * 1 (jde) --------------- 01 - 11 * 0 (nejde) --------------- 010 11 * 0 (nejde) --------------- 0101 11 * 1 (jde) --------------- 10 (zbytek) Přesuny ------- Právě tak jako v desítkové soustavě se provádí zvlášť jednoduše násobení a dělení deseti, je ve dvojkové soustavě zvlášť jednoduché násobení a dělení dvěma (dvojkově 10). Příklad: násobení dvěma se pouze přiřazuje 0 O1010 * 10 = 10100 (přesun doleva) Tyto operace nejsou ničím jiným než přesuny o jedno místo, jak je zřetelně patrno. Když se vpředu doplní nuly. Protože se často používají, existují ve strojovém jazyku vlastní příkazy. Taky na kalkulátoru existují tyto operace a aktivují se klávesami a . 1.6 Logika pomocí AND, OR, NOT, XOR ----------------------------------- Vedle aritmetických operací hrají důležitou roli v počítači tzv. logické operace. Používají se příkladně k tomu, aby se vyhodnotily porovnání a formulovaly složité podmínky, jak je znáte z jazyka BASIC. Příklad: IF A < 3 AND A > 0 THEN IF A = 0 OR A = 1 THEN Tyto operace se provádějí vždy mezi jednotlivými Bity. Jestliže jsou s těmito operacemi spojovány vícemístná dvojková čísla, pak se postupuje po místech. AND Operace AND (a) je definována následovně: 0 AND 0 dává 0 0 AND 1 dává 0 1 AND 0 dává 0 1 AND 1 dává 0 Výsledek je tedy právě tehdy 1, když první a druhé vstupní číslo má hodnotu 1. str.13 OR Operace OR (nebo) je definována následovně: 0 OR 0 dává 0 0 OR 1 dává 1 1 OR 0 dává 1 1 OR 1 dává 1 Výsledek je tedy 1, když první nebo druhé vstupní číslo (nebo obě) mají hodnotu 1. NOT Operace NOT (ne) invetuje: NOT 0 dává 1 NOT 1 dává 0 Výsledek je tedy 1, když výchozí hodnota nebyla 1. XOR Operace XOR (exclusive OR, česky výlučně nebo) je definována následovně: 0 XOR 0 dává 0 0 XOR 1 dává 1 1 XOR 0 dává 1 1 XOR 1 dává 0 Výsledek je tedy 1, když buď první nebo druhé vstuní číslo (ale nikoli obě) má hodnotu 1. Logické operace s kalkulátorem ------------------------------ Právě tak, jako u aritmetických operací lze provádět na kalkulátoru logické operace. Kalkulátor provede tyto operace ve dvojkové soustavě místo za místem. Klávesy pro AND, OR, NOT, XOR jsou značeny pouze začátečním písmenem , , , . Příklad: vstup indikace poznámka ----------------------- | 0| stack smazat |---------------------| | B 0| vyčištění dvojkově |---------------------| 11 | 11B 1| |---------------------| 10 | 10B 2| |---------------------| | 10B 1| 11 AND 10 = 10 |---------------------| 1001 | 1001B 2| |---------------------| | 1011B 1| 10 OR 1001 = 1011 |---------------------| | 1111111111110100B 1| 1111111111110100 ----------------------- Vyzkoušejte si ještě logické operace na kalkulátoru než budete pokračovat v dalších kapitolách. str.14 KAPITOLA 2 Prostor adresy: Paměť a ostatní věci Abychom vám předem znázornili přehled vnitřních pochodů počítače, dáváme následující náčrtek. --------------- | C P U | | | |Mikroprocesor| --------------- | | | | | | ----------- | ----------- | | | | | | -------------------------------------------------- | | | Prostor adresy | | -------------- ----------------- ----------- | | | | | | | | | | | R A M | | R O M | | P O R T | | | | paměť | | paměť | | spojení | | | | zapisovací | | pouze čtecí | | s peri- | | | | a čtecí | | | | feriemi | | | | | | | | | | | -------------- ----------------- ----------- | | | -------------------------------------------------- | | ---------------- | | ----------------- | | | V n ě j š e k | | | | indikase,kláv.| | tiskárna atd. | | | ----------------- Jak znázorňuje náčrt jsou v prostoru adresy RAM, ROM a PORT. Co s tím souvisí je látkou této kapitoly. O CPU, který provádí v počítači všechny operace a je ve spojení s RAM, ROM a PORTy bude pojednáno podrobněji v kapitole č.4. str.15 2.1 Adresy, PEEK a POKE ----------------------- Prostor adresy počítače je sestaven z jednotlivých paměťových buněk, které jsou v pořadí číslovány. Číslo paměťové buňky nazýváme adresa. To je podobně jako u čísel domů v ulici s rozdílem, že (ve strojovém jazyce programování) se nejčastěji udává adresa v šestnáctkových číslech. Tedy : 0000 paměťová buňka 0 0001 - " - 1 0002 - " - 2 . . 123A - " - 4666 . . FFFE - " - 65534 FFFF - " - 65535 Právě tak, jak pod různými čísly domů jsou rozdílné domy, jsou pod adresami rozdílné věci. Ve většině případů jsou to však paměťové buňky. Do paměťových buněk se vejde málo, totiž u 8mi Bitového počítače jeden jediný Byte (viz. odst. 1.4). Do něho lze např. uložit čísla mezi 0 a 255. PEEK, POKE Aby se jednotlivé buňky prostoru adresy daly přímo aktivovat, jsou v BASICu povely PEEK a POKE. Příkazem POKE lze do jedné paměťové buňky něco připsat, pomocí PEEK přečíst, co je v buňce uloženo. Při POKE udejte adresu a žádaný obsah paměťové buňky způsobem: POKE , Při PEEK udejte adresu a odbržíte jako výsledek obsah paměťové buňky: A=PEEK Když pracujete s BASIC, můžete používat PEEK a POKE k aktivaci jednotlivých paměťových buněk. K tomu teď používáme vpodstatě kompletní pomůcka: šestnáctkový monitor ze souboru Learn (učebního). Nahrajte učební (Learn) programovací soubor, v případě, že jste tak ještě neučinili a pojíždějte cursorem pomocí klávesy do prostředního okénka monitoru. Uvidíte následující obrázek: ------------------------------------ | 0 | ------ Kalkulátor |----------------------------------| |8000 : . 00 # | ------ Hexmonitor |8001 : . 00 | |8002 : . 00 | |8003 : . 00 | |8004 : . 00 | |8005 : . 00 | |8006 : . 00 | |8007 : . 00 | |----------------------------------| |8000 : NOP | ------------------------------------ str.16 Okénko č. 2 vypadá asi takto : ----------------------------------- |8000 : . 00 # | |8001 : . 00 | |8002 : . 00 | |8003 : . 00 | |8004 : . 00 | |8005 : . 00 | |8006 : . 00 | |8007 : . 00 | ----------------------------------- | | | adresa obsah obsah šestnáctkově ASCII šestnáctkově V kolonce 1 jsou adresy paměťových buněk šestnáctkově 8000...8007, v kolonce 2 je ten který obsah pamětové buňky kodovaný znaky ASC II. (vysvětlení následuje v kapitole 3). Kolonka 3 ukazuje číselnou hodnotu, která je v buňce uložena v šestnáctkové souustavě. Místo nul může obsahovat i jiné hodnoty. Toto závisí na náhodě. Když stiskete <šipka vlevo> můzete zkontrolovat adresu nad aktuální adresou a pomocí <šipky vpravo> dostanete se i dolů. Klávesami <šipka dolů> a <šipka nahoru> můžete po krocích listovat po 8mi adresách dopředu i dozadu. V případě, že by trvalo moc dlouho vyhledat žádanou adresu, stiskněte klávesu . Tím můžete předvolit novou adresu (Memory). ----------------------------------- |8000 : . 00 | |A = # | |8002 : . 00 | |8003 : . 00 | |8004 : . 00 | |8005 : . 00 | |8006 : . 00 | |8007 : . 00 | ----------------------------------- Po vstupu adresy s následujícím (např. 8900 ) uvidíte obsah paměti nového rozsahu. Jestliže vám 8 Bytů, které současně můžete vidět na monitoru nebude stačit, stlačte jednoduše . Tím se dostanete do způsobu znázornění Dump . --------------------------------------------------- |8000 : 00 00 00 00 00 00 00 00 . . . . . . . . | |8008 : 00 00 00 00 00 00 00 00 . . . . . . . . | |8010 : 00 00 00 00 00 00 00 00 . . . . . . . . | |8018 : 00 00 00 00 00 00 00 00 . . . . . . . . | |8020 : 00 00 00 00 00 00 00 00 . . . . . . . . | |8028 : 00 00 00 00 00 00 00 00 . . . . . . . . | |8030 : 00 00 00 00 00 00 00 00 . . . . . . . . | |8038 : 00 00 00 00 00 00 00 00 . . . . . . . . | --------------------------------------------------- | | | | | | adresa obsah obsah hexadecimálně hexadecimálně ASCII str.17 Dump není nic jiného, než stlačenou variantou, znázornění na Hexamonitoru. Opakovaným stlačením klávesy dostáváme opět původní znázornění. To by pro začátek stačilo. Další funkce učebního programu (Learn) poznáte později, souhrnný návod k obsluze najdete v dodatku D. Pomocí Hexmonitoru můžete přímo přehlíž celý prostor adres počítače. Zvolte klávesu v znázornění na Hexamonitoru adresu A=8000. Když dáte na vstup číslo 12, také hodnota (šestnáctkově) se zapíše přímo do paměťové buňky s adresou 8000. Avšak pozor: proměňujte zatím pouze paměťové buňky, které vám označíme, jinak byste mohli počítač docela rozházet. 2.2 RAM, ROM a Port ------------------- RAM Paměťová buňka s adresou 8000 (šestnáctkově), kterou jsme se právě zabývali, je paměťová buňka RAMu (Random Access Memory) paměti psací a čtecí. To znamená: můžete něco vepsat a později zase vyjmout. Informace zůstává tak dlouho v ní uložena, dokud nevepíšete něco nového. Než se budeme zabývat rozdílnými rozsahy RAMu, chceme vám ukázat, které podivné paměťové buňky se skrývají za jednotlivými adresami. ROM Zvolte si pomocí adresu 0100 a zkuste něco vepsat. Zjistíte, že paměťová buňka 100 (šestnáctkově), ať děláte cokoli, podrží si vždy hodnotu 00. Můžete dokonce vypnout a zapnout počítač. Zůstává v ní stále 00. Vysvětlení je následující: paměťová buňka 0100 je buňka ROMu. ( Read Only Memory). ROM je pouze paměť čtecí, t.j. při výrobě ROMu se jednou pro vždy vloží určité programy a data, které nelze již změnit. To slouží např. k tomu, že váš počítač nezapomene jak se nabíjejí programy z kazety. Jeho celé "know how" o nabíjení z kazety je totiž uloženo v paměti ROM. Port Zvolte adresu D303 a tam dejte hodnotu 55. Pozorujte obrazovku. Nedivte se, když dole uprostřed obrazovky bude značka (černé kolečko). Právě jste ji vepsali přímo do paměti obrazovkové. Paměťová buňka D303 (šestnáctková) má "drát směrem ven", totiž k obrazovce počítače. Obsah obrazovkové paměti je okamžitě vydáván pomocí speciálního Videochipu. Takové paměťové buňky s drátem ven nazýváme Porty. Slouží buď k tomu, aby něco vydávali, např. na obrazovku, do tiskárny, na magnetopáskovou kazetu, nebo aby něco akumulovali, např. z klávesnice nebo z kazety. Porty jeví zcela odlišné způsoby chování. Při portu výdeje (output-Port) se něco vepíše, zda se to pro kontrolu může opět přečíst, závisí na konstrukci Portu. U vstupních portů (Input Ports) obecně nemá smysl něco vepisovat, ale chceme tu právě něco přečíst, např. z klávesnice. str.18 2.3 Plán pamětí --------------- Potom, co jsme se naučili co to je RAM, ROM a Porty, můžeme vám dát nahlédnout do prostoru adresy vašeho počíače. Z následujícího plánu paměti lze zjistit, u kterých adres je RAM, ROM nebo vůbec žádná paměť. ---------------------------------- 0000 | Monitor R O M | |--------------------------------| 1000 | Systém R A M | |--------------------------------| 1200 | Uživatelská R A M | | | | | 5FFF | Učební LEARN program | |--------------------------------| | | | | | | | | |--------------------------------| D000 | Video R A M | |--------------------------------| E000 | Monitor R O M | ---------------------------------- FFFF U Monitor-ROM jsou v paměti programy a data, které se nedají přepisovat, byly od výrobce jednou pro vždy uloženy do paměti a zajišťují např. že můžete nahrávat programy z kazety a tyto startovat. Po vypnutí počítače zůstává obsah ROMu zachován. V uživatelském RAMu se ukládají do paměti strojové programy a data. Mohou se kdykoli přepisovat, ale pouze tehdy, když známe přesně význam každé paměťové buňky, neboť jinak lze způsobit lehce zhroucení celého počítače. Kromě toho vlastní váš počíač možnost, pomocí speciálních operací, vyřadit ROM a nahradit jej přídavným RAM do prostoru adresy. Avšak tím se nebudeme zde dále zabývat, protože se přitom jedná o komplikované mechanismy. KAPITOLA 3 Kódy: Co všechno obsahuje paměť Uzlem na kapesníku lze si poměrně zapamatovat všechno. Podobná je situace, když chceme uložit něco do paměti počítače. Máme místo uzlů ve skutečnosti k dispozici pouze nuly a jedničky, přesto můžeme dávat do paměti nejrůznější věci: texty programů BASIC, samozřejmě i osobní záznamy, to ovšem je vše jen otázka kódování. str.19 3.1 Texty: kód ASCII Možná, že si někdo vzpomene na tajná psaní z dětství. Tehdy byla např. pravidla jako A=1, B=2 .... Z=26 a tak se dal sdělovat text tím, že se převedl do čísel. Jestliže jiní to prohlédli, byly voleny komplikovanější systémy. Aby bylo vyjadřování textu v počítačích jednotné např. pro výměnu informací, byl kód normalizován, kód ASCII (American Standart Code for Information Interchange), kterého se drží většina mikropočítačů. Některé počítače mluví ovšem svým vlastním tajným jazykem, a proto jim ostatní nerozumí. Bohužel patří počítače MZ od fi SHARP co se týče malých písmen a malých znaků, také do této kategorie. V kódu ASCII je stanoveno jak se převádí texty na binární nuly a jedničky. Prvních 32 znaků v tomto kodu jsou však řídící znaky, které se používají především při přenosu textů z jednoho přístroje na druhý, např. aby byl signalizován konec přenášeného textu. Nejpoužívanějším řídícím znakem je CR (Carrige Return), který je často ve spojení s LF (Line Feet) aby byl vyznačen konec řádku. V následujících tabulkách najdete kód ASCII a odchylky od tohoto kódu pro počítače MZ: ---------------------------------------- |Binárně |Hex |Dec |ASCII |MZ-800 | |----------|-----|-----|------|--------| |00000000 |0 |0 |NUL | viz | |00000001 |1 |1 |SOH |dodatek | |00000010 |2 |2 |STX | A | |00000011 |3 |3 |ETX | | |00000100 |4 |4 |EOT | | |00000101 |5 |5 |ENQ | | |00000110 |6 |6 |ACK | | |00000111 |7 |7 |BEL | | |00001000 |8 |8 |BS | | |00001001 |9 |9 |HT | | |00001010 |A |10 |LF | | |00001011 |B |11 |VT | | |00001100 |C |12 |FF | | |00001101 |D |13 |CR | | |00001110 |E |14 |SO | | |00001111 |F |15 |SI | | |--------------------------------------| |00010000 |10 |16 |DLE | viz | |00010001 |11 |17 |DC1 |dodatek | |00010010 |12 |18 |DC2 | A | |00010011 |13 |19 |DC3 | | |00010100 |14 |20 |DC4 | | |00010101 |15 |21 |NAK | | |00010110 |16 |22 |SYN | | |00010111 |17 |23 |ETB | | |00011000 |18 |24 |CAN | | |00011001 |19 |25 |EM | | |00011010 |1A |26 |SUB | | |00011011 |1B |27 |ESC | | |00011100 |1C |28 |FS | | |00011101 |1D |29 |GS | | |00011110 |1E |30 |RS | | |00011111 |1F |31 |US | | | -------------------------------------| str.20 ---------------------------------------- |Binárně |Hex |Dec |ASCII | MZ-800 | |----------|-----|-----|------|--------| |00100000 |20 |32 |SPACE |SPACE | |00100001 |21 |33 |! |! | |00100010 |22 |34 |" |" | |00100011 |23 |35 |# |# | |00100100 |24 |36 |$ |$ | |00100101 |25 |37 |% |% | |00100110 |26 |38 |& |& | |00100111 |27 |39 |' |' | |00101000 |28 |40 |( |( | |00101001 |29 |41 |) |) | |00101010 |2A |42 |* |* | |00101011 |2B |43 |+ |+ | |00101100 |2C |44 |, |, | |00101101 |2D |45 |- |- | |00101110 |2E |46 |. |. | |00101111 |2F |47 |/ |/ | |--------------------------------------| |00110000 |30 |48 |0 |0 | |00110001 |31 |49 |1 |1 | |00110010 |32 |50 |2 |2 | |00110011 |33 |51 |3 |3 | |00110100 |34 |52 |4 |4 | |00110101 |35 |53 |5 |5 | |00110110 |36 |54 |6 |6 | |00110111 |37 |55 |7 |7 | |00111000 |38 |56 |8 |8 | |00111001 |39 |57 |9 |9 | |00111010 |3A |58 |: |: | |00111011 |3B |59 |; |; | |00111100 |3C |60 |< |< | |00111101 |3D |61 |= |= | |00111110 |3E |62 |> |> | |00111111 |3F |63 |? |? | ----------------------------------------