Konštrukcia SWITCH-CASE (assembler): Rozdiel medzi revíziami
(Vytvorená stránka „Kategória :Konfigurovateľné mikroprocesorové systémy Kategória :Programové konštrukcie assembleru M8C Konštrukciu SWITCH–CASE používame vtedy, keď pr…“) |
d |
||
(2 medziľahlé úpravy od jedného ďalšieho používateľa nie sú zobrazené) | |||
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)}} | |
+ | 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: | ||
− | + | <source lang="c"> | |
+ | 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 ; | ||
+ | } | ||
+ | </source> | ||
− | |||
− | + | 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: | |
− | + | <source lang="asm"> | |
+ | 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: | |
− | + | </source> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Aktuálna revízia z 09:47, 21. marec 2013
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: