1 / 12

Système d’exploitation : Assembleur

Système d’exploitation : Assembleur. Semaine 09 Commandes de transfert Loops & Jumps. 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

tyra
Télécharger la présentation

Système d’exploitation : Assembleur

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Système d’exploitation : 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 movax,0 movcx,100 boucle: incax loop boucle mov ah,4ch int 21h end

  4. LOOP - Exemple • Copie des éléments d’un vecteur TAB vers un vecteur TAB2 .model small .data tab db 5,4,3,2,1 tab2 db 5 dup(?) .code movax,@data movds,ax movcx,5 mov si,0 vect: moval,tab[si] mov tab2[si],al inc si loopvect 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 (?) resultdw ? .code debut: movax,@data movds,ax movcx,300 mov si,0 movbx,1 ; chargement du vecteur charge: mov tab[si],bx incbx add si,2 loop charge . . . . . . ;calcul de la somme des éléments movax,0 mov si,0 movcx,300 somme: addax,tab[si] add si,2 loop somme movresult,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 n’a 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 chaine db “recherche du caractère c” .code debut : movax,@data movds,ax movcx,24 ; cx reçoit la longueur de la chaîne de caractères mov si,-1 boucle: inc si moval,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 l’exécution du programme à l’adresse 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 pour equal Z pour zero G pour greater S pour sign flag = 1 L pour lessthan O pour overflow flag = 1 A pour above C pour carry flag = 1 B pour below P pour parity flag =1 N pour not

  10. Mnémoniques à utiliser après une comparaison CMP A,B

  11. Mnémoniques à utiliser après une autre instruction arithmétique que CMP (exemple : ADD A,B)

  12. Instruction de branchement inconditionnel : JMP • Instruction de branchement inconditionnel à l’adresse spécifiée • Contrairement à Jcond, JMP peut brancher vers n’importe 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 • l’opérande est un symbole near • near signifie à l’inté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 L’opérande n’est pas un symbole near, mais un registre ou une référence à une donnée en mémoire. JMP indirect = l’opérande contient l’adresse de branchement exemple : JMP table[SI]

More Related