Konštrukcia SWITCH-CASE (assembler)
Predmet |
|
---|---|
Konfigurovateľné mikroprocesorové systémy | |
Tématická časť: | |
Programové konštrukcie assembleru M8C |
Konštrukciu SWITCH–CASE používame vtedy, keď premenná môže nadobúdať viacero hodnôt a chceme, aby niektoré z nich vykonali nejaký kód. Vo vyšších jazykoch, napríklad C je syntax:
switch (hodnota) {
case 1:
LED_1_On();
break;
case 2:
LED_2_On();
break;
case 3:
LED_3_On();
break;
case 5:
case 4:
LED_4_On();
break;
default:
LED_1_Off();
LED_2_Off();
LED_3_Off();
LED_4_Off();
break ;
}
V tomto prípade program porovnáva údaj v premennej hodnota, a ak je výsledok 1, 2, 3 alebo 4, zapne danú LED.
Nasleduje príkaz break, ktorým program vyskočí zo switch cyklu za kučeravú zátvorku. Ak by sme príkazy break nenapísali, v prípade hodnota==2 by sa zapla LED číslo 2, 3 aj 4.
Jednotlivé CASE značky môžeme používať aj viacnásobne pre jeden kus kódu, príkladom je case 5 a case 4. Ak je hodnota==5 alebo hodnota==4, zapne sa LD číslo 4.
Za slovom default: nasledujú príkazy, ktoré sa vykonajú, ak program nenájde CASE výraz pre danú hodnotu. V prípade assembleru opäť používame hlavne podmienené skoky, tento krát JZ a CMP porovnávanie premennej s hodnotami. Alternatívou vyššie uvedeného programu v assembleri je tento kód:
switch1:
CMP hodnota,1
JZ hodnota1
CMP hodnota,2
JZ hodnota2
CMP hodnota,3
JZ hodnota3
CMP hodnota,4
JZ hodnota4
CMP hodnota,5
JZ hodnota4
JMP switch1default
hodnota1:
CALL LED1on;
JMP switch1koniec
hodnota2:
CALL LED2on;
JMP switch1koniec
hodnota3:
CALL LED3on;
JMP switch1koniec
hodnota4:
CALL LED4on;
JMP switch1koniec
switch1default:
CALL LED1off;
CALL LED2off;
CALL LED3off;
CALL LED4off;
switch1koniec: