Vykonávání programu
- Procesor zpracovává jednu instrukci za druhou (pokud není uvedeno jinak skok).
- nepodmíněný skok: operace
JMP r/m/i
- ekvivalenceGOTO
- není přítomna operace ekvivalentní k
if
Příznaky
- operace nastavují za svého chodu příznaky
- příznaky pro řízení výpočtu:
SF
(Sign Flag) - výsledek je záporný -0
, výsledek je kladný -1
ZF
(Zero Flag) - výsledek bylaCF
(Carry Flag) - výsledek je větší/menší než největší/nejmenší možné čísloOF
(Overflow Flag) - příznak přetečení
- další příznaky:
AF
(Auxiliary carry Flag) - přenos ze čtvrtého do pátého b (BCD)PF
(Parity Flag) - sudá parita -1
, lichá parita -0
- řídící příznaky:
TF
(Trap Flag) - slouží ke krokováníDF
(Direction Flag) - ovlivňuje chování instrukcí blokového kóduIOPL
(I/O Privilage Level) - úroveň oprávněníIF
(Interrupt enable Flag) - možnost zablokovat některá přerušení
Porovnávání čísel
- porovnání čísel -
CMP r/m
,CMP r/m/i
JE
- skok při rovnostiJNE
- skok při nerovnosti
Podmíněné skoky
Podmíněné skoky pro porovnání neznaménkových hodnot
|-----------|------------|--------------------|------------| | JA | JNBE | (CF or ZF) = 0 | A > B | | JAE | JNB | CF = 0 | A ≥ B | | JB | JNAE | CF = 1 | A < B | | JBE | JNA | (CF or ZF) = 1 | A ≤ B |
Podmíněné skoky pro porovnání znaménkových hodnot
|-----------|------------|------------------------|----------| | JG | JNLE | (SF = OF) & ZF = 0 | A > B | | JGE | JNL | (SF = OF) | A ≥ B | | JL | JNGE | (SF ≠ OF) | A < B | | JLE | JNG | (SF ≠ OF) nebo ZF = 1 | A ≤ B |
Smyčky
- speciální operace pro snadnější implementaci cyklů
LOOP
- odečte orRCX
/ECX
a pokud v něm není nula provede skok
Odhad skoků
- podmíněné skoky zpomalují běh programu procesory provádí různé heuristiky pro odhad, zda bude skok proveden
- Např. čtyř-stavové počítadlo se saturací (
11
,10
,01
,00
- až na00
počítá, že se skok provede)
Zásobník
- procesor má vyčlenění úsek paměti pro zásobník
- ten uchovává pomocné výpočty, návratové adresy, lokální proměnné, …
- vyšší programovací jazyky obvykle neumožňují manipulaci s tímto zásobníkem
- operace:
PUSH r/m/i
,POP r/m
Volání funkcí s konvencí cdecl
- Volání funkce:
- na zásobník jsou uloženy parametry funkce
- zavolá se funkce (
call <adresa>
), na zásobník se uloží adresa návratu - funkce uloží obsah registru
EBP
na zásobník (adresa předchozího rámce) - funkce uloží do registru
EBP
obsahESP
(začátek nového rámce) - vytvoří se na zásobníku místo pro lokální proměnné
- na zásobník se uloží registry, které se budou měnit
- Návrat z funkce:
- obnovíme hodnoty registrů
- odstraníme lokální proměnné
- obnovíme hodnotu
EBP
- provedeme návrat z funkce
ret
- odstraníme argumenty ze zásobníku
Proces překladu
- Je to proces, kterým se zdrojový kód napsaný v programovacím jazyce (např. C, Java) převádí na strojový kód, který může být proveden procesorem.
- Preprocesor: expanduje makra, odstraní nepotřebný kód, načte požadované soubory (např.
math.h
) - Překladač: generuje kód v assembleru
- Assembler: vygeneruje objektový kód (
foo.c
foo.obj
/foo.o
) - Linker: sloučí několik souborů s objektovým kódem + knihovny do spustitelného souboru
Statická vs dynamická knihovna
- staticky linkovaná knihovna - instaluje s programem
- nevzniká závislost
- program bude větší a při aktualizaci knihovny je nutná rekompilace
- dynamická linkovaná knihovna - program použivá knihovny OS
- načítají se při spuštění programu
- jsou sdíleny mezi soubory šetří místo
- knihovna můžu v OS chybět
Navigace
Předchozí: Operační systém, architektura, poskytovaná rozhraní Následující: Správa procesoru - procesy a vlákna, plánování jejich běhu, komunikace a synchronizace Celý okruh: 2. Informační technologie