Strutture di Controllo Permettono di alterare la naturale sequenza delle istruzioni Condizionali Permettono la selezione fra due alternative diverse A contatore Cicli A controllo in testa Permettono la ripetizione di un gruppo di istruzioni A controllo in coda Salti Salti incondizionati Strutture elementari utilizzate da linguaggi non strutturati per realizzare le altre due strutture Salti condizionati
Salti Non sono più utilizzati nei moderni linguaggi di programmazione. Tuttavia la traduzione delle strutture complesse viene risolta per mezzo di queste istruzioni. Salti incondizionati Sono istruzioni che permettono di modificare la sequenza naturale del programma indipendentemente dal risultato di operazioni precedenti. Salti condizionati Sono istruzioni che permettono di modificare la sequenza naturale del programma in funzione del risultato di operazioni precedenti.
Salti incondizionati In assembler queste istruzioni si presentano nella forma: JMP <etichetta> Dove <etichetta> è un nome simbolico assegnato alla istruzione cui bisogna cedere il controllo. L’effetto di questa istruzione è quello di assegnare al registro IP l’indirizzo dell’istruzione contrassegnata da <etichetta> Es 1: MOV AX,pippo JMP oltre MOV BX,felix ADD AX,BX Oltre: MOV CX,20 Es 2: MOV AX,pippo Oltre: MOV BX,felix ADD AX,BX JMP oltre MOV CX,20
Salti condizionati In assembler queste istruzioni si presentano nella forma: Jxx <etichetta> Dove <etichetta> è un nome simbolico assegnato alla istruzione cui bisogna cedere il controllo. “xx” sono una o due lettere che indicano la condizione che deve verificarsi affinché avvenga il salto. Es.: JNZ nozero Effettua un salto all’etichetta nozero se l’operazione precedente ha dato un risultato diverso da 0. Questa istruzione può essere utilizzata sia da sola, che in combinazione con l’istruzione CMP (Compare): CMP op1,op2 JNE diversi Salta a diversi se op1 e op2 non sono uguali
Salti condizionati Es 1: Es 2: MOV AX,num CMP sesso,”M” MOV CH,pippo MOV BH,felix SUB CH,BH JZ oltre DIV CH Oltre: MOV CX,20 Es 2: CMP sesso,”M” JNE donna MOV milit,”S” JMP oltre Donna: MOV milit,”N” Oltre: MOV BX,felix ADD AX,BX MOV CX,20
Strutture Condizionali PASCAL IF <condizione> then <istruzioniF1> else <istruzioni F2> V F <condizione> ASSEMBLY ; blocco di selezione J <condizione> Allora ; blocco altrimenti <istruzioni F2> JMP Finesel Allora: ; blocco allora <istruzioni F1> Finesel: ; prosecuzione programma F1 F2 (Es)
Cicli a Contatore c = n c = c-1 c = 0 PASCAL FOR c = 1 TO n DO BEGIN <istruzioni F1> END c = n ASSEMBLY ; blocco di iterazione MOV CX, n Ciclo: <istruzioni F1> LOOP Ciclo ; prosecuzione programma F1 c = c-1 F c = 0 (Es) V
Cicli a Controllo in testa PASCAL WHILE <condizione> DO BEGIN <istruzioni F1> END <istruzioni F2> F Cond. V ASSEMBLY ; blocco di iterazione Ciclo: CMP <condizione> JNE FineCiclo <istruzioni F1> JMP Ciclo FineCiclo: ; prosecuzione programma <istruzioni F2> F1 F2 (Es)