Cykly DO-WHILE, FOR-LOOP (assembler): Rozdiel medzi revíziami
(Vytvorená stránka „Kategória :Konfigurovateľné mikroprocesorové systémy Kategória :Programové konštrukcie assembleru M8C Na rozdiel od konštrukcií, ako IF-ELSE a SWITCH-CAS…“) |
d |
||
Riadok 1: | Riadok 1: | ||
[[Kategória :Konfigurovateľné mikroprocesorové systémy]] | [[Kategória :Konfigurovateľné mikroprocesorové systémy]] | ||
− | |||
Na rozdiel od konštrukcií, ako IF-ELSE a SWITCH-CASE, v ktorých sa pre daný prípad vykoná daná činnosť len raz, | Na rozdiel od konštrukcií, ako IF-ELSE a SWITCH-CASE, v ktorých sa pre daný prípad vykoná daná činnosť len raz, | ||
Riadok 20: | Riadok 19: | ||
Vo vyšších jazykoch vyzerá DO-WHILE cyklus napríklad takto: | Vo vyšších jazykoch vyzerá DO-WHILE cyklus napríklad takto: | ||
− | + | <source lang="c"> | |
− | + | while (hodnota != 100){ | |
− | + | hodnota++; | |
− | + | CALL LED_1_Invert(); | |
+ | } | ||
+ | </source> | ||
Tento istý program prepísaný do assemblera vyzerá nasledovne: | Tento istý program prepísaný do assemblera vyzerá nasledovne: | ||
− | + | <source lang="asm"> | |
− | + | while1: | |
− | + | INC hodnota ; hodnota = hodnota+1 | |
− | + | CALL LED_1_Invert | |
− | + | CMP hodnota,100 ; porovnaj hodnota,100 | |
+ | JNZ while1 ; ak hodnota-100 <> 0, skoč na while1 | ||
+ | </source> | ||
V prípade nekonečnej podmienky použijeme obyčajný skok, JMP | V prípade nekonečnej podmienky použijeme obyčajný skok, JMP | ||
− | + | <source lang="asm"> | |
− | + | while2: | |
− | + | ... | |
+ | JMP while2 | ||
+ | </source> | ||
=FOR-LOOP cyklus= | =FOR-LOOP cyklus= | ||
Riadok 47: | Riadok 52: | ||
Vo vyššom jazyku vyzerá FOR cyklus takto: | Vo vyššom jazyku vyzerá FOR cyklus takto: | ||
− | + | <source lang="c"> | |
− | + | for (i = 0; i<100; i++){ | |
− | + | CALL LED_1_Invert(); | |
+ | } | ||
+ | </source> | ||
Podobný program prepísaný do assemblera vyzerá takto: | Podobný program prepísaný do assemblera vyzerá takto: | ||
− | + | <source lang="asm"> | |
− | + | MOV hodnota,0 | |
− | + | for1: | |
− | + | CALL LED_1_Invert | |
− | + | INC hodnota | |
− | + | CMP hodnota,100 | |
+ | JNZ for1 | ||
+ | </source> | ||
Všimnite si podobnosť s WHILE cyklom, ktorá vznikla kvôli tomu, že v oboch cykloch vieme, koľko krát časť programu opakujeme. | Všimnite si podobnosť s WHILE cyklom, ktorá vznikla kvôli tomu, že v oboch cykloch vieme, koľko krát časť programu opakujeme. |
Verzia zo dňa a času 14:19, 8. február 2011
Na rozdiel od konštrukcií, ako IF-ELSE a SWITCH-CASE, v ktorých sa pre daný prípad vykoná daná činnosť len raz,
cykly túto činnosť opakujú. V prípade FOR-LOOP cyklu sa činnosť opakuje n-krát. V prípade DO-WHILE sa činnosť
opakuje, kým je splnená podmienka, takže môžeme nastaviť počet opakovaní inkrementáciou premennej, alebo podmieniť
cyklus vonkajším vstupom.
DO-WHILE cyklus
While cyklus používame napríklad v hlavnom cykle programu, vtedy väčšinou s podmienkou, ktorá je vždy platná,
napríklad true, alebo 0 == 0. Taktiež ho používame napríklad pri čakaní na stlačenie tlačidla, alebo iný vstup. Kým
nie je tlačidlo stlačené, program je zacyklený vo WHILE cykle a jeho stlačením ho ukončíme.
Vo vyšších jazykoch vyzerá DO-WHILE cyklus napríklad takto:
while (hodnota != 100){
hodnota++;
CALL LED_1_Invert();
}
Tento istý program prepísaný do assemblera vyzerá nasledovne:
while1:
INC hodnota ; hodnota = hodnota+1
CALL LED_1_Invert
CMP hodnota,100 ; porovnaj hodnota,100
JNZ while1 ; ak hodnota-100 <> 0, skoč na while1
V prípade nekonečnej podmienky použijeme obyčajný skok, JMP
while2:
...
JMP while2
FOR-LOOP cyklus
For cyklus používame vtedy, ak vieme, koľko krát chceme činnosť opakovať. Môžeme ho použiť napríklad pri meraní a
priemerovaní, kedy meriame vstup napríklad 128×, výsledky spočítavame a následne ich delíme 128.
Vo vyššom jazyku vyzerá FOR cyklus takto:
for (i = 0; i<100; i++){
CALL LED_1_Invert();
}
Podobný program prepísaný do assemblera vyzerá takto:
MOV hodnota,0
for1:
CALL LED_1_Invert
INC hodnota
CMP hodnota,100
JNZ for1
Všimnite si podobnosť s WHILE cyklom, ktorá vznikla kvôli tomu, že v oboch cykloch vieme, koľko krát časť programu opakujeme.