Cykly DO-WHILE, FOR-LOOP (assembler): Rozdiel medzi revíziami
d |
d |
||
Riadok 1: | Riadok 1: | ||
[[Kategória :Konfigurovateľné mikroprocesorové systémy]] | [[Kategória :Konfigurovateľné mikroprocesorové systémy]] | ||
− | + | {{sablona_mikroprocoserove_systemy|Programové konštrukcie assembleru M8C|Konštrukcia IF-ELSE (assembler)|Konštrukcia SWITCH-CASE (assembler)|Cykly DO-WHILE, FOR-LOOP (assembler)}} | |
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, | ||
Aktuálna revízia z 09:48, 21. marec 2013
Predmet |
|
---|---|
Konfigurovateľné mikroprocesorové systémy | |
Tématická časť: | |
Programové konštrukcie assembleru M8C |
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.