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…“)
 
Riadok 25: Riadok 25:
 
                     LED_3_Off();
 
                     LED_3_Off();
 
                     LED_4_Off();  
 
                     LED_4_Off();  
    break ;
+
    break ;
 
  }
 
  }
  

Verzia zo dňa a času 13:51, 8. február 2011


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: