Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

temata:37-prog_jsi:main [2011/03/18 15:47]
sgs
temata:37-prog_jsi:main [2012/04/11 13:26] (aktuální)
conyx [Programování v jazyku symbolických instrukcí]
Řádek 1: Řádek 1:
 +~~ODT~~
 +
 =====Programování v jazyku symbolických instrukcí===== =====Programování v jazyku symbolických instrukcí=====
  
Řádek 10: Řádek 12:
   *adresova, datova a kontrolni sbernice   *adresova, datova a kontrolni sbernice
  
-K významným registrům CPU patří střádač (Accumulator, A), registr ukazatele instrukcí (Instruction pointer register, IPR) a instrukční registr (Instruction register, IR).+K významným registrům CPU patří střádač (Accumulator, A), registr ukazatele instrukcí (Instruction pointer register, IP) a instrukční registr (Instruction register, IR).
  
 **Další registry procesorů pentium** **Další registry procesorů pentium**
Řádek 62: Řádek 64:
   *instrukce řetězové   *instrukce řetězové
   *instrukce řídící   *instrukce řídící
 +
 +[[https://www.fit.vutbr.cz/study/courses/IAS/private/10ias_4.pdf|link na slidy s instrukcemi]]
  
 ====Činost počitače==== ====Činost počitače====
Řádek 89: Řádek 93:
   *Pokud je všem symbolům přirazená jedinečná adresa, proběhne preklad   *Pokud je všem symbolům přirazená jedinečná adresa, proběhne preklad
  
-Preruseni, + 
-odkaz na zakladni instruce +====FPU==== 
-fyzicka efektivni adresa +  *Slouží pro práci s desetinými čísly 
-fpu+  *Používá speciální zásobník 
 + 
 +Tyto typy instrukcí: 
 +  *přenosové instrukce 
 +  *aritmetické instrukce 
 +  *porovnávací instrukce 
 +  *transcendentní instrukce 
 +  *řídící instrukce 
 + 
 +[[https://www.fit.vutbr.cz/study/courses/IAS/private/09ias_12.pdf|Link na slidy s instrukcemi]] 
 + 
 +====Přerušení==== 
 +Procesory Pentium umožňují přerušit vykonávání programu v reakci na některou předem specifikovanou událost, vykonat tzv. obslužný program této události, pak opět vrátit řízení přerušenému programu a pokračovat v jeho vykonávání. Události, které mohou přerušit vykonávání programu se dělí na 
 +  *Výjimky (Exceptions) - výjimkami jsou synchronní události generované procesorem při detekci jistých podmínek během zpracovávání instrukce (například pokus o dělení nulou). 
 +  *Přerušení (Interrupts) - přerušeními jsou asynchronní události generované obvykle vstupními a výstupními zařízeními (žádosti o obsluhu). 
 + 
 +**Průběh** 
 +  *0. Vykonává se program. 
 +  *1. Je generována výjimka číslo i, nebo vnější zařízení požaduje přerušení číslo i. 
 +  *2. Dokončí se prováděná instrukce. 
 +  *3. Do zásobníku se uloží obsah registrů EFLAGS[15:0], CS a IP. 
 +  *4. Z tabulky přerušení se přečte adresa obslužného programu (Interrupt Service Routine, ISR) z lineární/fyzické adresy LA = FA = i ∗ 4. 
 +  *5. Adresa ISR se uloží do CS:IP. 
 +  *6. Provádí se ISR. 
 +  *7. Po ukončení ISR (instrukcí IRET) se vyjme ze zásobníku návratová adresa a uloží se do registrů IP a CS, a příznaky, které se uloží se do registru EFLAGS[15:0]. 
 +  *8. Pokračuje se ve vykonávání původního programu od místa, ve kterém bylo jeho vykonávání přerušeno. 
 + 
 +Procesory Pentium rozeznávají čtyři druhy přerušení: 
 +  *výjimky (generované CPU) 
 +  *maskovatelné (INTR) vnější přerušení 
 +  *nemaskovatelné (NMI) vnější přerušení 
 +  *programové přerušení - libovolnou výjimku či přerušení lze vyvolat i instrukcemi INT n, kde n je číslo přerušení. 
 + 
 + 
 +====Výpočet fyzickej adresy==== 
 +  * **lineárna adresa** v procesore 8086 je 20-bitová, ale registry majú veľkosť len 16 bitov 
 +  * používa sa 16-bitová adresa **segmentu** (selektor) a 16 bitová adresa **offsetu** 
 +  * dvojica segment a offset sa označuje ako úplný ukazateľ 
 +  * výpočet: LA = (Segment * 16 + Offset) mod 2^20 
 +{{:temata:37-prog_jsi:01_fyzicka_adresa.jpg|}} 
 + 
 +  * väzba medzi segmentovými registrami a offsetom: 
 +{{:temata:37-prog_jsi:02_vazba.jpg|}} 
 +  * CS - Code Segment 
 +  * DS - Data Segment 
 +  * ES - Extra Segment 
 +  * FS - Extra Segment 
 +  * SS - Stack Segment 
 +  * BX, BP - báza (základná adresa v segmente) 
 +  * SI, DI - index pri prenose skupín dát 
 +  * displacement D8, D16 - relatívne posunutie ukazovateľa 
 + 
 +  * v podstate: 
 +    * pre adresu nejakého registra (DS, ES), offset je BX, prípadne môže byť zadaný ešte nejaký posun 
 +    * pre adresu inštrukcie v základnom nastavení použijete adresu CS:IP 
 +    * pre adresu zásobníku použijete adresu SS:SP, prípadne SS:BP 
 +    *  
 + 
 +  * príklad: 
 +  * CS=45F4h,   SS=AB00h,   DS=5541h,   ES=1111h 
 +  * IP=2211h,   SP=1FEOh,   BX=3344h,   BP=2244h,   SI=1AD5h 
 +  * 
 +  * adresa inštrukcie: CS:IP = 45F40h + 2211h = 48151h 
 +  * adresa zásobníku:  SS:SP = AB000h + 1FE0h = ACFE0h 
 +  * adresy operandov: 
 +    * [BX] => DS:[BX] = 55410h + 3344h = 58754h 
 +    * ES:[BX] => ES:[BX] = 11110h + 3344h = 14454h 
 +    * [BP+4] => SS:[BP+4] = AB00h + 2244h + 4h = AD248h 
 +    * [BX+SI+1] => DS:[BX+SI+1] = 55410h + 3344h + 01AD5h + 1h = 5A22Ah
temata/37-prog_jsi/main.1300459659.txt.gz · Poslední úprava: 2011/03/18 15:47 autor: sgs
Recent changes RSS feed Debian Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki