La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Système dexploitation : Assembleur Semaine 09 Commandes de transfert Loops & Jumps.

Présentations similaires


Présentation au sujet: "Système dexploitation : Assembleur Semaine 09 Commandes de transfert Loops & Jumps."— Transcription de la présentation:

1 Système dexploitation : Assembleur Semaine 09 Commandes de transfert Loops & Jumps

2 Commande de transfert : LOOP LOOP permet de répéter un traitement un nombre de fois déterminé par la valeur contenue dans le registre compteur CX (boucle) Utilisation : LOOP label Les indicateurs ne sont pas modifiés par LOOP Fonctionnement : – LOOP décrémente CX de 1 puis teste le contenu de CX – Si CX est différent de 0, branchement au label (étiquette approchée - voir remarque ci-après) – Sinon, le programme continue de manière séquentielle Remarque : LOOP occupe 2 octets en mémoire. Premier octet : code opération (E2) Deuxième octet : un déplacement relatif compris entre -128 et 127

3 LOOP - Exemple Écrire une boucle qui incrémente 100 fois la valeur de AX.model small.code mov ax,0 mov cx,100 boucle:inc ax loop boucle mov ah,4ch int 21h end

4 LOOP - Exemple Copie des éléments dun vecteur TAB vers un vecteur TAB2.model small.data tab db 5,4,3,2,1 tab2 db 5 dup(?).code mov mov ds,ax mov cx,5 mov si,0 vect: mov al,tab[si] mov tab2[si],al inc si loop vect mov ah,4ch int 21h end

5 LOOP - Exemple Créer un tableau contenant les entiers de 1 à 300. Calculer la somme des éléments du tableau..model small.data tab dw 300 dup (?) result dw ?.code debut: mov mov ds,ax mov cx,300 mov si,0 mov bx,1 ; chargement du vecteur charge: mov tab[si],bx inc bx add si,2 loop charge... ;calcul de la somme des éléments mov ax,0 mov si,0 mov cx,300 somme: add ax,tab[si] add si,2 loop somme mov result,ax mov ah,4ch int 21h end debut

6 Commandes de transfert : Instructions LOOP conditionnelles LOOPE (ou LOOPZ) – idem LOOP, mais il faut une double condition pour saut au label spécifié – CX != 0 et ZF=1 LOOPNE (ou LOOPNZ) – idem LOOP, mais il faut une double condition pour saut au label spécifié – CX != 0 et ZF=0

7 LOOP conditionnel - Exemple Recherche du caractère c dans une chaîne de caractères – On va comparer le caractère en cours avec c. Pour savoir si la lettre c a été trouvée ou pas, il faut tester la valeur de ZF. Si ZF=0, le caractère na pas été trouvé. Si ZF=1, le caractère a été trouvé.

8 Recherche du caractère c dans une chaîne de caractères.model small.data chainedb recherche du caractère c.code debut :mov mov ds,ax mov cx,24 ; cx reçoit la longueur de la chaîne de caractères mov si,-1 boucle:inc si mov al,chaine[si] sub al,c; ou cmp al,c loopnz boucle ; boucle si pas trouvé et si pas atteint ; la fin de la chaîne de caractères mov ah,4Ch int 21h end debut

9 Commandes de transfert : Jcond (jump conditionnel) JUMP transfère lexécution du programme à ladresse indiquée si la condition exprimée par le code opération est vérifiée. Remarque : – Comme pour LOOP, le déplacement doit être court (-128 à +127). Utilisation : Jcond label – on aura E pourequalZ pourzero G pour greaterS poursign flag = 1 L pour less thanO pour overflow flag = 1 A pour aboveC pour carry flag = 1 B pour belowP pour parity flag =1 N pour not

10 Mnémoniques à utiliser après une comparaison CMP A,B ConditionNb signésNb non signés Jump si A = BJEZF = 1JEZF = 1 A < BJLSF OFJBCF = 1 A > BJGZF = 0 et SF = OFJACF = 0 et ZF = 0 A BJNEZF = 0JNEZF = 0 A BJNGZF = 1 ou SF OFJNACF = 1 ou ZF = 1 A BJNLSF = OFJNBCF = 0

11 Mnémoniques à utiliser après une autre instruction arithmétique que CMP (exemple : ADD A,B ) ConditionNb signésNb non signés Jump si = 0JZZF = 1JZZF = 1 < 0JSSF = 1Pas de sens !! > 0Utiliser JNZ et JNSJNZZF = 0 0JNZZF = 0JNZZF = 0 0JNSSF = 0Toujours 0 Dépassement de capacitéJOOF = 1JCCF = 1 Pas de dépassement de capacité JNOOF = 0JNCCF = 0

12 Instruction de branchement inconditionnel : JMP Instruction de branchement inconditionnel à ladresse spécifiée Contrairement à Jcond, JMP peut brancher vers nimporte quel emplacement mémoire 2 grandes catégories de branchements : – intrasegment (seul IP est modifié) – intersegments (CS et IP sont modifiés) – Pour ces 2 catégories, il existe JMP direct ou JMP indirect JMP intrasegment direct cas le plus simple et le plus courant – lopérande est un symbole near – near signifie à lintérieur du segment – near est lié au symboles suivi de « : » Si symbole est un short label (-128 à +127), JMP est codé sur 2 octets Sinon, JMP codé sur 3 octets (1 pour code opération et 2 pour le déplacement) JMP intrasegment indirect Lopérande nest pas un symbole near, mais un registre ou une référence à une donnée en mémoire. JMP indirect = lopérande contient ladresse de branchement exemple : JMP table[SI]


Télécharger ppt "Système dexploitation : Assembleur Semaine 09 Commandes de transfert Loops & Jumps."

Présentations similaires


Annonces Google