Export page to Open Document format

Programování v jazyku symbolických instrukcí

Základní části počítače:

  • aritmeticko-logická jednotka (Arithmetic and Logic Unit, ALU)
  • řadič / řídící jednotka (Control Unit, CU)
  • zdroj taktovacích impulsů/hodin (clock)
  • registry (registers)
  • hlavní paměť (Memory Storage Unit / Main Memory)
  • vstupní a výstupní zařízení (Input/Output Devices, I/O Devices)
  • adresova, datova a kontrolni sbernice

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

  • EAX (Accumulator) střádač
  • EBX (Base) ukazatel na data v datovém segmentu
  • ECX (Counter) čítač řetězových a smyčkových operací
  • EDX (Data) rozšíření střádače, ukazatel na I/O zařízení
  • ESI (Source Index) ukazatel na zdrojová data řetězových operací, index
  • EDI (Destination Index) ukazatel na cílová data řetězových operací, index
  • EBP (Base Pointer) ukazatel na data v zásobníkovém segmentu
  • ESP (Stack Pointer) ukazatel zásobníku

Registr EFLAGS

Registr příznaků EFLAGS obsahuje příznaky stavové, řídící a systémové.

  • DF Direction Flag nastavuje směr operací u řetězových instrukcí
  • CF Carry Flag indikuje přenos/výpůjčku z/do nejvyššího bitu
  • PF Parity Flag indikuje sudou paritu v nejméně významné slabice výsledku (nastavuje se při sudém počtu jedniček)
  • AF Auxiliary Flag indikuje přenos/výpůjčku z/do bitu č. 3
  • ZF Zero Flag indikuje nulový výsledek (při nulovém výsledku se nastaví na jedničku, jinak se nuluje)
  • SF Sign Flag indikuje záporný výsledek (při záporném výsledku se nastaví na jedničku, jinak se nuluje)
  • OF Overflow Flag indikuje přetečení výsledku operací se znaménkovými čísly (při přetečení se nastaví na jedničku, jinak se nuluje)

Registr EIP

Registr EIP obsahuje 32 bitový ukazatel následující instrukce, tj. instrukce, která se bude jako další v pořadí provádět. V 16ti bitovém režimu obsahuje registr IP 16 ti bitový ukazatel následující instrukce. Obsah registru EIP, resp. IP mohou měnit pouze skokové instrukce.

Nejmenší adresovatelnou jednotkou hlavni paměti je byte - slabika.

strojový kód/jazyk - úplný soubor všech instrukcí daného procesoru, pro různé počítače rozdílný, programovani ve strojovem kodu je prakticky nemozny

hlavní pamět - dva typy objektů – data a instrukce, procesor považuje za instrukci ten objekt, na který ukazuje registr ukazatele instrukcí (IPR)

Instrukce

Instrukce jsou příkazy pro procesor, které bezprostředně řídí jeho činnost. Každá instrukce obsahuje operační kód a může obsahovat i adresy operandů, nebo přímo operandy. Operační kód jednoznačně určuje operaci a jeho součástí mohou být i adresy registrů, se kterými instrukce pracuje. Přes rozdíly v instrukčních souborech různých procesorů lze vysledovat několik základních typů instrukcí:

  • instrukce přenosové
  • instrukce aritmetické
  • instrukce logické
  • instrukce posuvů a rotací
  • instrukce skokové
  • instrukce řetězové
  • instrukce řídící

link na slidy s instrukcemi

Činost počitače

1. Do instrukčního registru se uloží obsah paměťového místa, které je adresováno registrem ukazatele instrukcí.

2. Nastaví se nový obsah registru ukazatele instrukcí (ukazuje na následující instrukci).

3. Obsah instrukčního registru je dekódován, t.j. určí se požadovaná operace a adresy příslušných operandů.

4. Provede se určená operace (u instrukcí skokových se nastaví nový obsah registru ukazatele instrukcí).

5. Pokud nebyla provedená instrukce pokynem k zastavení procesoru, pokračuje se znovu od bodu 1.

Symbolický jazyk

nízkoúrovnový jazyk jazyk, implementace symbolických reprezentací číselných strojových kódů. Definovano vyrobcem HW, založené na zkratkach (direktivach) pro lepsi orientaci programátora. Preklad do strojového jazyka provádí překladač (Assembler). V češtině se oba předchozí pojmy často nerozlišují a označují se stejným slovem „asembler“. Aby překladač byl překlad schopen provést, musí mu být poskytnuty některé dodatečné informace, které se označují jako direktivy (pokyny pro překladač).

Pruchod překladače zdrojovým kódem 2x:

  • Prvně syntaktická správnost, vytváří tabulku symbolů, přirazuje adresy
  • Pokud je všem symbolům přirazená jedinečná adresa, proběhne preklad

FPU

  • Slouží pro práci s desetinými čísly
  • Používá speciální zásobník

Tyto typy instrukcí:

  • přenosové instrukce
  • aritmetické instrukce
  • porovnávací instrukce
  • transcendentní instrukce
  • řídící instrukce

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, a 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

  • väzba medzi segmentovými registrami a offsetom:

  • 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.txt · Poslední úprava: 2012/04/11 13:26 autor: conyx
Recent changes RSS feed Debian Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki