Cykly DO-WHILE, FOR-LOOP (assembler)

Z Kiwiki
Verzia z 09:48, 21. marec 2013, ktorú vytvoril Juraj (diskusia | príspevky)
(rozdiel) ← Staršia verzia | Aktuálna úprava (rozdiel) | Novšia verzia → (rozdiel)
Skočit na navigaci Skočit na vyhledávání
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.