CPU
Z MiS
Obsah |
Co je CPU?
- Jedná se o procesor, který je hlavní výpočetní jednotkou počítače.
- Běžně se používá i prosté označení procesor, i když pojem procesor může odkazovat i na řídící procesor pevného disku, procesor grafické karty a další typy procesorů.
Parametry procesoru
- Technické parametry
- počet jader
- taktovací frekvence (Hz) — dnes řádově GHz
- CPU throttling... Snižování taktovací frekvence, pokud procesor není využitý. Vede k úspoře energie.
- tepelný výkon (TDP)(W)
- typ patice (socket)
- výkon v testech
- zaměřených na mat. operace,
- na zpracování grafiky,...)
- cache (vyrovnávací paměť — L1, L2, L3)
- typ jádra (generace)
- použitá technologie (rozměr mřížky — 22 nm, 14 nm)
- Další parametry
- je integrovaný?
- kompatibilita se základní deskou
- instrukční sada (kompatibilita s rodinou procesorů)
- cena
Procesor z pohledu SW
Základní pojmy
- Registry
- Paměťové buňky, do kterých se ukládají operandy (hodnoty), se kterými procesor právě počítá.
- Velikost v řádu desítek byte (typicky stejné, jako šířka datové sběrnice nebo kratší).
- Některé mají speciální funkci, jiné obecné.
- Instrukční sada
- Jaké instrukce umí procesor zpracovat a jaké binární kódy (posloupnosti nul a jedniček) tyto instrukce označují.
- Strojový kód
- Instrukce procesoru a přiřazené kódy
- Assembler
- Programovací jazyk, který vznikne tak, že instrukcím strojového kódu přiřadíme písmenné zkratky a doplníme o vytváření proměnných a návěští pro skok a další nezbytné produkty.
- Každý typ procesoru má svůj strojový kód a assembler. Některé typy procesorů ale mohou být kompatibilní. Dnes jsou například procesory Intel a AMD z větší části kompatibilní s procesorem Intel 8080 původního počítače IBM PC.
- Viz také Programovací jazyky.
Typy instrukcí
- Přesuny
- Aritmetické operace
- Logické operace
- Podmínky
- Skok
Assembler — ukázka
- Programování v assembleru jednoduchého procesoru si můžete vyzkoušet na:
Schweigi.github.io → Assembler Simulator.
Příklad — Výpočet n-tého prvku Fibonacciho posloupnosti.
; Vypocita n-ty prvek Fibonacciho posloupnosti
; --------------------------------------------
; Vysledek zustane v registru B a bude na prvnim miste
; v pameti vystupu.
; Bylo by lepsi cislo prevest na ASCII tvar, ale to by chtelo dalsi
; proceduru... ;)
JMP start ; Skok na zacatek kodu. Nasleduje misto pro
; promenne, to chceme preskocit.
; Promenne:
poradiPrvku: DB 7 ; Kolikaty prvek Fibonacciho posloupnosti chceme?
vysledek: DB 0 ; Sem zapisi vysledek
start: ; Navesti, na ktere skaceme instrukci JMP
MOV C, [poradiPrvku] ; Ukazatel na promennou konecRady
MOV A, [vysledek] ; Ulozim do registru A hodnotu promenne
; (najdu hodnotu na adrese odkazu)
; Bude to predchozi prvek
MOV B, [vysledek] ; Totez ulozim do B - bude to aktualni prvek
INC B ; Zvysim B o 1
CMP C, 1 ; Pokud je C vetsi nebo rovno jedne...
JAE .zacatekCyklu ; ... skoc na zacatek vypoctu...
JMP .vypis ; ... jinak muzes zrovna vypsat vysledek 0
.zacatekCyklu:
ADD A, B ; Prictu k (A) aktualnimu prvku (B) predchozi, ziskam
; tim nasledujici prvek (vysledek bude v A)
MOV D, A ; Prohodim nasledujici prvek na pozici aktualniho...
MOV A, B ; a aktualni na pozici predchoziho.
MOV B, D ; Jako pomocny registr pouziji D.
DEC C ; Snizim citac C o 1
CMP C, 2 ; Porovnam B s dvojkou
JA .zacatekCyklu ; Pokud je B > 2, pokracuji v cyklu
.vypis:
MOV D, vysledek ; Do registru D dam adresu promenne
; "vysledek"
MOV [D], B ; Vysledek do promenne "vysledek"
MOV D, 232 ; Uloz ukazatel na pamet pro vystup
; (graficka karta)
MOV [D], B ; Vypisu vysledek na vystup
HLT ; Konec programu