Asemblery (IAS) — zhodnocení
By Bumerang
Probírá se jazyk symbolických instrukcí (Assembly Language) a název předmětu je jeho nejasná počeštěná verze. Dále se budete věnovat obecně tomu, jak počítač „chrastí přímo na procesoru. Ale je třeba uvést, že pracovat budete zásadně v 16b režimu na procesorech Intel (a používat překladač NASM). Je tomu tak proto, že aktuální procesory, které již pracují ve 32b/64b režimu, už mají spoustu „vychytávek“ navíc, které zastiňují pravou podstatu fungování. Principy se však nemění.
Cvičení
V průběhu semestru se konají cvičení, na která sice nemusíte chodit, ale lze na nich získat až 20b. Pokud se na cvičení připravíte, není zase až tak obtížné získat plný počet bodů. Velice důležitým prvkem ovlivňujícím vaše hodnocení je však i cvičící (a to nejen v tomto předmětu, ale obecně ve všech předmětech). Já měl to „štěstí, že jsem si zaregistroval cvičení u jednoho z nejdrsnějších, který si navíc hrozně rád dělal srandu z našich slovenských bratrů. Pro příklad uvedu několik ukázek, s čím se také na VŠ můžete setkat.
student (Slovák): „No, toto si tu musím urobiť…“
cvičící: „To si klidně urobte, ale ne tady!“student: „Tohle mi tu nějak nefunguje, nevíte proč?“
cvičící: „No to nejde!! Máte to blbě napsané! A tohle, TO JE ÚPLNĚ ŠPATNĚ!“student převádí číslo do dvojkové soustavy a dlouze přemýšlí, kolik je 2^8:
cvičící: „To si děláte srandu?! Jak jste mohl odmaturovat z matematiky?! Vy byste měl vrátit vysvědčení!“student předvádí kód, který funguje a plní zadaný úkol:
cvičící: „Mě nezajímá, že to funguje, máte to špatně napsané! Takhle to nemůžete dělat!“
A v podobné atmosféře se nesla všechna naše cvičení. V těch posledních už se proto nikdo raději na nic neptal (a ani se mu nedíval přímo do očí, aby ho nerozdráždil). Půlsemestrální písemka se psala 2.11. a byla to moje první písemka od maturity. Nebyla obtížná, byly zkoušeny pouze naprosté základy, ale ty základy jste museli znát a mít elementární množinu znalostí, jinak nebylo z čeho kouzlit. Obsahem testu byl výpočet efektivní adresy, je tedy nutno znát „tabulku“, podle které se efektivní adresa počítá (např. pokud indexujeme například SP – Stack Pointer jako offset použijeme SS – Stack Segment). Celá tabulka má logiku, proto se naučí snadno, není to pouhé memorování. Dále je třeba umět rychle počítat a převádět čísla v binární soustavě, neboť zadáním 3 úloh (z 6 tuším) bylo nechat zadaná čísla „projít“ programem (sledem instrukcí). Takže jste čísla různě násobili, sčítali atp. Je třeba se naučit, kam jednotlivé instrukce ukládají výsledky (například že instrukce DIV si dělenec bere z registru AX (či DX:AX, dle velikosti dělitele) a výsledek celočíselného dělení ukládá do AL (resp. AX) a zbytek po dělení do AH (resp. DX). Pokud vám tyto pojmy nic neříkají, neděste se, všechno se postupně dozvíte. Na závěr bylo třeba napsat segment programu, který vykonal zadanou činnost (například zjistit počet jedničkových bitů v předem daném registru, prohodit dva bity na daných pozicích atp.)
Zápočet a zkouška
Na získání zápočtu bylo třeba získat 15b z kombinace cvičení + půlsemestrálka (celkem 40b), nebyl tedy nijak náročný. Spousta lidí ale vyhořela na tom, že značně podcenila půlsemestrální písemku, kde se body zadarmo rozhodně nedávaly.
Zkouška nebyla také vůbec obtížná. První část se skládala z tabulky instrukcí, kde jste měli zjistit stav daných registrů po provedení instrukce. Předchozí obsahy registrů byly zadané (a nezávislé na úloze, tudíž se nemohlo stát, že chyba v první instrukci vám zhatila celou úlohu). Celá úloha testovala opravdu elementární znalosti a prakticky to byly body zadarmo. Další úlohou bylo převést číslo z/do dvojkové soustavy – v přímém či doplňkovém kódu. Poté bylo třeba napsat nějaké informace o FITkitu, kterému byla věnována poslední přednáška a celé to byla jenom teorie. Chtěli vědět, kolik a jaké registry FITkit má a vypsat 5 periferií, které k němu můžete připojit. Následující úloha bylo přepsání klasických C konstrukcí (while, for, if-else aj.) do Assembly Language. Přesně tyto úlohy byly probírány na cvičeních, tudíž každý, kdo na cvičeních jenom neležel, je napsal skoro automaticky. Ale daly se i logicky vymyslet, nebylo na tom nic obtížného. Poslední úlohou bylo napsat přímo celý program, využívající přerušení OS, který měl vypsat řetězec na obrazovku. Potřebné přerušení i s požadovaným obsahem registrů bylo navíc uvedeno přímo na písemce, nebylo třeba si ho pamatovat. Minimum zkoušky bylo 25b, které se daly snadno získat za „jednoduché úlohy. Formát i styl písemky se mi velice zamlouval, takhle by to mělo vypadat.
Přednášky
Přednášející doc. Ing. „Franta“ Zbořil CSc. mi vyhovoval, jeho tempo přednášení bylo optimální (žádné veliké zdržování a kroužení okolo), občas pronesl nějaký vtípek a občas nás pobavil i tím, když nám psal kusy kódu, které by se mohly objevit na zkoušce a musel tento kód ! 7x ! přepisovat, aby mu vůbec fungoval (a na zkoušce samozřejmě nemáme k dispozici Assembler, který nám řekne, kde je co špatně).
Tento předmět jsem si velice oblíbil i přesto, že většina mých vzpomínek na něj bude tvořena cvičeními, na kterých panovala stejná atmosféra, jako při sledování The Sixth Sense ve třinácti letech. Dejte si i vy pozor, abyste na konci nezjistili, že jste vlastně už dávno mrtví. Informace získané v tomto předmětu se vám budou hodit i v předmětech jiných (i když většinou jen na dokreslení znalostí a objasnění detailů – což je podle mě k nezaplacení), ať už jde o „automatické“ vytváření Stack Frame, které za vás dělá Compiler při programování v C, nebo jenom pořadí ukládání argumentů funkce na zásobník (tato znalost vám například umožní snadno naprogramovat funkce s proměnným počtem parametrů – jako je například printf).
Studentů prospělo: 56,95%