|
|
SOJ - Zadání projektu
Název: | Implementace algoritmů v jazyce symbolických instrukcí |
Datum zadání: | 16. listopadu 2000 |
Datum odevzdání: | 15. prosince 2000 |
Hodnocení: | 20 bodů |
Popis
Smyslem tohoto projektu je naučit se vytvářet jednoduché algoritmy v JSI
procesorů řady x86 jako součást většího programu napsaného ve vyšším
programovacím jazyce (Turbo Pascal, C, C++, apod.). Důraz je kladen
na pochopení základních principů tvorby těchto programů a vnitřní
architektury procesorů Intel.
Student si sám vymyslí své zadání, které bude konzultovat s vyučujícím.
Rozsah projektu by měl odpovídat algoritmům probíraným v kursu ADS
(vyhledávání, řazení, abstraktní datové typy, převody mezi číselnými
soustavami, analýza textu, apod.) nebo jiná vlastní témata tak, aby řešení
nepřesáhlo zhruba 200 řádků kódu v JSI. Zadání by měla být pokud možno
rozptýlena rovnoměrně, aby stejný problém neřešili více než 2 studenti.
Je možné využít i zadání projektů řešených současně do jiných předmětů,
pokud umožňují vytváření algoritmů v JSI.
Každý student pracuje na svém projektu samostatně a problémy nebo
nejasnosti konzultuje s vyučujícím. Opisování celých částí řešení může vést
ke ztrátě bodů.
Pokyny k řešení
Součástí řešení je krátký textový soubor (Popis.txt) obsahující jméno,
studijní skupinu, datum odevzdání, název projektu, jméno a verzi použitého
překladače a stručný popis řešeného problému. Délka max 1 stránka A4. Stejné
informace (kromě popisu problému) budou i ve všech zdrojových textech.
Dodržujte pravidla spisovné češtiny, vyhýbejte se žargonu, nepleťte si
pojmy. Pište stručně a výstižně. Shrnutí popisu do několika bodů je
srozumitelnější než dlouhé odstavce textu.
Snažte se dodržovat konzistentní styl psaní zdrojových textů. Čitelnost
programu hraje v JSI velmi důležitou roli:
- neplýtvejte komentáři na zjevné věci, nekomentujte každou instrukci
- popisujte co se v proceduře/úseku kódu děje a jaký má smysl, povzneste
se trochu nad jednotlivé instrukce
- oddělujte logické bloky instrukcí prázdnými řádky a/nebo komentáři
- formátujte zdrojový text JSI do sloupců: návěští, instrukce, operandy
a komentáře (lze s výhodou použít tabulátory)
- deklarujte pojmenované konstanty místo magických čísel v programu
- používejte krátká, ale výstižná návěští (@qwert: není výstižné návěští)
Pozor na časté chyby:
- algoritmy musí kontrolovat platnost předaných parametrů, v případě
nevyhovujících hodnot se musí správně zachovat (skončit, vrátit chybu)
a nesmí se zacyklit ani zhroutit (např. pro prázdný řetězec, pole délky
0 nebo 1 prvek, záporné hodnoty Integer parametrů apod.)
- pozor na překračování indexů polí (z obou stran)
- procedury nesmí změnit registry DS, SS, SP a BP - pokud je potřebujete
použít pro nějaký účel, musíte jejich obsah uschovat a na konci obnovit
- nepředpokládejte, že registry před vstupem do funkce obsahují nějaké
definované hodnoty (třeba nulu), mohli byste být později překvapeni
- hodnoty typu Byte/Char nelze načítat to 16-bitových registrů a naopak
- porovnávejte čísla bez znaménka pomocí cmp+ja/jb a se znaménkem jg/jl
(nultý byte řetězce v Pascalu, délka, nemá znaménko)
- pokud má procedura dva parametry předávané far adresou, tak oba segmenty
nemůžete současně načíst do stejného segmentového registru (např.
ES:SI a ES:DI), nesmíte předpokládat, že oba shodou okolností leží ve
stejném segmentu
- pokud naplníte registr ES segmentovou adresou dat, tak se na ta data
později neodkazujte pomocí DS (překvapivě častá chyba!)
- všechny parametry a lokální proměnné leží v SS segmentu, použijte SS:
prefix pokud se odkazujete jinak než přes registr BP
- pozor na rozdíl v předávání parametrů a výsledků mezi funkcemi
deklarovanými v Pascalu jako begin/end; a assembler;asm/end;
- využíváte-li instrukce procesoru vyššího než 286, tak na to upozorněte
ve zdrojovém textu
- neopisujte (pozor na chyby v cizích programech)
Prohřešky proti efektivitě:
- neprovádějte zbytečně víckrát stejné výpočty, pokud máte volný registr,
uložte si mezivýsledek, přesuňte konstantní výrazy ven z cyklů
- plně využívejte registry místo vícenásobných přístupů do paměti
- nestačí-li registry, je možné je uvolnit uložením dočasně nepotřebných
hodnot na zásobník (push/pop), je to jednodušší a rychlejší než deklarace
lokálních proměnných
- nepoužívejte instrukce MUL a DIV pro násobení/dělení mocninami dvou
- nezamotávejte se ve skocích, nevyrábějte "špagetový kód"
- pište efektivní kód, využívejte celou instrukční sadu procesoru
Použité prostředky
Borland Pascal 7, Borland C++ 3.1, Turbo Assembler, DJGPP
- musí být přeložitelné v prostředí sítě Novell v DOSu nebo ve Windows
- nepřeložitelné projekty nebudou hodnoceny
Odevzdání
Řešení budou odevzdána pomocí dávky ODEVZDEJ.BAT v komprimované podobě.
Odevzdává se archiv vytvořený programem PKZIP, ARJ nebo RAR se jménem
rovným řešitelovu login-name. Soubor s řešením je možné odevzdat pouze
jednou. Např.
PKZIP xjmeno99
ODEVZDEJ xjmeno99.zip
Odevzdávají se tyto soubory:
- rozumně komentovaný zdrojový text programu (komentovat proč
děláte to či ono, ne pouze otrocky přeložit instrukce do češtiny)
- popis programu v obyčejném textovém souboru (ne Word)
- funkční dávka (make.bat) nebo Makefile pro překlad
NEodevzdávají se .EXE soubory ani jiné vedlejší produkty překladu
(.OBJ, .SYM, .PRJ, .DSK, .TP, .TPU, .PSM, .MAP, .LST, .BAK, .TDS, apod.).
Zpět
© Department of Computer Science and Engineering, Božetěchova 2, 612 66 Brno, Czech Republic
Tel.: +420 54114 1144, +420 54121 2219, Fax: +420 54114 1270
e-mail: uivt@fee.vutbr.cz,
Web: http://www.fee.vutbr.cz/UIVT/
Last modification:
16. November 2000
|
|