CPU

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
m (Procesor z pohledu SW: Opraveno Strojový kód -> Assembler u ukázky. Přidán odkaz na související stránky.)
(Assembler — ukázka: Lepší příklad.)
Řádka 52: Řádka 52:
  
 
<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 ==
 
== Související stránky ==
 
* [[Programovací jazyky]]
 
* [[Programovací jazyky]]

Verze z 17. 11. 2016, 22:57


Obsah

Co je CPU?


Parametry procesoru

Technické parametry
Další parametry

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