Chapitre 2
Chapitre 2
Chapitre 2
OU logique : OR opérande1,opérande2
L’opération effectuée est : opérande1 ← opérande1 OU opérande2.
Application : mise à 1 d’un ou plusieurs bits dans un mot.
Exemple : dans le mot 10110001, on veut mettre à « 1 » les bits 1 et 3 sans modifier les
autres bits.
entrée d’un 0 à la place du bit de poids fort ; le bit sortant passe à travers l’indicateur
de retenue CF.
Remarque : si le nombre de bits à décaler est supérieur à 1, ce nombre doit être placé
dans le registre CL ou CX.
Exemple : décalage de AL de trois positions vers la droite :
entrée d’un 0 à la place du bit de poids faible; le bit sortant passe à travers
l’indicateur de retenue CF.
Même remarque que précédemment si le nombre de positions à décaler est supérieur à
1.
Décalage arithmétique vers la droite : SAR opérande,n
Ce décalage conserve le bit de signe bien que celui-ci soit décalé.
Exemple :
Remarque : il existe un autre type de saut conditionnel, les sauts arithmétiques. Ils
suivent en général l’instruction de comparaison : CMP opérande1,opérande2
Déclaration des
variables
Les variables se déclarent dans le Data Segment de la manière suivante:
msg db "la somme des termes de tab est : $" ; msg est une chaine de caractère
Interruptions de saisie
et d’affichage
Pour réaliser les opérations standards (affichage, saisie), on utilise les fonctions pré-
écrites suivantes:
Affichage d’un caratère: mov DL, “A”; caractère A est transfére dans DL
mov AH, 2; fonction no. 2
int 21h ; appel au DOS
Affichage d’une chaine de caractères:
mov DX, offset chaine; ou bien Lea DX, offset chaine
mov AH, 09; fonction no. 9
int 21h;
Correction
TD1/EX4
2/ Ecrire un jeu d’instruction qui permet de faire la multiplication (15*6) en décimal.
Jeu d’instructions
ORG 100h ; Le programme sera rangé à 100h octets à partir du début du segment de code
;************ Déclaration des variables ****************************************
;************ Début du programme *******************************************
mov dl,3fh ; Place la valeur 3fh dans le registre dl
mov ah,2h ; Place la valeur 2h dans le registre ah
int 21h ; Appel d’un service du DOS
int 20h ; Appel d’un service du DOS (Fin normale d'un programme)
ret
Exemple 2 avec Emul86
Table ASCI
TD1 (EX5)
un programme assembleur permettant d’afficher (mov AH=02, int 21H)
l’alphabet en majuscule.
code segment
assume cs:code
ORG 100h
START: jmp debut
;************ Déclaration des variables ****************************************
;************ Début du programme *******************************************
code segment
assume cs:code
ORG 100h
START: jmp debut
;************ Déclaration des variables ****************************************
Tab db 3 dup (?) ; tab db 3 ?
A db ?
B db ?
C db ?
Mess1 db ‘OUI, A B et C peuvent former un triangle $’
Mess2 db’ NON, vérifier vos valeurs.$’
6/ Faire la somme des éléments d’un tableau (10,20,30;40,50,60,70,80,90) et afficher : La somme des éléments de ce tableau est : 450
=01C2hvec AH=09 et AH=02 de interruption int 21h
Remarque : la valeur du pointeur de pile (SP) doit être initialisée par le programme
principal avant de pouvoir utiliser la pile.
Utilisation de la pile pour le passage de paramètres : pour transmettre des paramètres à une
procédure, on peut les placer sur la pile avant l’appel de la procédure, puis celle-ci les
récupère en effectuant un adressage basé de la pile en utilisant le registre BP.
Exemple : soit une procédure effectuant la somme de deux nombres et retournant le
résultat dans le registre AX .
programme principal : procédure somme :
Pile
Sommet
Correction TD3
;************ Déclaration des variables ****************************************