Domácí práce z NLP |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Jméno a příjmení: Jiří Formánek | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Studijní skupina: 37 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Datum vypracování: 10.11. 2003 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Ročník: 3. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
1) Zadání úlohy č. 32 Kruhový posuv 32-bitové hodnotu ve dvojici registrů S a D vlevo. Rotujte obsah registrů S a D vlevo o počet pozic určených 8-mi bitovým přímým operandem. Rotace se provede tak, že vysunuté bity registru S vstupují do registru D a naopak. Obsah W nesmí být změněn. Operační znak: 04h 2) Popis instrukce pro programátora Instrukce : SDRL numb Význam názvu : S D rotation left Operační znak : 04h Vstupy : numb je 8-mi bitový přímý operand Výstupy po provedení instrukce : - obsah registru W nezměněn 3) Popis algoritmu Nejprve se provede záloha registru W do T. Dále se přečte operand z paměti a uloží se do registru L. V další části se provede vlastní rotace registru S a D v cyklu, dokud obsah registru L není roven 0. V cyklu se vždy nejprve zkopíruje D do W, dále se rotuje D o jednu pozici doleva a ukládá se bit W(15) = D(15), který vypadne z W do CF. Obsah D se poté uložen zpět a provede se totéž s registrem S, kde je zároveň nasunut bit CF do S(0). Tak jsou provedeny "přeskoky" bitů z registru D do S. Dále se uplatní bit, který vypadne při rotaci S. Tento bit je uložen přes CF do W a poté se provede logický součet na W a D. Tím se S(15) dostane na D(0), ale s D se již nehýbe (přeskok z S do D). Na závěr instrukce je obnoven registr W a skáče se na návěští INTCHECK. 4) Vývojový diagram 5) Výpis programu
6) Výsledky ladění Před spuštěním je třeba do paměti vložit instrukční kód 04 následovaný 8-bitovým operandem. Do registru W je možno vložit libovolné číslo, které po skončení instrukce bude obnoveno. a) SDRL 16
Speciální případ, kdy dochází k prohození obou registrů. b) SDRL 32
Opět se jedná o speciální příklad, kdy se vlastně nestane vůbec nic, protože oba registry se orotují o 32-bitů. c) SDRL 1
d) SDRL 2
e) SDRL 3
e) SDRL 10
Stav procesoru na začátku ladícího programu si můžete stáhnout zde. Balíček obsahuje soubor .mae, .mem a .sta. Po ukončení programu je stav procesoru vrácen do původního stavu (samozřejmě kromě registru PC). Soubor MAS s instrukcí SDRL lze stáhnout zde. 7) Odvození délky trvání instrukce Instrukci můžeme rozdělit následovně: a) dekódování Body a), b) a c) jsou konstantní a bod c) je závislý na vstupním parametru. Celkový čas provedení instrukce je součtem času všech částí instrukce: Ta = 3 T = Ta + Tb + Tc + Td = 3 + 4 + WAIT + 10 * numb + 1 = 10 + WAIT + 10 * numb Instrukce bude vykonána za minimální dobu, pokud je vstupní parametr 0: T = 10 + WAIT 8) Závěr S úlohou nebyly větší potíže a docela mě to i bavilo. Měl bych snad připomínku k nepříliš přátelskému programu SIMDOP, který je pravděpodobně napsán v Pascalu. Myslím, že v dnešní době by šel snadno napsat mnohem přívětivější program na odladění instrukcí. Například mi chybělo kopírování obsahu paměti přímo v programu, rozpis registrů na bity apod. |