TP N°2 1. 1. Manipulation N° :1 Soit le programme suivant : L’instruction Description MOV AX,FF Charger AX par la valeur FF INC AX Incrumanter AX par 1 JMP FD Sauter à l’adresse (0103) On charge le registre AX par la valeur FF puis on incremente la valeur par 1 puis on repete la tache en sautant a l’adresse instruction ayant l’adresse (0103) Donc l’instruction JMP force le programme d’entrer a une LOOP qui incremente chaque fois la valeur stocké dans AX Etat Résultat step par step : Segements registres DS CS SS ES Générales registres AX BX CX DX Pointers registres BP DI SI SP IP Etat 0050 0050 0000 0050 0000 0000 0000 0000 0000 0000 0000 0500 0100 initial 0050 0050 0000 0050 00FF 0000 0000 0000 0000 0000 0000 0500 0103 1 2 0050 0050 0000 0050 0100 0000 0000 0000 0000 0000 0000 0500 0104 3 0050 0050 0000 0050 0100 0000 0000 0000 0000 0000 0000 0500 0103 4 0050 0050 0000 0050 0101 0000 0000 0000 0000 0000 0000 0500 0104 En mode Go user, le programme reste incrumenter 1 dans le registreAX sans arret 2. 2. Manipulation N° :2 2.1. Calcule : Instruction Description MOV AX,[0220] Charger AX par la valeur ayant l’adresse [0220] Opération logique XOR entre AX et F Incrumanté AX par 1 XOR AX,F INC AX On commence par chargeant le registre AX par la valeur ayant ladresse 0220 qui’était F054, puis on utilise l’operation logique XOR entre F054 et puis on incrumente AX par 1 Execution step par step : Etat Segements registres DS CS SS ES Générales registres AX BX CX DX Pointers registres BP DI SI SP IP Etat 0050 0050 0000 0050 0000 0000 0000 0000 0000 0000 0000 0500 0100 initial 0050 0050 0000 0050 F054 0000 0000 0000 0000 0000 0000 0500 0103 1 2 0050 0050 0000 0050 F05B 0000 0000 0000 0000 0000 0000 0500 0106 3 0050 0050 0000 0050 F05C 0000 0000 0000 0000 0000 0000 0500 0107 2.2. transfert de donnée Instruction Description MOV CL,0A Charge les 8bit low de registre par 0Acharger la valeur 0A dans la partie(LOW,CL) de la registre CX Charger SI(registre d’index source) par la valeur 0100 Charger DI(registre d’index destination) par la valeur 0300 Repeter la transfert des bytes de CX a SI et DI jusq’ou CX=0000 en parallele SI=10A et DI=30A MOV SI,0100 MOV DI,0300 REPZ MOV SB Instruction Description CLD Mettre le drapeau de direction (DF) à 0 MOV AX,0000 Charge Ax par la valeur 0000 MOV DI,0100 Charger DI par la valeur 0100 MOV CX,000A Charger CX par la valeur 000A REPNE SCASB Incrementer DI et decrementer CX jusqu’ou cx=0006 Remarque et conclusion sur TP2 A1 2002 est le code operationel identifié par 8086, pour l’example qu’on a pris A1 est MOV en cas [registre,adresse] ..B8 est utilisé comme MOV en cas [registre,valeur] XOR AX ,F000 comme mnemonique est ecrit 350F00 ou 35 est le codeOP de XOR et 0F00 est le codeOP de F000 .. ici on peut remarquer l’inversion de High vers Low et Low vers High linstruction MOV CL,0A n’a pris que 2 cases memoire car on a chargé la valeur 0A(8bit) dans la partie Low de memoire l’instruction REPZ MOV SB peut etre divisée en deux partie o REPZ(repeat if not equal zero)utilisé pour repeater une action jusqu’ou la valeur initiale soit 0 o MOVESB(move data from string to string) est utilisé pour transfert des donné de SI à DI l’instruction REPNE SCASB est compound de : o REPNE(repeat if not equal )repeter si la resultat ne vaut pas la valeur de la deuxieme operand SCASB(scan string,byte comparaison) utilisé pour rechercher un charactere particulier