Konštrukcia SWITCH-CASE (assembler): Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
(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]]
[[Kategória :Programové konštrukcie assembleru M8C]]
+
{{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:
  
Konštrukciu SWITCH–CASE používame vtedy, keď premenná môže nadobúdať viacero hodnôt a chceme, aby niektoré z nich
+
<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>
  
vykonali nejaký kód. Vo vyšších jazykoch, napríklad C je syntax:
 
  
switch (hodnota) {
+
V tomto prípade program porovnáva údaj v premennej hodnota, a ak je výsledok 1, 2, 3 alebo 4, zapne danú LED.
                  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 ;
 
}
 
  
 +
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.
  
V tomto prípade program porovnáva údaj v premennej hodnota, a ak je výsledok 1, 2, 3 alebo 4, zapne danú LED.  
+
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.
  
Nasleduje príkaz break, ktorým program vyskočí zo switch cyklu za kučeravú zátvorku. Ak by sme príkazy break
+
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:
  
nenapísali, v prípade hodnota==2 by sa zapla LED číslo 2, 3 aj 4.
+
<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
  
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
+
hodnota1:
 +
CALL LED1on;
 +
JMP switch1koniec
  
hodnota==5 alebo hodnota==4, zapne sa LD číslo 4.
+
hodnota2:
 +
CALL LED2on;
 +
JMP switch1koniec
  
Za slovom default: nasledujú príkazy, ktoré sa vykonajú, ak program nenájde CASE výraz pre danú hodnotu.
+
hodnota3:
V prípade assembleru opäť používame hlavne podmienené skoky, tento krát JZ a CMP porovnávanie premennej s
+
CALL LED3on;
 +
JMP switch1koniec
  
hodnotami. Alternatívou vyššie uvedeného programu v assembleri je tento kód:
+
hodnota4:
 +
CALL LED4on;
 +
JMP switch1koniec
  
switch1:
+
switch1default:
CMP hodnota,1
+
CALL LED1off;
JZ hodnota1
+
CALL LED2off;
CMP hodnota,2
+
CALL LED3off;
JZ hodnota2
+
CALL LED4off;
CMP hodnota,3
+
switch1koniec:
JZ hodnota3
+
</source>
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:
 

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: