CPU

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
m (Procesor z pohledu SW: Opraven odkaz na Programovací jazyky.)
(Přidány architektury ARM a Intel)
 
(Nejsou zobrazeny 2 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
+
=== Základní pojmy ===
* Registry
+
; Registry
** Paměťové buňky, do kterých se ukládají operandy (hodnoty), se kterými procesor právě počítá.
+
* 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ší).
+
* Velikost v řádu desítek byte (typicky stejné, jako šířka datové sběrnice nebo kratší).
** Některé mají speciální funkci, jiné obecné.
+
* Některé mají speciální funkci, jiné obecné.
* Instrukční sada
+
; Instrukční sada
** Jaké instrukce umí procesor zpracovat a jaké binární kódy (posloupnosti nul a jedniček) tyto instrukce označují.
+
* Jaké instrukce umí procesor zpracovat a jaké binární kódy (posloupnosti nul a jedniček) tyto instrukce označují.
* Strojový kód
+
; Strojový kód
** Instrukce procesoru a přiřazené kódy
+
* Instrukce procesoru a přiřazené kódy
* Assembler
+
; 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.
+
* 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.
+
* 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]].
+
* Viz také [[Programovací_jazyky#Vyšší_a_nižší_programovací_jazyky|Programovací jazyky]].
  
; Typy instrukcí
+
=== Typy instrukcí ===
*Přesuny
+
* Přesuny
*Aritmetické operace
+
* Aritmetické operace
*Logické operace
+
* Logické operace
*Podmínky
+
* Podmínky
*Skok
+
* Skok
  
; Strojový kód (ukázka):
+
=== Assembler — ukázka ===
* Ukázku programování v assembleru jednoduchého procesoru si můžete vyzkoušet na: [https://schweigi.github.io/assembler-simulator/ Schweigi.github.io → Assembler Simulator].
+
* Programování v assembleru jednoduchého procesoru si můžete vyzkoušet na: <br />[https://schweigi.github.io/assembler-simulator/ Schweigi.github.io &rarr; Assembler Simulator].
  
 
<div class="Priklad">
 
<div class="Priklad">
Příklad &mdash; Součet aritmetické řady postupným sčítáním
+
Příklad &mdash; Výpočet n-tého prvku Fibonacciho posloupnosti.
  ; Vypocita soucet aritmeticke rady
+
  ; Vypocita n-ty prvek Fibonacciho posloupnosti
  ; --------------------------------
+
  ; --------------------------------------------
  ; Vysledek zustane v registru A a bude na prvnim miste v pameti vystupu.  
+
  ; Vysledek zustane v registru B a bude na prvnim miste  
  ;  Bylo by lepsi cislo prevest na ASCII tvar, ale to by chtelo dalsi  
+
v pameti vystupu.  
  ;  proceduru... ;)  
+
  ; 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, to chceme preskocit.  
 
   
 
   
 
  ; Promenne:  
 
  ; Promenne:  
  konecRady:   DB 7 ; Cislo, kterym aritmeticka rada konci
+
  poradiPrvku: DB 7 ; Kolikaty prvek Fibonacciho posloupnosti chceme?
  vysledek:    DB 0 ; Sem zapisi vysledek  
+
  vysledek:   DB 0 ; Sem zapisi vysledek  
 
   
 
   
 
  start:            ; Navesti, na ktere skaceme instrukci JMP
 
  start:            ; Navesti, na ktere skaceme instrukci JMP
 
   
 
   
  MOV C, konecRady  ; Ukazatel na promennou konecRady  
+
  MOV C, [poradiPrvku] ; Ukazatel na promennou konecRady  
  MOV A, [C]       ; Ulozim do registru A hodnotu promenne  
+
  MOV A, [vysledek] ; Ulozim do registru A hodnotu promenne  
                   ;  (najdu hodnotu na adrese odkazu)  
+
                   ; (najdu hodnotu na adrese odkazu)
  MOV B, [C]       ; Totez ulozim do B - bude to citac
+
                  ; 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:  
DEC B            ; Snizim B (citac) o jednicku
+
  ADD A, B          ; Prictu k (A) aktualnimu prvku (B) predchozi, ziskam
  ADD A, B          ; Vynasobim cislo v A cislem v B  
+
                   ; tim nasledujici prvek (vysledek bude v A)
                   ;  Vysledek bude v A  
+
  MOV D, A         ; Prohodim nasledujici prvek na pozici aktualniho...
  CMP B, 0         ; Porovnam B s nulou
+
  MOV A, B          ;  a aktualni na pozici predchoziho.
  JA .zacatekCyklu ; Pokud je B > 0, pokracuji v cyklu
+
  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  
 
  MOV D, vysledek  ; Do registru D dam adresu promenne  
                   ;  "vysledek"  
+
                   ; "vysledek"  
  MOV [D], A       ; Vysledek do 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)  
+
                   ; (graficka karta)  
  MOV [D], A       ; Vypisu vysledek na vystup
+
  MOV [D], B       ; Vypisu vysledek na vystup
 
   
 
   
  HLT               ; Konec programu
+
  HLT              ; Konec programu
 
</div>
 
</div>
 +
 +
 +
== Související stránky ==
 +
* [[Programovací jazyky]]

Aktuální verze z 27. 1. 2017, 08:42


Obsah

Co je CPU?


Parametry procesoru

Technické parametry
Další parametry


Architektury procesoru

Intel
ARM


Procesor z pohledu SW

Základní pojmy

Registry
Instrukční sada
Strojový kód
Assembler

Typy instrukcí

Assembler — ukázka

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


Související stránky

Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje