Ústav informatiky a výpočetní techniky Language/Codepage <a href='/~arnost/vyuka/sj2/zadani1.html.en'>
 

SJ2 - projekt č.1

Poslední modifikace zadání: 15.11.1999

Zadání

V JSI procesorů Intel s využitím matematického koprocesoru implementujte funkci, která spočítá funkční hodnotu matematické funkce f pomocí Taylorovy řady. Tato funkce bude vytvořena buď pomocí vložených instrukcí (inline assembly) do zdrojového textu v jazyce C anebo ve zvláštním souboru (.asm) a bude volána hlavním programem napsaným v jazyce C. Jako hlavní program použijte přiložený soubor taylor.c, ve kterém přepíšete exp(x) na funkci, kterou máte zadanou a doplníte do hlavičky správné údaje o řešiteli a zadání.

Assemblerovský kód bude bohatě komentován (především stav registrů). Snažte se psát co nejefektivnější a co nejrychlejší kód.

Funkční hodnota se spočítá s maximální možnou přesností, tj. skončíme, až když se po přičtení dalšího členu nová funkční hodnota neliší od předchozí. Výpočet se nesmí dostat do nekonečného cyklu, takže pokud algoritmus nedospěje k řešení během 'rozumného' počtu iterací, měl by být náležitě ukončen.

Odevzdání

Odevzdává se upravený hlavní program (taylor.c), funkční makefile a popřípadě i zdrojový soubor v JSI (.asm), je-li přítomen. Vše se zabalí do souboru xlogin??.zip nebo xlogin??.arj. Do makefile nepište absolutní cesty k souborům ani překladačům. Z adresáře Q:\VYUKA\SJ2\PROJEKT1\ si do svého pracovního adresáře zkopírujete dávku odevzdej1.bat. Tuto dávku spustíte s parametrem, kterým je vámi vytvořený spakovaný soubor. Provedení odevzdání si ověříte tak, že se podíváte na disk F:, který dávka namapovala.

Pokud se rozhodnete odevzdat novější řešení, dejte mu odlišnou příponu (např. .zi1, .zi2, ...; .ar1, .ar2, ...) aby bylo jasně poznat, co je aktuální verze. Poslední termín odevzdání je 19.11.1999 (pátek).

Hodnocení

Projekt je hodnocen až 10 body. Pokud po rozbalení balíku a odeslání příkazu make nedojde ke správnému přeložení, bude projekt hodnocen 0 body. Jako vzorový makefile lze použít přiložený soubor makefile.

Přidělení funkcí

Každý student tohoto kursu pošle elektronickou poštou dopis na adresu arnost@dcse.fee.vutbr.cz a bude mu přiděleno zadání. Subjekt (věc) dopisu by měl pro usnadnění zpracování obsahovat text "SJ2-PRJ1" a v těle dopisu bude uvedeno celé jméno a login-name studenta. Nic víc není potřeba.

Funkce budou přidělovány v pořadí příchodu dopisů. Není možné si nechat přidělit nějaké konkrétní zadání. Studenti, kteří se nezaregistrují do 15. listopadu 22:00 (pondělí) budou hodnoceni 0 body.

 Jméno   Login   Funkce 
 Pokluda Jiří   xpoklu00  (1)
 Pícha Dušan   xpicha00  (2)
 Selinger Petr   xselin00  (3)
 Bezděk Michal   xbezde07  (4)
 Richter Ronald   xricht04  (5)
 Nosek Lukáš   xnosek01  (6)
 Skřivánek Petr   xskriv05  (7)
 Tomeš Pavel   xtomes01  (8)
 Schwarz Jan   xschwa04  (9)
 Tomica Petr   xtomic01  (10)
 Hladík Karel   xhladi04  (11)
 Kalenda Martin   xkalen02  (12)
 Helešic Vladimír   xheles01  (13)
 Hrouzek Jan   xhrouz01  (14)
 Hronec Michal   xhrone01  (15)
 Škrkal Oto   xskrka00  (16)
 Horák Josef   xhorak14  (17)
 Hrabálek Jiří   xhraba02  (18)
 Majerek Pavel   xmajer01  (19)
 Mainda Petr   xmaind00  (20)
 Konečný Marek   xkonec16  (21)
 Javorek Martin   xjavor03  (1)
 Pokorný Marek   xpokor13  (2)
 Bohoněk Robert   xbohon00  (3)
 Tupec Pavel   xtupec00  (4)
 Novák Robert   xnovak32  (5)
 Bartek Lukáš   xbarte00  (6)
 Kašpárek Tomáš   xkaspa06  (7)
 Bednář David   xbedna07  (8)
 Neduchal Ondřej   xneduc00  (9)
 Hromčík Petr   xhromc00  (10)
 Masovský Jaroslav   xmasov00  (11)
 Bohatý Radek   xbohat02  (12)
 Was Alfred   xwasal00  (13)
 Doupal Jan   xdoupa00  (14)
 Bednařík Roman   xbedna10  (15)
 Čaloud Libor   xcalou01  (16)
 Kopřiva David   xkopri00  (17)
 Cibula Martin   xcibul02  (18)
 Matějů Martin   xmatej12  (19)
 Kurka Marcel   xkurka01  (20)
 Klozik Martin   xklozi00  (21)
 Klíma Petr   xklima08  (1)
 Bureš Jan   xbures10  (2)
 Konig Michal   xkonig01  (3)
 Nejezchleba Oldřich   xnejez03  (4)
 Šimeček Tomáš   xsimec02  (5)
 Štípal Luděk   xstipa00  (6)
 Buriánek Pavel   xburia08  (7)
 Zela Radek   xzelar00  (8)
 Švec Martin   xsvecm01  (9)
 Kmoníček Martin   xkmoni00  (10)
 Snopek Josef   xsnope00  (11)
 Diewok Petr   xdiewo00  (12)
 Pečiva Jan   xpeciv00  (13)
 Crha Luděk   xcrhal00  (14)
 Floryán Marek   xflory01  (15)
 Strach Michal   xstrac01  (16)
 Spáčil Petr   xspaci01  (17)
 Balas Milan   xbalas03  (18)
 Rossler Jindřich   xrossl00  (19)
 Brabec Tomáš   xbrabe05  (20)

Pokud jste se do dvou dní neobjevil v seznamu a chcete řešit projekt, pošlete e-mail nebo se stavte do kanceláře č. 365, ing. Arnošt.

Definice funkcí

(1)(1)
(2)(2)
(3)(3)
(4)(4)
(5)(5)
(6)(6)
(7)(7)
(8)(8)
(9)(9)
(10)(10)
(11)(11)
(12)(12)
(13)(13)
(14)(14)
(15)(15)
(16)(16)
(17)(17)
(18)(18)
(19)(19)
(20)(20)
(21)(21)

Pokud si nebudete jisti dalšími členy rozvoje, odvoďte si je z Maclaurinova vzorce (22).
(22)(22)

FAQ

Q: Proč mi nejde v učebně BI-018 spustit můj program ani vzorový příklad taylor.exe?
A: Protože na počítačích v této učebně nejsou matematické koprocesory.

Q: math.h neobsahuje funkce arcsinh, arccosh, arctgh, arccotgh. Co mám dělat?
A: Tyto funkce lze spočítat pomocí funkce ln:
Q: V čem se vrací výsledek funkce typu double?
A: V ST(0). Všechny ostatní registry ST(1), ST(2), ... musí být prázdné.

Q: Který překladač JSI mám použít?
A: Ten, který je na síti. Buď TASM 3.1 v Q:\BC\BIN\TASM.EXE nebo TASM 3.2 v Q:\BP\BIN\TASM.EXE. Rozdíly mezi těmito verzemi by se neměly v tomto projektu projevit.

Q: Kdy mám použít instrukci finit?
A: Na začátku programu, pokud jej píšete celý v JSI. Pokud píšete jen funkci ve vyšším jazyce (Pascal, C), tak finit vůbec nepoužívejte, protože knihovny příslušného jazyka již inicializaci provedly. Překladač by měl garantovat, že na začátku provádění funkce je zásobník koprocesoru prázdný. Po návratu z funkce by na zásobníku nemělo být nic jiného než výsledná hodnota.

Q: Jak nadeklarovat návěští v in-line assembleru překladače Borland C 3.1?
A: Autoři překladače na tuto možnost zapomněli, takže je nutné blok asm {} uzavřít a návěští nadeklarovat jako normální návěští v jazyce C a poté otevřít další blok asm {}. Druhá možnost je použít direktivu asm na začátku každého řádku a návěští psát na samostatné řádky nebo před asm.

© Ústav informatiky a výpočetní techniky, Božetěchova 2, 612 66 Brno
Tel.: 54114 1144, 541212 219, Fax: 54114 1270
E-mail: uivt@fee.vutbr.cz, Web: http://www.fee.vutbr.cz/UIVT/
Poslední změna: 15. November 1999