Lycée technique Ibn Sina
BTS DSI 2011-2012
TP N° 2 : Assembleur 8086 Objectifs • Premières gestion des entrées/sorties
• Les branchements en assembleur • Les boucles en assembleur
Exercice 1 : Ecriture d’un programme avec Entrées/Sorties Pour la gestion des entrées (lecture de texte au clavier) ou les sorties (affichage à l’écran), nous allons utiliser les interruptions DOS. Il ne vous est pas demandé de connaître le fonctionnement interne des interruptions mais d’être capable d’utiliser celles-ci (de la même manière que vous êtes capable d’utiliser Windows sans en connaître le fonctionnement en détail). En assembleur, on appelle/exécute une interruption à l’aide de la commande INT. Cette instruction à un seul paramètre qui est le numéro de l’interruption. La valeur de ce numéro étant codé sur 8 bit, seul 255 interruptions différentes sont possibles (noté de 0 à FFh). Par exemple, INT 8 appelle l’interruption numéro 8. Pour ne pas être limité à cette valeur, chaque interruption va également lire une valeur dans un registre (dans notre cas ça sera AH) qui lui indique quelle sous interruption est réellement appelé. Par exemple, AH, 01h / INT 21h permet de lire un caractère au clavier alors que AH, 02h / INT 21h permet d’afficher un caractère à l’écran. Regardons maintenant quelques exemples d’interruption DOS : – Exemple 1 : lecture d’un caractère au clavier – MOV AH, 01H – INT 21H Cette fonction permet de lire un caractère sur l’entrée standard. Ce caractère est récupéré sous la forme de son code ASCII dans AL. • Entrée : AH = 01h • Sortie : AL = contient le code ASCII du caractère saisi au clavier – Exemple 2 : affichage d’un caractère à l’écran – MOV DL, ’A’ – MOV AH, 02H – INT 21H Cette fonction permet de sortir (afficher) un caractère sur la sortie standard. Ce caractère doit être stocké sous la forme de son code ASCII dans DL. • Entrée : AH = 02h • DL = Code ASCII du caractère à afficher – Exemple 3 : Lecture d’un caractère au clavier – MOV DL, offset MaChaine – MOV AH, 09H – INT 21H Cette fonction permet d’afficher une chaîne de caractères sur la sortie standard. Cette chaîne doit être stockée sous la forme d'une séquence d'octets correspondant aux codes ASCII des caractères composant la chaîne. La fin de la chaîne de caractères doit être signalée à l'aide du caractère '$'. • Entrée : AH = 09h • DS = Adresse de segment de la chaîne de caractères • DX = Adresse d'offset de la chaîne de caractères
1.1 Version A
Prof : A. El magri
1/3
Lycée technique Ibn Sina
BTS DSI 2011-2012
Ecrivez un programme ex1a.asm qui fait la somme de 2 valeurs (entre 0 et 4) qui seront lues au clavier. Ensuite vous afficherez le résultat (entre 0 et 8) à l’écran.
1.2 Version B Ecrivez un programme ex1b.asm qui fait la somme de 2 valeurs (entre 0 et 9) qui seront lues au clavier. Un message d’invite sera affiché avant la lecture des valeurs au clavier. Ensuite vous afficherez le résultat (entre 0 et 18) à l’écran avec un message clair.
1.3 Version C Ecrivez un programme ex3c.asm qui est une extension du programme précédent dans lequel vous gérerez la lecture clavier d’un nombre sur 8 bits (entre 0 et 255) et dont le résultat pourra être entre 0 et 510.
Exercice 2 : Les boucles Convertissez les algorithmes ci-dessous en assembleur.
2.1 IF….THEN….ELSE If
(AX>BX) { Max = AX }else{ Max = BX }
2.2 La boucle FOR BX = 5 AX = 2 For (CX=0 ; CX<BX ; CX++){ AX += CX }
2.3 La boucle WHILE AX = 0 CX = 0 while ( AX < 10){ CX += 2*AX AX++ }
2.4 La boucle REPEAT BX = 5 Repeat 10 { BX += BX }
2.5 Le test SWITCH Switch (AX) { case 1:
Prof : A. El magri
BX =1 ; break;
2/3
Lycée technique Ibn Sina
case 2: case 3: default: }
BTS DSI 2011-2012 BX = 5 ; break ; BX = 10; break; BX = 0;
Exercice 3 : Etude des branchements en assembleur Complétez le programme TP2_ex3.asm qui se trouve ci joint pour qu’il respecte les commentaires. Quel est la valeur de Re obtenue ? Sans modifier le code de votre programme, juste en changeant les valeurs de N1, N2, N3, N4, obtenez 11 comme valeur finale pour Re.
Exercice 4 : Les instructions de branchement Soit un ensemble de programmes ayant le même segment de données. Data Segment Tab1 Tab2 Tab3 resTab1 resTab2 resTab3 resTab4
DB DB DB DB DB DB DB
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1 16,13,10,8,1,15,3,2,5,4,8,9,7,14,11,12 16 DUP (0) 16 DUP (0) 16 DUP (0) 48 DUP (0)
Ecrivez les programmes suivants : • Le tableau resTab1 contient le tableau Tab1 ou l’on a ajouté 1 aux nombres impaires (idem pour resTab2 et resTab3) • Le tableau resTab1 contient le tableau Tab1 ou l’on a enlevé 10 aux nombres impaires (idem pour resTab2 et resTab3) et resTab4 contient les tableaux resTab3 puis resTab2 et enfin resTab1 en sens inverse (de la fin au début). Si un nombre de resTab1, resTab2 ou resTa3 est négatif, on stockera 0 à sa place. • Le tableau resTab1 contient le tableau Tab1 ou l’on a ajouté 120 aux nombres paires (idem pour resTab2 et resTab3) et resTab4 contient les tableaux resTab3 puis resTab2 et enfin resTab1 en sens inverse (du début à la fin). Si un nombre de resTab1, resTab2 ou resTa3 est supérieur à 127, on stockera 127 à sa place.
Prof : A. El magri
3/3