Informace o nových učebních textech Pro studenty 3. ročníků oboru Elektronické počítače byly vydány tyto učební texty: 1) Elektronické počítače 1 (vydání říjen 2009) autor: Ing. Miroslav Škop 2) Jazyk symbolických adres a jeho aplikace (vydání říjen 2009) autoři: Ing. Libuše Skalická, Ing. Miroslav Škop Učební text elektronické počítače seznamuje studenty se základními funkčními bloky počítače, vysvětlení funkce počítače na aplikaci hypotetického počítače, s typy a realizací řadičů počítačů, s mikroprocesory používanými v počítači typu IBM PC, s obvodovou realizací a skutečným provedením počítače typu IBM PC a se základními typy periferních zařízení (pevný disk, jednotky CD a DVD, tiskárny). Součástí učebního textu je vysvětlení základních konstrukcí programovacího jazyka Python. Na základě tohoto skriptovacího jazyka jsou v textu použity příklady pro realizaci různých typů výpočtů (výpočet parity, práce v různých typech zobrazení čísel, výpočty logické a fyzické adresy apod.). Učební texty zachycují moderní trendy vývoje techniky v tomto odvětví.
1
© Střední průmyslová škola elektrotechnická, V Úžlabině 320 Praha 10
Ukázka z učebního textu Elektronické počítače 1 (částečně upravená):
23.6 Tiskárny Historicky jsou tiskárny jedním z nejdůležitějších a nejpoužívanějších periferních zařízení. Tato zařízení tvořila klíčovou roli v pořizování výstupů z výpočetních systémů do počátku 90. let minulého století. Historicky se vývoj tiskáren odehrával přes elektrický psací stroj (tiskárna s typovým košem). Se zvyšujícím se výpočetním výkonem se postupně objevily rychlotiskárny s typovým válcem a typovým řetězem. Rychlost těchto tiskáren dosahovala až několika desítek stran za sekundu. 23.6.1 Jehličková tiskárna Jejím principem je vystavování jehličky pomocí elektromagnetu. Jehličky jsou umístěny v tiskové hlavě nečastěji v jednom sloupci. Zde jich může být až 24. V klidové poloze je jehlička zasunuta a pružina ji drží v této poloze. Jehlička má na sobě jádro, které je vtahováno do válcové cívky v případě, že byl dán pokyn k tisku pro tuto jehličku. Každý znak je vytištěn jako matice bodů. V minulosti se používalo matice 7 x 5, dnes se nejčastěji používá matice 9 x 7. Jehlička přes barvící pásku vytvoří otisk bodu na papíru. Tiskárna se dá použít i pro tisk grafiky. Z hlediska kvality tisku rozlišujeme tři typy: – draft, – NLQ (Near Letter Quality), – LQ (Letter Quality). Typ písma NLQ a LQ vyžaduje, aby se každý bod tisku tiskl vícekrát. To v praxi znamená snížení rychlosti tisku. Taková typická rychlost je několik stran za minutu. Další nevýhodou těchto tiskáren je, že obsahují velký počet mechanických součástí. Tím jsou více poruchovější než jiné typy tiskáren. Největší problémy u těchto tiskáren vznikají při otřepení barvicí pásky, kdy její části (vlákna) může vtáhnout jehlička, a tím dojde nejčastěji k jejímu zaseknutí v ložisku. Tiskárna může realizovat i vícebarevný a barevný tisk v případě, že barvicí páska je podélně rozdělena na několik barev a systém umožňuje její přepínání během tisku. Cenově dnes tyto tiskárny nepatří k nejlevnějším, jejich cena je srovnatelná s cenou laserové tiskárny, tedy cca v řádu několika tisíc Kč. Provozní náklady jsou však nízké. To je dáno především nízkou pořizovací cenou barvicí pásky. Největší výhodou tohoto typu tiskáren je, že se dá použít papír s kopií, a tím vytvořit několik stejných dokumentů při jednom tisku (originál + kopie). Standardně se používá tabelačního papíru 1+0 (bez kopie) až 1+3 (3 kopie).
2
© Střední průmyslová škola elektrotechnická, V Úžlabině 320 Praha 10
Obr. – Princip jehličkové tiskárny 23.6.2 Termotiskárna Pracuje na podobném principu jako jehličkové tiskárny s tím rozdílem, že zde není barvicí páska ani jehličky. Tisková hlava je vybavena termoelementy (rezistory, které průchodem elektrického proudu vytvářejí ohřev). Tyto tiskárny používají speciální papír (termopapír). Ten se obvykle skládá ze dvou složek. Vrchní, bílé, která je tvořena voskem tajícím při teplotě cca 45 °C. Spodní vrstva je tmavá. Pokud dojde k bodovému ohřevu tohoto papíru, pak se nataví vrchní vrstva, vosk z tohoto bodu steče, a tak se odhalí spodní, tmavá vrstva. Na papíru je patrný tmavý ohraničený bod. Opět každý ze znaků je vytvořen jako matice bodů. Elektronika této tiskárny ovládá příslušné termoelementy s kombinací s posuvem tiskové hlavy a ovládáním příslušných termoelementů vytiskne znak podle kódu znaku na vstupu. Výhodou těchto tiskáren je velká provozní spolehlivost a relativně nízké výrobní náklady. Na druhou stranu jsou provozní náklady kvůli speciálnímu papíru vysoké. Dalším negativním faktorem je poměrně malá hustota tisku, cca 600 dpi. Samostatnou kapitolu problému tvoří stálost tisku. Tisk je nestálý, působením slunečních paprsků či zvýšené teploty mizí. I přes tyto negativní vlastnosti se však termotiskárny stále používají pro svoji relativně vysokou spolehlivost, která je dána minimálním počtem mechanických částí. Dnes slouží jako pokladní doklad u většiny používaných typů elektronických pokladen. 23.6.3 Laserová tiskárna Je dnes jedním z nejpoužívanějších typů. Tato tiskárna vznikla z principu xerografického kopírování dokumentů vynalezeného firmou Xerox v 60. letech minulého století. Původní princip, který byl vytvořen pro množení dokumentů, byl doplněn o další prvky tak, aby bylo možné dokumenty plynule tisknout. Základním prvkem tohoto tisku je kovový válec, na kterém je nanesena tenká vrstva polovodiče, jež je vyleštěna. Tím je zbavena prakticky všech nerovností. Původně se používal jako polovodič prvek Selen, dnes se používají i polovodiče jiných typů. Polovodič Selen má tu vlastnost, že mění hodnotu elektrického odporu ve velkém rozpětí. Při neosvětleném povrchu má odpor cca 3 MΩ, při jeho osvícení klesá hodnota 3
© Střední průmyslová škola elektrotechnická, V Úžlabině 320 Praha 10
odporu až k hodnotě cca 300 Ω. Válec se při tisku otáčí konstantní rychlostí. Je umístěn ve vnějším krytu tak, aby nebyl osvícen okolním světlem. Kovová část válce je elektricky spojena s kostrou zařízení. Ve smyslu otáčení válce jsou umístěny tyto prvky: – mechanický stěrač, – vybíjecí lampa, – korona, – nádobka s tonerem. Celý princip tisku probíhá na principu vytvoření elektrostatického náboje a jeho pohlcování změnou odporu vrstvy polovodiče při jeho osvícení. Jako zdroje světla se používá laserového paprsku vytvořeného pomocí laserové diody. U prvních typů těchto tiskáren se používalo klasického laseru. Světelný tok byl ovládán deflektorem, který v závislosti na přiloženém vysokofrekvenčním napětí propouštěl, respektive nepropouštěl světelný tok laseru směrem k válci. Dnes u některých tiskáren deflektor není a generování světelného paprsku se děje zapínáním napájecího napětí pro laserovou diodu. Ovládání deflektoru či napájení laserových diod provádí vlastní elektronika tiskárny. Ta bývá realizována jako mikroprocesorový systém, který na jedné straně pomocí rozhraní komunikuje s PC a řídí předávání znaků od zařízení k tiskárně. Na straně druhé řídí a synchronizuje veškeré části tiskárny při tisku. Každá tiskárna je vybavena vnitřní pamětí v řádu jednotek MB (dnes i více). Sem se data ukládají před tiskem. Pro ovládání tiskárny slouží specifické jazyky, například rozšířený je jazyk PCL. Světelný paprsek dále dopadá na rotující zrcadlo. To rotuje velkou rychlostí, až 3600 otáček/min. Jeho úkolem je roztažení obrazu na celou šířku povrchu válce. Mechanický stěrač slouží k odstranění zbytků barvy (toneru) z povrch válce, které zde zůstaly z předchozího tisku. Vybíjecí lampa osvítí celou šířku válce, tím dojde vlivem změny odporu povrchu válce k odstranění veškerého elektrostatického náboje z takto osvíceného povrchu válce. Korona slouží k homogennímu nabití válce na hodnotu cca 2,5 KV. Praktické provedení korony je tenký drát umístěný v těsné blízkosti válce. Drát je umístěn v izolátorech. Polarita náboje zde není důležitá. Podstatné je, aby náboj papíru zprostředkovala jiná korona s opačnou polaritou napětí. Pro celou funkci zařízení je také důležitý zdroj vysokého napětí. Ten je symetrický, s kostrou zařízení je spojen střed zdroje. Další fází tisku je osvícení povrchu válce v místech, kde má vniknout obraz. Tím dojde k lokálnímu vybití částí válce. V další fázi je na tyto vybité části nanesen toner. Ten je umístěn v plastové krabičce v těsné blízkosti povrchu válce. Vlivem otáčení válce, který je homogenně nabit koronou, má toner náboj stejné polarity jako má korona. Toner je velmi jemný prášek, který taje při cca 100 °C. Vlivem jeho náboje se toner přichytí pouze na místa, která byla předtím vybitá (elektrostatické náboje stejné polarity se odpuzují, různé polarity se přitahují). Další fází je přenesení toneru z povrch válce na papír. Papír je ze zásobníku podavačem podán do dráhy, která vede bezprostředně pod válcem. Papír je nabit koronou na opačný náboj, než má korona na válci. Při jeho posunu pod povrchem válce dojde vlivem elektrostatických sil k přenesení toneru z povrchu válce na povrch papíru. Další fází tisku je fixace toneru na papír. Ta se provádí v pícce. V ní je udržována teplota cca 100 °C. Pícka je realizována nejčastěji halogenovou lampou. Teplota v pícce způsobí, že toner změní své skupenství z pevného na kapalné, tím se vsákne do papíru a následně se zapeče do jeho povrchu. Další fází je odstranění povrchového náboje z papíru. Ten je vlivem předchozích operací tisku nabit a tím by bylo jeho ukládání ztíženo, neboť se papíry vlivem stejného náboje odpuzují. Z tohoto důvodu odstraňujeme před ukládáním papíru do zásobníku již zmíněný náboj. To se provádí kovovými sběrači spojenými s kostrou stroje. Poslední fází tisku je umístění papíru do zásobníku vytištěných papírů.
4
© Střední průmyslová škola elektrotechnická, V Úžlabině 320 Praha 10
Vlastnosti laserových tiskáren: Velká rychlost tisku, lze dosáhnout rychlosti v řádu desítek stránek za minutu a hustoty tisku až cca 4800 dpi. S tímto typem tiskárny lze dosáhnout i barevného tisku. V tomto případě se používá barevných filtrů, které světlo rozdělí na barevné složky a následně různě barevných tonerů, které vytvoří barevný obraz na papír. Kromě formátu tisku A4 se používají i jiné, až do A0. Tisk je stálý. Dá se narušit pouze vnějším silným elektrostatickým polem, které oddělí toner od papíru (pozor na některé typy umělohmotných desek). Cena těchto tiskáren postupně klesá z hodnot několika desítek tisíc Kč až na hodnotu cca 2 až 3 tisíce Kč. Lze tedy o této tiskárně říci, že má relativně malé pořizovací náklady. Vzhledem k omezené životnosti polovodiče se vyměňuje téměř vždy válec a toner. Ty jsou provozně spojeny v jeden celek – cartridge. Cena cartidge se pohybuje v řádu 1000 Kč. Náplň vydrží pro tisk několika tisíc stran. Vzhledem k těmto parametrům se jedná o tiskárnu s relativně malými provozními náklady. Zmíněný typ tiskáren se také vyznačuje vysokou provozní spolehlivostí. 23.6.4 Tiskárna s hlavou LED diod V době, kdy výrobní cena laserových tiskáren byla vysoká, bylo snahou výrobců ji zlevnit. Princip tisku zůstává stejný, zásadní změna je v generaci světla. To je generováno pásem LED diod umístěných přímo nad povrchem válce. Tak odpadá použití rotujícího zrcadla, deflektoru, laserové diody a části elektroniky tiskárny potřebné pro jejich řízení. Kvalita tisku je horší než u laserové tiskárny. Dosahovalo se hustoty tisku 600, později 120 dpi, nejnovější tiskárny měly 1200 dpi. Tiskárny se požívaly především u faxů. Vlivem podstatného poklesu cen u laserových tiskáren je výroba těchto typů tiskáren tlumena. 23.6.5 Inkoustové tiskárny Jsou tiskárny, které vytváří tisk pomocí malých kapiček inkoustu. Existují dva různé principy, jak kapičky inkoustu vytvářet. Ten první je výrobně levnější a využívá fyzikálního jevu, kdy při teplotách blížících se varu kapaliny prudce stoupá tlak uvnitř uzavřeného prostoru. Tisková hlava obsahuje malé komůrky, do nichž se přivádí inkoust. Komůrka je směrem k papíru vybavena malou tryskou. Uvnitř komůrky je elektrický element, který se průchodem proudu zahřívá. V případě jeho zahřátí stoupne teplota inkoustu v komůrce na hodnotu blízkou varu inkoustu (cca 70 až 100 °C), následně dojde ke zvýšení tlaku v komůrce, který se vyrovná výstřikem kapičky inkoustu na papír. Jistá nevýhoda tohoto principu spočívá ve velkém tepelném namáhání komůrky a následně její malé provozní životnosti. To je důvod, proč se vyměňuje u většiny tiskáren tohoto typu celá tisková hlava při výměně inkoustu. Druhý princip se nazývá piezoelektrický a spočívá ve vytvoření mechanického kmitu, který deformuje malou komůrku s inkoustem. Tím se vytvoří tlak, který zabezpečí výstřik kapičky inkoustu na papír. V tomto případě je jedna ze stěn komůrky tvořena elastickou membránou, na které je piezoelement. Ten je tvořen krystalem křemene. Zmíněný krystal má tři osy – elektrickou, mechanickou a optickou. Pokud přivedeme vysokofrekvenční napětí na elektrickou osu, v mechanické ose se vytvoří kmit. Ten přitlačí membránu komůrky a uvnitř komůrky se zvýší tlak, který vypudí kapičku inkoustu na papír. V tomto případě není potřeba vyměňovat tiskovou hlavu při každé výměně inkoustové náplně. Samozřejmě i tato tiskárna může pracovat jako barevná, a to v případě, že použijeme pro každý bod tisku více komůrek (CMYK = 4 komůrky). Elektronika tiskárny je tvořena řídícím systémem s procesorem, který zabezpečuje podle kódu znaku aktivaci příslušných komůrek pro tisk tohoto znaku. Výhodou těchto typů tiskáren je 5
© Střední průmyslová škola elektrotechnická, V Úžlabině 320 Praha 10
velmi dobrá reprodukce barevných obrázků, neboť barvy lze dobře míchat v tekuté fázi na papíru při rozstřikování kapičky. Zásadní nevýhodou je zasychání inkoustů v tiskové hlavě. To často zapříčiní nefunkčnost některého tiskového bodu či barevné složky tohoto bodu. Tiskárny tohoto typu si samy zapínají svůj čistící cyklus i době, kdy jsou nečinné. Je samozřejmé, že část čistícího cyklu, popřípadě celý, se provádí bezprostředně po jejím zapnutí. Rychlost tisku je cca 10 stran/min. Hustota tisku je cca do 2400 dpi. Pořizovací cena bývá nižší než u laserových tiskáren. Tiskárny obvykle mívají vyšší provozní náklady, neboť cena hlavy s inkousty bývá srovnatelná s cenou tiskárny a její životnost obvykle bývá v řádu stovek stran na jednu náplň. Nevýhodou je malá odolnost tisku proti vlhkosti či vodě. Tisk lze i po zaschnutí smýt. Tuto negativní vlastnost lze minimalizovat použitím speciálních laků, které tisk fixují.
6
© Střední průmyslová škola elektrotechnická, V Úžlabině 320 Praha 10
Učební text Jazyk symbolických adres a jeho aplikace seznamuje studenty s jazykem symbolických adres (asemblerem), jeho použitím, principy datové komunikace , propojením s ostatními částmi operačního systému a prací s grafikou.
Ukázka z učebního textu Jazyk symbolických adres a jeho aplikace (částečně upravená):
Použití jazyka ASM pro realizaci různých programovacích technik Přenos a naplňování registrů daty. Pro přenos dat se používá instrukce MOV. Příklad: Vynulujte registr AL MOV AL,0D Příklad: Přesuňte obsah registru DL do registru BH: MOV BH,DL Příklad: Do registru CL dejte číslo 29D MOV CL,29D Příklad: Do registru AH dejte znak u MOV AH,“u“ Nulování registrů Jednou z možností je, jak bylo výše uvedeno předat do registru 0. Příklad: MOV Al,0 Pokud bychom chtěli vynulovat např. registry CL A CH pak můžeme analogicky napsat : MOV CL,0D MOV CH,0D V tomto případě můžeme celý zápis zkrátit následujícím způsobem: MOV CX,0D Poznámka: Pokud požíváme registry, pak je nutné je vždy nastavit (nulovat) před jejich prvním použitím. Pokud to neuděláme, pak můžeme někdy velmi obtížně hledat chybu ve vytvořeném programu. Lepší možnost (z hlediska časového provádění instrukce je použití instrukce nonekvivalence XOR. Příklad: XOR AL,AL.
7
;Tato sekvence vynuluje registr AL.
© Střední průmyslová škola elektrotechnická, V Úžlabině 320 Praha 10
Vzájemná výměna dat mezi dvěma registry Vystačíme s jednou pomocnou proměnnou, zde např.obsah registru BL: Příklad: Chceme vzájemně vyměnit obsah registrů CL a CH: MOV BL,CL MOV CL,CH MOV CH,BL Obdobně lze vytvořit modifikaci pro vzájemnou výměnu dvou 16 bitových registrů. Příklad: Chceme vzájemně vyměnit obsah registrů CX a BX, Pomocný registr bude DX: MOV DX,BX MOV BX,CX MOV CX,DX Použití paměťových míst Procesor I 8086 má omezený počet registrů. Z tohoto důvodu je vhodné používat paměťových míst k ukládání konstant či proměnných. Před použitím paměťového místa musíme jej napřed deklarovat. Deklarace musí být provedena v datovém segmentu. Při deklaraci můžeme také nastavit inicializační hodnotu této proměnné. To je hodnota, kterou má paměťová lokace, aniž bychom předtím do ní něco uložili. S takto deklarovanou proměnnou pracujeme podobně jako s registrem.Jejich použití však zvyšuje čas provedení instrukce, neboť registry jsou přímo ve struktuře procesoru a paměťové místo je uloženo v operační paměti, tedy v části mimo procesor, která navíc používá pomalejší typ paměti (dynamická oproti registrům, které jsou tvořeny statickou pamětí) Příklad: Deklaruje dvě proměnné PROM a PROM1 v rozsahu 1B s inicializační hodnotou 0: .DATA PROM DB 0 PROM1 DB 0 Příklad: Deklarujte proměnnou PROMX v rozsahu 16 bitů s inicializační hodnotou 0: .DATA PROMX DW 0 Porovnání dat Pro porovnání dat je v instrukčním souboru instrukce CMP. Ta provádí odečtení zdrojového operandu od cílového. Výsledek nikam neukládá, ale správně nastaví příslušné příznakové bity registru příznaků F. Příklad: Zjistěte, Zda registr DL obsahuje znak +: CMP DL,“+“ JZ ANO Příklad: Zjistěte, zda registr BH obsahuje hodnotu 23: CMP BH,23D JZ ANO 8
© Střední průmyslová škola elektrotechnická, V Úžlabině 320 Praha 10
Vstup a výstup dat Pro vstup a výstup dat používáme příslušná makra ze souboru makra.mac 1. Vstup dat K dispozici je makro CTI_ZNAK. Toto makro přečte znak z konzole a následně ho uloží do registru AL. Příklad: Přečtěte z konzole jeden znak. Znak uložte do registru BL: CTI_ZNAK MOV BL,AL Poznámka: Pokud pracujeme se znaky a chceme je převést na čísla, pak musíme vždy odečíst hodnotu 30H. Je to z toho důvodu , že znak 0 má hodnotu 30H,(kód ASCII) znak 1má hodnotu 31H, znak 2 má hodnotu 32H … znak 9 má hodnotu 39h. Příklad: Přečtěte z konzole jeden znak a převeďte jej na číslo. Toto číslo přesuňte do registru DH: CTI_ZNAK SUB AL,30H MOV DH,AL Poznámka: Makrem CTI_ZNAK se znaky čtou s tzv. echem tj. že znak je vždy zobrazen na konzoli. Makro je možné modifikovat tak., aby pracovalo bez echa takto: CTI_ZNAK_ne 2. Výstup dat K dispozici jsou k dispozici makra PIS_ZNAK a PIS_RET a) PIS_ZNAK - V tomto případě je vytištěn znak . Příklad: Vytiskněte znak L: PIS_ZNAK “L“ Znak, který je v apostrofech se vytiskne na výstupním zařízení. Je možné takto tisknout na řádek i více znaků. Příklad: Vytisknete název skola: PIS_ZNAK “s“ PIS_ZNAK “k“ PIS_ZNAK “o“ PIS_ZNAK “l“ PIS_ZNAK “a“ Podobně je možné vystoupit i s operandem. V tomto případě však musíme nejprve převést číslo na znak. Je to obrácená operace než u zpětného převodu. Z tohoto důvodu musíme k číslu přičíst hodnotu 30H. Příklad: Zobrazte hodnotu z registru BH: ADD BH, 30H PIS_ZNAK BH Poznámka: V tomto případě je registr BH uveden jako zdroj dat pro makro PIS_ZNAK b) PIS_RET - Toto makro umožňuje výstup řetězce znaků. Řetězec musí být ukončen znakem $. 9
© Střední průmyslová škola elektrotechnická, V Úžlabině 320 Praha 10
Příklad: Vytiskněte název promena .DATA TEXT DB “promena”,”$“ .CODE MOV AX,@DATA MOV DS,AX PIS_RET TEXT Poznámka: Textový řetězec, který chceme tisknout musí být umístěn v datovém segmentu. DB je pseudoinstrukce define byte, která deklaruje konstantu. V kódovém segmentu první dvě instrukce slouží k aktivaci datového segmentu Poslední makroinstrukce provádí vlastní tisk textu. Tisk je proveden na jednom řádku. Pokud bychom chtěli provést odřádkování, pak lze použít kombinaci dvou řídících znaků CR a LF ( kódová kombinace 13 a 10 ). Výše uvedenou část programu pak můžeme modifikovat: .DATA TEXT DB “promena”,13,10,”$“ .CODE MOV AX,@DATA MOV DS,AX PIS_RET TEXT PIS_RET TEXT V tomto případě program napíše na dva řádky následující řádky název promena. Příklad: V následujícím příkladu je možné vysledovat, jak lze kombinovat makra PIS_ZNAK A PIS_RET. Chceme vytisknout obsah registru BL a BH. Oba registry obsahují jednociferná čísla. .DATA TEXT DB “registr BL obsahuje ”,”$“ TEXT1 DB “registr BH obsahuje ”,”$“ ODR DB 13,10,“$“ .CODE MOV AX,@DATA MOV DS,AX ADD BL,30H ADD BH,30H PIS_RET TEXT PIS_ZNAK BL PIS_RET ODR PIS_RET TEXT1 PIS_ZNAK BH Pokud se v registru BL nachází číslo 3 a v registru BH 5, pak výstup má tento tvar: registr BL obsahuje 3 registr BH obsahuje 5
10
© Střední průmyslová škola elektrotechnická, V Úžlabině 320 Praha 10
Skoky V jazyku ASM rozeznáváme dva typy skoků – nepodmíněné a podmíněné. Nepodmíněný skok se provede vždy. Podmíněný skok se provádí v závislosti na nastavení podmínkových bitů. Instrukce nepodmíněného skoku se provádí v rozsahu 1 segmentu tj. 0-64K. Instrukce podmíněného skoku pracují v rozsahu adres -128 až 127. Příklad: Proveďte nepodmíněný skok na návěští POK: POK: NOP ADD AL,1D JMP POK Příklad: Proveďte podmíněný skok v případě nulového obsahu registru AL na návěští POK1 POK1: ADD AL,1D CMP AL,0D JZ POK1 Poznámka: I když většina používaných instrukcí nastavuje podmínkové bity registru příznaků F. Doporučujeme vložit před každým podmíněným rozhodování instrukci CMP (porovnej). Ta umožní nastavení podmínkových bitů. Pomocí návěští a instrukce JMP lze vyrobit tzv. nekonečný cyklus . Provádí se stále. Pokud vznikne, lze pomocí dvojkliku CTRL-C vykonávání programu pozastavit.Příklad na nekonečný cyklus: POK: ADD BL,AL JMP POK Zobrazení čísel Procesor I 8086 pracuje v doplňkovém kódu. To znamená, že kladná čísla jsou vytvořena stejně jako v binární soustavě, zobrazení záporných čísel je prováděno podle následujícího postupu: 1) všechny bity čísla jsou invertovány 2) k takto vytvořené inverzi je přičtena aritmeticky jednička Programovací jazyk ASM umožňuje pracovat s různými soustavami (binární, osmičková, desítková, hexadecimální) Čísla jsou uložena v paměťových místech resp. registrech vždy v binární soustavě. Instrukční soubor umožňuje pouze práci s daty typu Integer ( pevná řádová čárka ). Příklad: vytvořte číslo -5 z čísla 5 v rozsahu 8 bitů. Číslo 5 má binární reprezentaci na rozsahu 8 bitů 00000101. Nyní provedeme inverzi všech bitů: 11111010 a následně aritmeticky přičteme jedničku. Výsledek: 111111011. Podobně bychom dostali zobrazení čísla v jiném bitovém rozsahu. Nejvyšší bit je znaménkový a nabývá hodnoty 0 pokud je číslo kladné resp. 1 pokud je číslo záporné.Maximální zobrazitelné číslo se znaménkem v rozsahu 1B (slabiky) je tedy -128 až +127 resp. 0-255 pro číslo bez znaménka V rozsahu 1 slova je rozsah se znaménkem -32768 až +32767 resp. 0-64535 pro číslo bez znaménka. Instrukční soubor procesoru I 8086 má instrukci CBW, která dokáže převézt obsah slabiky do slova.
11
© Střední průmyslová škola elektrotechnická, V Úžlabině 320 Praha 10
V souladu s výše uvedenými principy tato instrukce převádí obsah AL do AX takto: 1. Pokud je znaménkový bit registru AL nulový, pak je obsah AH vynulován. 2. Pokud je znaménkový bit registru AL jedničkový, pak je obsah AH naplněn samými jedničkami Příklad: Převeďte číslo 5 a – 5 v rozsahu 8 bitů na rozsah 16 bitů (1 slovo) a) číslo 5 má binární reprezentaci 0000 0010 , převedení na 16 bitů: 00000000 00000101 b) číslo -5 má bitovou reprezentaci 1111 1010, převedení na 16 bitů: 11111111 11111010 Další možností zobrazení dat je použití BCD čísel. Každé z těchto čísel je zobrazeno na čtyřech bitech a reprezentuje číslo o hodnotě 0 až 9 (0 = 0000 , 9=1001 ). Tato čísla se dají zobrazit jako nepakovaná ( jedno čtyřbitové číslo BCD je zobrazeno v jednom byte na pozici 0-3) nebo jako pakovaná (dvě čtyřbitová čísla BCD zobrazena v jednom byte 1. je na pozici 0-3 a druhé 4-7). Aritmetické operace : 1. Sčítání: Základní instrukcí pro sčítání je instrukce ADD. Oba operandy musí mít stejnou délku (slabika, slovo), stejná délka se předpokládá i u výsledku. Pokud se výsledek nevejde do předefinovaného rozsahu je možné použít rozšíření o bit cary. Pokud dojde k aritmetickému přeplnění nastaví se bit OF. 2. Odčítání: Základní instrukce je SUB. Lze použít i instrukci ADD, pokud budeme přičítat záporné číslo. Ostatní je stejné jako u sčítání. 3. Násobení: Základní instrukce je MUL. Předpokládá, že výsledek má dvojnásobný rozsah oproti rozsahu jednotlivých činitelů. Pokud by při výpočtu došlo k aritmetickému přeplnění, pak se nastaví bit OF. 4. Dělení: Základní instrukce je DIV. V tomto případě má dělenec dvojnásobný počet míst než dělitel. To vychází z násobení, kdy výsledek má předefinovaný dvojnásobný počet míst oproti jednotlivým činitelům. V případě aritmetického přeplnění se nastaví bit OF. 1. Sčítání Instrukce ADD (ADD cíl, zdroj), obsah cílového operandu se naplní aritmetickým součtem cílového a zdrojového operandu. Příklad: sečtěte čísla 8d a 5d, výsledek uložte v registru AL. Při použití instrukce může být pouze jeden z operandů konstanta. MOV AL,8d ADD AL,5d 2. Odčítání Instrukce SUB (SUB cíl, zdroj ). Obsah cílového operandu se naplní rozdílem cílového a zdrojového operandu. Příklad: odečtěte čísla 8d a 5d. výsledek uložte v registru BL. Při použití instrukce může být pouze jeden z operandů konstanta. MOV BL,8d SUB BL,5d 12
© Střední průmyslová škola elektrotechnická, V Úžlabině 320 Praha 10
Přiklad: Zde je uváděn příklad, který vede na nastavení bitu OF. Sečtěte: 127d a 126d. Výsledek se znaménkem ( 253d) se nevejde do předdefinovaných 8 bitů se znaménkem. MOV AL, 127d ADD AL, 126d ; a tak je nastaven bit OF 3. Násobení K dispozici jsou dvě instrukce IMUL pro znaménkové násobení a MUL pro neznaménkové násobení.Instrukce MUL (IMUL) vyžaduje, aby jeden z činitelů byl uložen v registru AL Výsledek je v registru AX.Toto platí tehdy, když jsou operandy 8 bitové. Při 16 bitových operandech je vždy jeden z činitelů uložen v registru AX, druhý v 16 bitovém registru. Výsledek má obecně dvojnásobnou délku a je uložen ve dvojici registrů DXAX. Registr DX obsahuje vyšší bity výsledku, registr AX nižší bity výsledku. Příklad: vynásobte 3d*10d. Jeden z činitelů součinu dáme do registru AL a druhý do libovolného registru např. BL. MOV AL,3D MOV BL,10D MUL BL Poznámka: I když je výsledek umístěn v registru AX, je možné nadále pracovat pouze s registrem AL, neboť výsledek je kladný a je z hlediska rozsahu (30D) umístěn pouze v nižším byte. 4. Dělení K dispozici jsou dvě instrukce: IDIV ,ta provádí znaménkové dělené a instrukce DIV, která provádí neznaménkové dělení.Dělenec musí být vždy umístěn v registru AX, dělitel v libovolném 8 bitovém registru. Dělení je celočíselné. To platí pro dělení 8 bitovým dělitelem. Druhou možností je použití 16 bitového dělitele. V tomto případě je dělenec ve dvojici registrů DXAX a dělitel je 16 bitový registr. V tomto případě obsahuje AX výsledek a registr DX zbytek po celočíselném dělení. Pokud dojde ke stavu, že dělitel je nulový, pak se generuje přerušení INT 0. Pozor. Znaménko zbytku je vždy stejné jako výsledku. Poznámka: Při celočíselném dělení např. 52/10 dostáváme výsledek 5 a zbytek 2. Příklad: Napište část programu pro celočíselné dělení 52/10. MOV AX,52D MOV BL,10D DIV BL ;(v AL je výsledek 5D a registr AH obsahuje zbytek 2D) Poznámka: Často máme pro dělení 8 bitová data, která můžeme pomocí instrukce CBW Převézt na 16 bitový operand. Příklad: Máme data ( dělenec ) v registru CL, dělitel je v registru BL. Proveďte dělení. Dělenec přeneseme do AL a pomocí instrukce CBW převedeme do AX. MOV AL,CL CBW DIV BL
13
© Střední průmyslová škola elektrotechnická, V Úžlabině 320 Praha 10
5. Vytvoření záporného čísla z kladného Prakticky existují 3 způsoby: a) použití instrukce NEG. Ta přímo vytvoří dvojkový doplněk. Pod pojmem dvojkový doplněk si představme vynásobením konstantou -1D. To znamená negaci všech bitů operandu a následně aritmetické přičtení 1D. Příklad: Z operandu vytvořte jeho zápornou hodnotu. Operand je uložen v registru BL. NEG BL Poznámka: Podobně lze pracovat i se 16 bitovým operandem. Příklad: V registru BX je hodnota. Vypočtěte její dvojkový doplněk. NEG BX Poznámka: Pokud použijeme 2 následné zápisy instrukce NEG se stejným operandem, pak se hodnota dat nezmění. Příklad: Data jsou v registru BL. NEG BL NEG BL V prvním případě jsou data vynásobena hodnotou -1, vytvoříme tedy opačnou hodnotu čísla. V druhém případě vynásobením -1 dostaneme zpět původní číslo. b) Vynásobením číslem -1d. Příklad: V registru AL je operand, vytvořte jeho dvojkový doplněk. MOV CH,-1d MUL CH c) Použitím instrukce NOT. Instrukce NOT provádí invertování všech bitů operandu. Následně musíme aritmeticky přičíst 1d a tím je celá operace ukončena. Příklad: Proveďte vypočtení záporného operandu z hodnoty uložené v registru CL. NOT CL ADD CL,1d Podobně můžeme pracovat se 16 bitovým operandem. Poznámka: Často se označuje negace všech bitů operandu jako první doplněk čísla a negaci a aritmetické přičtení jedničky jako druhý doplněk čísla. V souladu s touto terminologií můžeme instrukci NOT označit za 1. Doplněk a instrukci NEG jako druhý doplněk.
14
© Střední průmyslová škola elektrotechnická, V Úžlabině 320 Praha 10
Práce se zápornými čísly. Při práci se zápornými čísly můžeme řešit nejčastěji tyto problémy: a) Vstup záporného čísla. Jak již bylo řečeno, na vstupu je znak, který převedeme na číslo pomocí aritmetické operace SUB AL,30h (přečtený znak je v registru AL). V souladu s matematickým zápisem očekáváme, že znaménko – se nachází bezprostředně před čteným číslem. Příklad: Přečtěte znak ze vstupního zařízení a převeďte jej na číslo. Pokud tomuto znaku předchází znak - pak proveďte převedení na záporné číslo. Výsledek operace uložte do registru BL: CTI_ZNAK CMP AL, “-” JE MINUS SUB AL,30h MOV BL,AL JMP VEN MINUS: CTI_ ZNAK SUB AL,30h NEG AL MOV BL,AL VEN: NOP Stručně k funkci tohoto programu: Makrem CTI_ZNAK přečtu 1. znak a následně zjišťuji zda se jedná o - , pokud ne, pak znak převedu na číslo a uložím do registru BL. Dál pokračuji návěštím VEN. Pokud program zjistí, že prvním znakem byl znak -, pak program pokračuje návěštím minus, kde přečtu další znak,převedu ho na číslo a pomocí instrukce NEG vypočte druhý doplněk, který uloží do registru BL. b) Výstup záporného čísla. Pokud máme číslo uložené v registru či paměťovém místě, pak nejprve otestujeme znaménko výsledku. Pokud je záporné, pak před znakem, na který převedeme číslo vytiskneme znak -. Příklad: V registru CL máme číslo. Chceme provést jeho výstup s tiskem znaku – v případě záporného výsledku. CMP CL,0d JNS PLUS PIS_ZNAK “-“ NEG CL PLUS: ADD CL,30h PIS_ ZNAK CL Funkce programu: Program nejprve zjistí znaménko operandu. Pokud je kladné, pak převede číslo na znak a vytiskne. V opačném případě nejprve vytiskne znak – pak převede číslo na kladné a následně je převede na znak a vytiskne.
15
© Střední průmyslová škola elektrotechnická, V Úžlabině 320 Praha 10
c) Provedení absolutní hodnoty čísla. U některých operací v jazyce ASM je vhodné pracovat pouze s absolutní hodnotou čísla. Příklad: V registru DL je operand. Máme vytvořit jeho absolutní hodnotu a uložit ji zpět do tohoto registru: CMP DL,0d JNS VEN NEG DL VEN: NOP Funkce programu: Program nejprve zjistí, zda je číslo záporné, v tomto případě provede dvojkový doplněk čísla. V opačném případě se provede skok na návěští VEN.
Instrukce pro přičítání a odčítání jedničky Pracují rychleji než instrukce pro součet resp. rozdíl. Instrukce INC zvýší obsah registru o jedničku, instrukce DEC sníží obsah registru o jedničku. Příklad: Zvyšte obsah registru DL o jedničku. INC DL Poznámka: Z hlediska provedení je tato instrukce shodná s instrukcí ADD DL,1D
Práce s polem Pole tvoří datovou strukturu, kde jednotlivé buňky jsou řazeny bezprostředně za sebou. Nejprve je nutná deklarace pole. Předpokládejme, že chceme deklarovat pole v rozsahu 10 slabik. Deklaraci provádíme v datovém segmentu. Příklad deklarace. POLE1 DB 10 DUP (0) ; Touto deklarací jsme provedli deklaraci pole s ; názvem POLE1v rozsahu 10 buněk s inicializační ; hodnotou 0. Pro vybrání buňky pole používáme indexované adresování. Můžeme tedy jako index použít obsah registrů SI resp. DI Příklad: Chci pracovat s buňkou POLE1 s pořadovým číslem 5, tu chci přesunout do registru BL: MOV SI,5d MOV BL,POLE1[SI] Příklad : Naplním pole 10 znaky, které následně vytisknu. include makra.mac .Model SMALL .STACK 100h .data pole db 10 dup (0) odr
16
DB " ",13,10,"$"
© Střední průmyslová škola elektrotechnická, V Úžlabině 320 Praha 10
.CODE mov ax,@data mov ds,ax mov si,0d POK: CTI_znak mov pole[si],al inc si cmp SI,10D jnz pok pis_RET ODR mov SI,0d POK1: PIS_ZNAK POLE[si] INC SI CMP SI,10D JNZ POK1 konec 0 end
Příklad (obdobný): Naplníme pole a prvky vytiskneme v obráceném pořadí. include makra.mac .Model SMALL .STACK 100h .data pole db 10 dup (0) odr
POK:
POK1:
DB " ",13,10,"$" .CODE mov ax,@data mov ds,ax mov si,0d CTI_znak mov pole[si],al inc si cmp SI,10D jnz pok pis_RET ODR mov SI,9D PIS_ZNAK POLE[si] DEC SI CMP SI,-1D JNZ POK1 konec 0 end
Poznámka: V tomto případě při tisku nastavíme index pole na 9 a ten postupně snižujeme až do hodnoty -1.
17
© Střední průmyslová škola elektrotechnická, V Úžlabině 320 Praha 10
Závěr Oba učení texty jsou určeny pro usnadnění výuky našich studentů. Jejich použitím při výuce si studenti nemusí opisovat poznámky k probírané látce a mohou se tak podstatně více věnovat nejenom ústnímu výkladu, ale i důkladnému procvičování probírané látky. Učitelé školy pracují na dalších učebních textech s pracovními názvy Elektronické počítače II (text je určen především pro 4. ročník studijního oboru EP), Řídící technika (text určen pro nové ŠVP Řídící technika), Počítačové sítě a síťová komunikace v jazyku Python (text je určen pro nová ŠVP). Naše škola má již víceletou tradici ve vydávání učebních textů. V nedávné době byly vydány tyto učební texty : Repetitorium, Repetitorium II, Python, Python – rozšířené vydání, Programování v JSA, Počítače, Sítě a komunikace a další. Učební texty jsou vydávány v přijatelných cenách (cca 100 Kč/kus) a částečně řeší problém kritického nedostatku použitelných odborných středoškolských učebnic z oblasti HW i SW osobních počítačů na trhu v ČR. Snahou vedení školy je maximálně studentům zefektivnit výukový proces s omezováním málo produktivních činností (opisování probíraného textu z tabule) během vyučovací hodiny.
18
© Střední průmyslová škola elektrotechnická, V Úžlabině 320 Praha 10