CPU
Z MiS
				
				
				(Rozdíly mezi verzemi)
				
																
				
				
								
				|  (Vytvoření stránky.) |  (Přidány architektury ARM a Intel) | ||
| (Nejsou zobrazeny 3 mezilehlé verze od 1 uživatele.) | |||
| Řádka 25: | Řádka 25: | ||
| * instrukční sada (kompatibilita s rodinou procesorů) | * instrukční sada (kompatibilita s rodinou procesorů) | ||
| * cena | * cena | ||
| + | |||
| + | |||
| + | == Architektury procesoru == | ||
| + | |||
| + | ; Intel | ||
| + | * Procesory kompatibilní s Intel 8086 (IBM PC). | ||
| + | * Výrobci: Intel, AMD,... | ||
| + | * Obvykle používány ve stolních počítačích a většině notebooků. | ||
| + | |||
| + | ; ARM | ||
| + | * Procesory pro určené mobilní zařízení. | ||
| + | * Výrobci: Qualcomm, Huawei, Apple, Cortex, Intel,... | ||
| + | * Obvykle používány v mobilních telefonech a tabletech. Některé telefony a tablety ale používají i architekturu Intel Atom | ||
| + | |||
| == Procesor z pohledu SW == | == 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#Vyšší_a_nižší_programovací_jazyky|Programovací jazyky]]. | |
| − | + | === Typy instrukcí === | |
| − | *Přesuny | + | * Přesuny | 
| − | *Aritmetické operace | + | * Aritmetické operace | 
| − | *Logické operace | + | * Logické operace | 
| − | *Podmínky | + | * Podmínky | 
| − | *Skok | + | * Skok | 
| − | ;  | + | === Assembler — ukázka === | 
| − | *  | + | * Programování v assembleru jednoduchého procesoru si můžete vyzkoušet na: <br />[https://schweigi.github.io/assembler-simulator/ Schweigi.github.io → Assembler Simulator]. | 
| <div class="Priklad"> | <div class="Priklad"> | ||
| − | Příklad —  | + | Příklad — Výpočet n-tého prvku Fibonacciho posloupnosti. | 
| − |   ; Vypocita  | + |   ; Vypocita n-ty prvek Fibonacciho posloupnosti  | 
| − |   ; -------------------------------- | + |   ; -------------------------------------------- | 
| − |   ; Vysledek zustane v registru  | + |   ; 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   |   JMP start ; Skok na zacatek kodu. Nasleduje misto pro   | ||
| − | + |            ; promenne, to chceme preskocit.    | |
|   ; Promenne:   |   ; Promenne:   | ||
| − | + |   poradiPrvku: DB 7 ; Kolikaty prvek Fibonacciho posloupnosti chceme? | |
| − |   vysledek: | + |   vysledek:    DB 0 ; Sem zapisi vysledek   | 
| − |   start: ; Navesti, na ktere skaceme instrukci JMP | + |   start:            ; Navesti, na ktere skaceme instrukci JMP | 
| − |   MOV C,  | + |   MOV C, [poradiPrvku] ; Ukazatel na promennou konecRady   | 
| − |   MOV A, [ | + |   MOV A, [vysledek] ; Ulozim do registru A hodnotu promenne   | 
| − | + |                    ;  (najdu hodnotu na adrese odkazu) | |
| − |   MOV B, [ | + |                    ; 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:   |   .zacatekCyklu:   | ||
| − | + |   ADD A, B          ; Prictu k (A) aktualnimu prvku (B) predchozi, ziskam | |
| − |   ADD A, B ;  | + |                    ;  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],  | + |  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   | + |   MOV D, 232        ; Uloz ukazatel na pamet pro vystup   | 
| − | + |                    ;  (graficka karta)   | |
| − |   MOV [D],  | + |   MOV [D], B        ; Vypisu vysledek na vystup | 
| − | + |  HLT               ; Konec programu | |
| </div> | </div> | ||
| + | |||
| + | |||
| + | == Související stránky == | ||
| + | * [[Programovací jazyky]] | ||
Aktuální verze z 27. 1. 2017, 08:42
| 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
Architektury procesoru
- Intel
- Procesory kompatibilní s Intel 8086 (IBM PC).
- Výrobci: Intel, AMD,...
- Obvykle používány ve stolních počítačích a většině notebooků.
- ARM
- Procesory pro určené mobilní zařízení.
- Výrobci: Qualcomm, Huawei, Apple, Cortex, Intel,...
- Obvykle používány v mobilních telefonech a tabletech. Některé telefony a tablety ale používají i architekturu Intel Atom
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
