©Pierre Marchand, Objectifs : Vous apprendrez comment sont implantées les structures de contrôle des langages de haut niveau. Pour y arriver, vous aurez atteint les objectifs suivants : - savoir implanter les structures if-then-else, for, while, switch. - décrire comment les branchements s'effectuent en fonction de la valeur des indicateurs. Unité A3: Structures de contrôle
©Pierre Marchand, Structures de contrôle 5.1 Principales structures de contrôle Saut inconditionnel jmpétiquette; continue lexécution à étiquette Sauts conditionnels jeétiquette; jump if equal jlétiquette; jump if less jleétiquette; jump if less or equal jgétiquette; jump if greater jgeetiquette; jump if greater or equal Unité A3: Structures de contrôle
©Pierre Marchand, Structures de contrôle 5.1 Principales structures de contrôle Autres sauts conditionnels jneétiquette; jump if not equal jnlétiquette; jump if not less = jge jnleétiquette; jump if not less or equal = jg jngétiquette; jump if not greater = jle jngeetiquette; jump if not greater or equal = jl Unité A3: Structures de contrôle
©Pierre Marchand, Structures de contrôle 5.1 Principales structures de contrôle if (a > b) {if:cmpa,b …jngelse… }… else{jmpendif …else:…… } …endif:… Unité A3: Structures de contrôle
©Pierre Marchand, Structures de contrôle 5.1 Principales structures de contrôle if (a > b) && (c <= d) {if:cmpa,b …jngendif …cmpc,d }jnleendif…...… endif:… … Unité A3: Structures de contrôle
©Pierre Marchand, Structures de contrôle 5.1 Principales structures de contrôle while (a > b) {while:cmpa,b …jleendwhile… }… jmpwhile endwhile:… Unité A3: Structures de contrôle
©Pierre Marchand, Structures de contrôle 5.1 Principales structures de contrôle for (i = 1; i <= 10; i++) {for:movi,1 …jmptest …next:…… }inci …test:cmpi,10 jlenext endfor:… Unité A3: Structures de contrôle
©Pierre Marchand, Structures de contrôle 5.1 Principales structures de contrôle switch (i) {switch: case 1:…case1:cmpi,1 …jnecase2 … break; jmpendswitch case 2:… case2:cmpi,2... jnedefault … break; jmpendswitch default:…default:… }endswitch:... … Unité A3: Structures de contrôle
©Pierre Marchand, Structures de contrôle 5.2 Branchements Lors d'une comparaison, par exemple cmp a,b, le processeur effectue la soustraction a – b et positionne les indicateurs selon le résultat de l'opération. Les indicateurs qui nous intéressent ici sont : ZF = zero flag = 1 si le résultat est nul, sinon ZF = 0, CF = carry flag = 1 si une retenue est générée, sinon CF = 0, SF = sign flag = 1 si le résultat est négatif, sinon SF = 0, OF = overflow flag = 1 s'il y a débordement de capacité, sinon OF = 0 On rappelle quun débordement de capacité se produit seulement si les deux opérandes sont de même signe et que le résultat de lopération est de signe différent. Unité A3: Structures de contrôle
©Pierre Marchand, Structures de contrôle 5.2 Branchements Pour mieux comprendre comment ces indicateurs sont affectés, examinons ce qui se passe lors d'une addition. Cas ExempleSFZFOFCF 1.P + P = P = P+ P = N * = P+ N = P70 + F0 = P+ N = N = E N+ N = P *A = N+ N = NF0 + E0 = D01001 Les nombres sont en hexadécimal * Pas possible en arithmétique ordinaire Unité A3: Structures de contrôle
©Pierre Marchand, Structures de contrôle 5.2 Branchements Voyons maintenant ce qui se passe lors d'une soustraction (comparaison) : Cas Exemple*SFZFOFCF 1.P - P = P = P - P = N = E P - N = P50 - F0 = P - N = N * = A N - P = P *B = N - P = NA = N - N = PC0 - A0 = N - N = NA0 - F0 = B01001 Unité A3: Structures de contrôle
©Pierre Marchand, Structures de contrôle 5.2 Branchements A > B non signé Exemple CasSFZFOFCF A > 0 et B > = 40P - P = P0000 A = 70N - P = P0010 A = 80N - P = N1000 A < 0 et B < = 10N - N = P0000 Unité A3: Structures de contrôle
©Pierre Marchand, Structures de contrôle 5.2 Branchements On peut dériver de la sorte les conditions suivantes pour des quantités non signées : a (above)ZF = 0 et CF = 0 ae (above or equal)CF = 0 b (below) CF = 1 be (below or equal)CF = 1 ou ZF = 1 Unité A3: Structures de contrôle
©Pierre Marchand, Structures de contrôle 5.2 Branchements Cas de quantités signées en complément à 2 : A > B signé Exemple CasSFZFOFCF A > 0 et B > 0: = 40P - P = P0000 A > 0 et B < 0: 50 - F0 = 60P - N = P0001 A > 0 et B < 0: = C0P - N = N1011 A < 0 et B < 0: F = 60N - N = P0000 Unité A3: Structures de contrôle
©Pierre Marchand, Structures de contrôle 5.2 Branchements Cas de quantités signées en complément à 2 : On peut ainsi dériver les conditions suivantes pour les quantités signées : g (greater) ZF = 0 et SF = OF ge (greater or equal)SF = OF l (less)SF OF le (less or equal)ZF = 1 ou SF OF Unité A3: Structures de contrôle
©Pierre Marchand, Structures de contrôle 5.2 Branchements Il faut bien prendre garde d'utiliser le bon branchement selon le type de données considéré. En C, les variables sont signées par défaut. Pour avoir des variables non signées, on utilise la déclaration unsigned. Exemples : unsigned char x;0 x 255 unsigned short y;0 y unsigned long z; 0 z char x;-128 x 127 short y; y long z; z Unité A3: Structures de contrôle
©Pierre Marchand, Structures de contrôle 5.2 Branchements En assembleur, cest le type de branchement, signé ou non signé qui détermine le comportement signé ou non signé des opérations. Unité A3: Structures de contrôle
©Pierre Marchand, Structures de contrôle 5.2 Branchements Branchements inconditionnels call; appel de sous-programme jmp; saut ret, retn, retf, iret; retour (near, far), retour dinterrution Unité A3: Structures de contrôle
©Pierre Marchand, Structures de contrôle 5.2 Branchements Branchements conditionnels simples je; jump if equal: ZF = 1 jne; jump if not equal:ZF = 0 jz; jump if zero: ZF = 1 jnz; jump if not zero:ZF = 0 Exemple : testeax, eaxou cmpeax, 0 jezero Unité A3: Structures de contrôle
©Pierre Marchand, Structures de contrôle 5.2 Branchements Branchements conditionnels non signés ja; jump above (x > y non-signé )CF = 0 & ZF = 0 jna; jump not above = jbe jae; jump above or equalCF = 0 jnae; jump not above or equal = jb jb; jump below (x < y non-signé) CF = 1 jnb; jump not below = jae jbe; jump below or equal CF = 1 | ZF = 1 jnbe; jump not below or equal = ja Unité A3: Structures de contrôle
©Pierre Marchand, Structures de contrôle 5.2 Branchements Branchements conditionnels signés jg; jump greater (x > y signé) SF = OF & ZF = 0 jng; jump not greater SF OF & ZF = 1 jge; jump greater or equal SF = OF jnge; jump not greater or equal = jl jl; jump less (x < y signé) SF OF jnl; jump not less = jge jle; jump less or equal SF OF jnle; jump not less or equal = jg Unité A3: Structures de contrôle
©Pierre Marchand, Structures de contrôle 5.2 Branchements Branchements sur les indicateurs jc; jump if carry: CF = 1 jnc; jump if not carry: CF = 0 jo; jump if overflow: OF = 1 jno; jump if not overflow: OF = 0 jp; jump if parity: PF = 1 jnp; jump if not parity:PF = 0 jpo; jump if parity odd: PF = 0 js; jump if sign: SF = 1 (negative) jns; jump if no sign:SF = 0 Unité A3: Structures de contrôle
©Pierre Marchand, Structures de contrôle 5.2 Branchements Branchements conditionnels sur compteur C jcxz; jump if cx = 0 jecxz; jump if ecx = 0 Unité A3: Structures de contrôle