Laboratoire Microprocesseur 8086 à Reva ITM
Laboratoire Microprocesseur 8086 à Reva ITM
&
GESTION, Bangalore
IV Semestre B.E.
(CSE/ISE)
Livres à consulter :
1. Microprocesseurs et Interfaçage - 2ème Édition, Douglas V Hall
2. Programmation en langage d'assemblage IBM PC - Peter Abel
3. Programmation de Microprocesseur X86–K R Venugopal
4. Programmation en langage d'assemblage d'IBM PC et microprocesseur avancé – Uday Kumar K
Théorie :
Un microprocesseur est un dispositif logique numérique programmable fabriqué sur un seul
Une puce VLSI capable d'effectuer un ensemble d'opérations arithmétiques et logiques selon le
instructions fournies par l'utilisateur.
L'utilisateur écrit ses programmes en utilisant des mots semblables à l'anglais (appelés 'mnémotechniques') et
est connu sous le nom de « programme en langage d'assemblage » (ALP).
Un logiciel appelé "Assembleur" convertit le code source d'utilisateur en forme hexadécimale/binaire (appelée
UNITÉ D'EXÉCUTION :
L'unité d'exécution se compose de : registres à usage général (mémoire tampon) AX, BX, CX et DX ;
Les registres pointeurs SP (pointeur de pile) et BP (pointeur de base) ; les registres d'index source (SI) &
registres d'index de destination (DI); le registre des drapeaux, l'UAL pour effectuer des opérations et une unité de contrôle
avec un bus interne associé. Les registres de mémoire tampon de 16 bits peuvent être divisés en deux registres de 8 bits.
AX AL, AH ; BX BL CL, CH; DX DL, DH.
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur adjoint, Département d'ISE Page 2 sur 56
Laboratoire de microprocesseur (8086) Dépt de CSE/ISE, Reva ITM, Bangalore
S'inscrire Utilisations/Opérations
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur adjoint, Département de l'ISE Page 3 de 56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
AX En tant qu'accumulateur dans les opérations de multiplication et de division de mots, E/S de mots
opérations
AL En tant qu'accumulateur dans la multiplication de bytes, la division de bytes, l'entrée/sortie de bytes, traduire,
Arithmétique décimale
AH Byte Multiply, Byte Divide
BX Comme registre de base pour tenir l'adresse de la mémoire
CX Opérations sur les chaînes, en tant que compteur dans les boucles
DX Multiplier
MP 8086/8088 MEMORY
00000016
IP Pointeur d'instruction
AX AH AL
Segment de pile (64 Ko)
BX Être BL
CX CE CL
Segment supplémentaire (64 Ko)
DX DH DL
SR Registre d'état
--------------------------------------------------------------------
Compilé par : L. Krishnananda, professeur adjoint, département d'ISE Page4de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
BIT 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
U U U U DE DF SI TF SF ZF U AF U PF U CF
(b)
(c)
(d)
(e)
(f)
(g)
(h)
(i)
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur adjoint, Département d'ISE Page5de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
ADRESSE LOGIQUE
SERPENT
Modèles de programmation :
En fonction de la taille de la mémoire occupée par le programme utilisateur, différents types d'assemblage
les modèles de langage sont définis.
ÉDITEUR
C'est un logiciel système (programme) qui permet aux utilisateurs de créer un fichier contenant de l'assemblage.
instructions et déclarations. Ex: Wordstar, éditeur DOS, éditeur Norton
Avec l'éditeur, vous pouvez également éditer/supprimer/modifier des fichiers déjà existants.
Lors de l'enregistrement, vous devez donner l'extension du fichier sous la forme « .asm ».
Suivez la syntaxe AL en tapant les programmes
L'éditeur stocke les codes ASCII pour les lettres et les chiffres saisis.
Toute déclaration commençant par un point-virgule est considérée comme un commentaire.
Lorsque vous avez tapé tout votre programme, vous devez enregistrer le fichier sur le disque. Ce fichier s'appelle
Un fichier "source", ayant une extension '.asm'. La prochaine étape consiste à convertir ce fichier source en machine.
fichier exécutable '.obj'.
--------------------------------------------------------------------
Compilé par : L. Krishnananda, professeur assistant, département d'ISE Page6de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
2. ASSEMBLEUR
Un "assembleur" est un logiciel système (programme) utilisé pour traduire le langage d'assemblage.
mnémotechniques pour les instructions correspondant aux codes binaires.
Un assembleur effectue deux 'passages' dans votre code source. Lors du premier passage, il détermine le
déplacement des éléments de données nommés, le décalage des étiquettes, etc., et place ces informations dans un
table des symboles. Lors du deuxième passage, l'assembleur produit le code binaire pour chaque instruction
et insère les décalages, etc., qui sont calculés lors du premier passage. L'assembleur vérifie pour le
corrige la syntaxe dans les instructions d'assemblage et fournit des avertissements et des erreurs appropriés
messages. Vous devez ouvrir à nouveau votre fichier avec l'éditeur pour corriger les erreurs et le réassembler
il utilisant l'assembleur. À moins que toutes les erreurs ne soient corrigées, le programme ne peut pas être exécuté dans le
prochaine étape.
L'assembleur génère deux fichiers à partir du fichier source ; le premier fichier, appelé fichier objet, ayant
une extension « .obj » qui contient les codes binaires pour les instructions et des informations sur le
adresses des instructions. Le deuxième fichier s'appelle "fichier liste" avec une extension "'.lst". Ceci
le fichier contient les instructions en langage d'assemblage, les codes binaires pour chaque instruction, et le
décalage pour chaque inst. Il indique également toute erreur de syntaxe ou dactylographie dans le programme source.
Remarque :L'assembleur génère uniquement des décalages (c'est-à-dire des adresses effectives) ; pas d'adresses physiques absolues.
adresses.
3. LIAISON :
C'est un programme utilisé pour joindre plusieurs fichiers objets en un grand fichier objet. Pour les grands programmes,
généralement, plusieurs modules sont écrits et chaque module est testé et débogué. Lorsque tous les
les modules fonctionnent, leurs modules d'objet peuvent être liés ensemble pour former un ensemble fonctionnel complet
programme.
Le programme LINK doit être exécuté sur un fichier ".obj".
L'éditeur de liens produit un fichier de lien qui contient les codes binaires de tous les modules combinés.
L'éditeur produit également un fichier de carte de liaison qui contient les informations d'adresse concernant le lié.
fichiers.
Le lieur assigne uniquement des adresses relatives à partir de zéro, de sorte que cela puisse être placé n'importe où dans
La mémoire primaire physique plus tard (par un autre programme appelé 'localisateur' ou 'chargeur'). Par conséquent, cela
Le fichier s'appelle relocalisable. L'éditeur de liens produit des fichiers de liaison avec l'extension ".exe".
Les modules d'objet de programmes utiles (comme la racine carrée, le factoriel, etc.) peuvent être conservés dans une "bibliothèque".
et lié à d'autres programmes si nécessaire.
4. CHARGEMENT
C'est un programme utilisé pour attribuer des adresses physiques absolues aux segments dans le fichier ".exe".
la mémoire. L'environnement IBM PC DOS est livré avec le programme de chargement EXE2BIN. Le ".exe"
le fichier est converti en fichier « .bin ».
--------------------------------------------------------------------
Réalisé par : L. Krishnananda, Professeur Assistant, Département d'ISE Page7de56
Laboratoire de microprocesseur (8086) Dépt de CSE/ISE, Reva ITM, Bangalore
Les adresses physiques sont attribuées au moment de l'exécution par le chargeur. Donc, l'assembleur ne sait pas
à propos des adresses de début de segment au moment où le programme est assemblé.
5. DÉBOGUEUR :
Si votre programme ne nécessite aucun matériel externe, vous pouvez utiliser un programme appelé débogueur pour charger
et exécutez le fichier «.exe».
Un débogueur est un programme qui vous permet de charger votre programme de code objet dans le système.
mémoire, exécuter le programme et résoudre les problèmes ou déboguer. Le débogueur vous permet également de
regardez le contenu des registres et des emplacements mémoire après avoir exécuté votre programme.
Le débogueur vous permet de changer le contenu des registres et des emplacements mémoire et de relancer le
programme. De plus, il facilite la mise en place de « points d'arrêt » dans votre programme, la fonctionnalité de pas à pas, et
autres fonctionnalités faciles à utiliser.
Si vous utilisez une carte SDK 86 prototype, le débogueur est généralement appelé « programme de surveillance ».
Nous utiliserions l'outil de développement MASM 5.0 ou une version supérieure de Microsoft Inc.
MASM signifie Assembleur Macro Microsoft. Un autre assembleur, TASM (Turbo Assembler) de
Borland Inc., est également disponible.
types de périphériques externes tels que : ADC, DAC, moteur, LED, afficheurs à 7 segments, clavier,
Commutateurs, etc. Il a 3 ports A, B et C et un registre de mot de contrôle. L'utilisateur peut programmer l'opération.
des ports en écrivant un "mot de contrôle" approprié de 8 bits dans le registre du mot de contrôle.
Bits→ D7 D6 D5 D4 D3 D2 D1 D0
3. À l'invite, tapez la commande MASM suivie de [Link] (par exemple, [Link]). Appuyez sur Entrée
appuyez sur la touche 2 ou 3 fois. L'assembleur vérifie la syntaxe de votre programme et crée un fichier ".obj" si
--------------------------------------------------------------------
Élaboré par : L. Krishnananda, Professeur adjoint, Département d'ISE Page8de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
s'il n'y a pas d'erreurs. Sinon, cela indique l'erreur avec les numéros de ligne. Vous devez corriger les erreurs en
ouvrez votre fichier avec la commande EDIT et modifiez vos instructions. Revenez à l'invite DOS
et encore assemblez votre programme en utilisant la commande MASM. Cela doit continuer jusqu'à ce que MASM
affiche "0 Erreurs Sévères". Il peut encore y avoir des "Erreurs d'Avertissement". Essayez aussi de les corriger.
4. Une fois que vous avez le fichier ".obj" de l'étape 3, vous devez créer le fichier ".exe". À l'invite, tapez
la commande LINK suivie de "[Link]" (par exemple, [Link]) puis appuyez sur la touche Entrée. (Notez que vous
doit maintenant donner l'extension comme « .obj » et non « .asm »). S'il n'y a pas d'erreurs de liaison, le lien va
créez un fichier .exe de votre programme. Maintenant, votre programme est prêt à être exécuté.
contenu de mémoire, la commande "E" pour entrer des données dans la mémoire et la commande "g" pour exécuter votre
programme. De plus, vous pouvez exécuter votre programme étape par étape en utilisant les options du menu. De nombreuses manières, CV
Une fois que vous êtes familiarisé avec l'architecture et les bases des outils de langage d'assemblage, vous pouvez commencer
taper et exécuter votre programme.
2. Créez votre propre sous-répertoire sur l'ordinateur. Éditez (tapez) les programmes avec le numéro de programme et
placez-les dans votre sous-répertoire. Ayez une copie des fichiers [Link], [Link] et [Link] dans votre
sous-répertoire. Vous pouvez écrire des commentaires pour vos instructions en utilisant le symbole point-virgule (;).
3. Exécutez les programmes selon les étapes discutées précédemment et notez les résultats dans votre carnet d'observation.
4. Apportez des modifications au programme original selon les questions posées À LA FIN de chaque programme.
et observez les résultats.
5. Pour les programmes de la partie A, l'entrée-sortie se fait par le clavier et l'écran de l'ordinateur ou par la mémoire.
6. Pour les programmes de la partie B, vous avez besoin d'une carte d'interface externe. Connectez la carte à l'ordinateur en utilisant
le FRC disponible. Certaines cartes peuvent également nécessiter une alimentation externe.
8. L'assembleur n'est pas sensible à la casse. Cependant, nous avons utilisé la notation suivante : lettres majuscules
pour indiquer les noms d'enregistreurs, les mnémoniques et les directives d'assembleur ; les lettres minuscules pour indiquer les variables
--------------------------------------------------------------------
Élaboré par : L. Krishnananda, Professeur adjoint, Département d'ISE Page 9 sur 56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
Titre 1a. Rechercher un élément clé dans une liste de N nombres de 16 bits en utilisant la recherche binaire
algorithme
.données ; zone de segment de données. Définissez toutes les variables et messages ici
gros : JE succès
--------------------------------------------------------------------
Rassemblé par : L. Krishnananda, Professeur Assistant, Département d'ISE Page 10 de 56
Laboratoire de microprocesseur (8086) Dept de CSE/ISE, Reva ITM, Bangalore
disp: MOV AH, 09H ; Interruption de logiciel DOS pour afficher le message
INT 21H
FIN
.modèle petit
.pile
.donnée
cw EQU 82h ; Mot de contrôle pour 8255. Faire de PA une sortie et de PB une entrée
Nombre de 1 = $
MOV DX, pb ; Lecture de l'état du commutateur du contrôleur logique à travers le port B de l'8255
DANS AL, DX
--------------------------------------------------------------------
Élaboré par : L. Krishnananda, Professeur adjoint, Département d'ISE Page11sur56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
Compteur JMP
compte JMP
Questions d'exercice :
1. Modifiez le prob 1a pour un ensemble de N nombres de 8 bits.
2. Modifiez le problème 1a pour accepter la valeur 'clé' de la mémoire.
3. Modifiez le problème 1b pour afficher les messages 'parité paire' et 'parité impaire' sur l'écran
4. Nommez différents algorithmes de recherche.
5. Écrivez le schéma de bloc de l'8255 PPI et expliquez.
6. Écrivez le format du mot de contrôle de l'8255 et expliquez.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur Assistant, Département d'ISE Page 12 sur 56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
LEA DX, msg1 afficher une chaîne à l'écran en utilisant les interruptions DOS
MOU AH, 09h
INT 21h
MOV SI, 0
encore : disp arr[SI] ; Macro invoquée pour afficher un caractère à l'écran
INC SI
CMP AL, 13 jusqu'au retour à la ligne
JNZ encore
MOU AH, 4CH
INT 21H
FIN commencer ; si une étiquette est donnée au début, END doit être suivi de l'étiquette
; les codes suivants sont écrits séparément avec un nom de fichier [Link]
--------------------------------------------------------------------
Élaboré par : L. Krishnananda, Professeur adjoint, Département de l'ISE Page13de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
disp MACRO var ; définition de macro pour afficher un caractère sur l'écran
MOV AH, 01h ; Interruption du logiciel DOS pour lire un caractère du clavier
INT 21h
MOV c, AL valeur ASCII du caractère stocké dans la variable c
FIN
__________________________________________________
titre 2b Effectuer les opérations de compteur BCD up/down (00-99-00) et de compteur circulaire
; utilisant le Contrôleur de Logique
.modèle petit
.pile
.données
pa EQU 0d400h
pb ÉQU 0d401h
pc ÉQU 0d402h
cr ÉQU 0d403h
cw EQU 82h
MOV DX, cr
MOV AL, cw ; définir le port B 8255 comme entrée et le port A comme sortie
SORTIR DX, AL
MOV BL, 00h ; BL maintient le compte pour le compteur BCD montant et descendant
de nouveau : MOV DX, pb ; lire la position du commutateur depuis le contrôleur logique en utilisant le port B
DANS AL, DX
CMP AL, 0ff h ; régler ff sur le tableau d'interface en utilisant les interrupteurs pour HAUT
compteur
--------------------------------------------------------------------
Compilé par : L. Krishnananda, professeur associé, département d'ISE Page14de56
Laboratoire de microprocesseurs (8086) Département de CSE/ISE, Reva ITM, Bangalore
JE en haut
CMP AL, 0fe h ; définir l'entrée fe pour le compteur BCD vers le bas
JE vers le bas
MOUV AH, 4C h ; terminer le programme si une autre entrée de commutateur est donnée
INT 21h
déplace AL, BL Compteur BCD UP
APPELER disp Transférer le contrôle à une procédure nommée disp
AJOUTER AL, 1 compte incrémentiel
DAA ; changer le résultat en décimal après l'addition
MOU BL, AL
JMP encore ; revenez en arrière et vérifiez les entrées de commutation
disp PROC PROCIMITE ; procédure pour afficher le résultat sur le port 8255
MOV DX, pa
OUT DX, AL
retard d'appel ; appeler une autre procédure nommée délai
RET ; retourner au programme appelant
disp ENDP
Questions d'exercice :
1. Modifiez le problème 2a pour accepter une chaîne se terminant par un signe $.
2. Modifiez le problème 2a avec uniquement des valeurs CR ou LF et observez la sortie.
3. Modifiez le problème 2b pour n'avoir que deux options : Compteur UP/Down ou Compteur à anneau
4. Modifiez la procédure de délai prob 2b pour différents délais en faisant varier la valeur du compteur.
5. Modifiez le problème 2b pour un compteur HEX up/down et un compteur à anneau décalé vers la gauche.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
.modèle petit
.pile
.données
liste DB 33h, 54h, 0a2h, 17h, 76h ; déclarer et initialiser un tableau d'octets
n DW $-liste longueur du tableau
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur adjoint, Département de l'ISE Page 16 sur 56
Laboratoire de microprocesseurs (8086) Département de CSE/ISE, Reva ITM, Bangalore
APPELER déplier ; utilisez une procédure pour décompresser les chiffres du nombre
INC SI
DEC BX
JNZ encore ; répéter pour tous les éléments du tableau
asciidisp PROC PROCHE procédure pour convertir en ascii et afficher les nombres
CMP AH, 0Ah ; si le chiffre est 0-9, AJOUTER 30 pour convertir en ASCII
JB plage ; Si le chiffre est A-F, AJOUTEZ 37 pour convertir en ASCII
--------------------------------------------------------------------
Compilé par : L. Krishnananda, professeur adjoint, département d'ISE Page 17 sur 56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
AJOUTER AH, 7
sauter : AJOUTER AH, 30h
MOV DL, AH
MOV AH, 02
INT 21 h
RET
asciidisp ENDP
FIN
.modèle petit
.pile
.données
pa EQU 0d400h ; adresses de port 8255
pb ÉQU 0d401h
pc EQU 0d402h
cr ÉQU 0d403h
cw ÉQU 82h
MOV DX, pb ; lire le premier numéro (état de l'interrupteur) via le port B de 8255
--------------------------------------------------------------------
Compilé par : L. Krishnananda, professeur assistant, département d'ISE Page 18 de 56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
DANS AL, DX
MOV BL, AL ; premier nombre copié dans le registre BL
MOV DX, OFFSET msg2 ; afficher le prochain message
MOV AH, 09h
INT 21h
MOV AH, 01h ; appuyez sur une touche pour continuer
INT 21h
INT 21h
DÉPLACE AL, BL ; envoyer le chiffre supérieur
MOV DX, pa
OUT DX, AL
MOV AH, 4Ch ;terminer
INT 21h
PUSH CX
PUSH AX
MOV CX, 2000h
MOV AX, 0ffffh
retour2 : DEC AX
JNZ back2
BOUCLER retour1
POP AX
POP CX
RET
retard ENDP
FIN début
Questions d'exercice :
1. Modifier le problème 3a pour un ensemble de N nombres sur 16 bits.
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur adjoint, Département d'ISE Page19de56
Laboratoire de Microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
.modèle petit
.pile
.données
msg0 DB 10, ' ENTREE DU NOM:$'
DB QUEL EST VOTRE NOM ?
DB 10, '$' ;insérer un saut de ligne
len DW ($-msg1)
arr DB 40 DUP(?)
afficher MACRO str ; définition de macro pour afficher une chaîne à l'écran
LEA DX, str
MOV AH,9
INT 21H
FIN
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur associé, Département d'ISE Page20de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
FIN début
7B) Piloter une interface de moteur pas à pas pour faire tourner le moteur dans le sens des aiguilles d'une montre
par N étapes
.modèle petit
.pile
.données
pa EQU 0d400h Adresse des ports 8255
pb ÉQUI 0d401h
pc ÉQU 0d402h
cr ÉQU 0d403h Adresse du registre de contrôle 8255
cw EQU 80h Commande de contrôle pour 8255 pour rendre tous les ports en sortie
n ÉQU 50 ; nombre de rotations. N=50 est une rotation
PHASE_A ÉQU 88H modèle pour énergiser les enroulements du moteur
.code
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur adjoint, Département d'ISE Page21de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
DEC BL
JNZ vers le haut
BOUCLE encore
FIN début
Questions d'exercice :
1. Modifiez le problème 7a pour afficher le nom caractère par caractère.
2. Écrire un code pour effacer l'écran.
3. Modifiez le problème 7b pour faire tourner le moteur (i) 2 rotations (ii) 5 rotations
4. Modifiez les comptes de délai de la question 7b et observez la vitesse du moteur.
5. Écrivez une note sur les interruptions DOS.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8a) Calculer le Factoriel d'un Entier Positif 'N' en Utilisant une Procédure Récursive
.modèle petit
.pile
.données
num DW 5 le nombre dont la factorielle est nécessaire
rés DW ? ; pour stocker le résultat
LE FACTORIEL DE
msg1 DB EST : $
--------------------------------------------------------------------
Rédigé par : L. Krishnananda, Professeur adjoint, Département d'ISE Page22de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
afficher MACRO str ; définition de macro pour afficher une chaîne à l'écran
LEA DX, str
MOV AH, 9
INT 21H
FIN
.code ; programme principal
MOV AX, res ; utilisez une procédure pour déballer les chiffres du résultat
APPELER déballer
JMP arrêt
MOV BX, AX
ET AH, 0F0H ; masquer le chiffre le plus à gauche (MSD)
MOV AL, AH
DÉPLACER CL, 4
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur Assistant, Département de l'ISE Page23de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
SHR AL, CL
APPELER asciidisp ; utilisez une autre procédure pour convertir en ASCII et afficher
DÉPLACER AX, BX
ET AH, 0FH ; masquer le chiffre suivant
DEPLACE AL, AH
APPELER disp
MOV AX, BX
ET AL, 0F0H ; masquer le chiffre suivant
SHR AL, CL
APPELER disp
MOV AX, BX
ET AL, 0FH ; maks chiffre le plus à droite (LSD)
APPELER disp
RET
déballer ENDP
FIN
_______________________________________________________
8B) Piloter une interface de moteur pas à pas pour faire tourner le moteur dans le sens antihoraire
direction par N étapes
.modèle petit
.piler
.données
pa EQU 0d400h Adresse des ports 8255
pb ÉQU 0d401h
pc ÉQU 0d402h
cr ÉQU 0d403h Adresse du registre de contrôle 8255
cw ÉQU 80h Mot de contrôle pour le 8255 pour rendre tous les ports en sortie
n ÉQU 50 ; nombre de rotations. N=50 est une rotation
PHASE_A ÉQU 88H modèle pour électriser les enroulements du moteur
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur Assistant, Département d'ISE Page 24 sur 56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
retard PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC
Questions d'exercice :
1. Modifiez le problème 8a pour obtenir la factorielle sans utiliser une procédure récursive.
2. Modifiez le problème 8a pour afficher le facteur de 0 et 1 sans calculer et pour les autres.
nombres (2 - 8) cela devrait calculer.
3. Modifiez le problème 8a pour vérifier si l'entrée >8 et afficher une condition d'erreur.
4. Est-il possible de faire tourner le moteur dans le problème 8b sans utiliser l'instruction ROL ? Si oui, écrivez
le code complet.
5. Écrivez une note sur les interruptions BIOS.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9a) CALCULER nCr EN UTILISANT UNE PROCÉDURE RECURSIVE. ASSUMEZ QUE 'n' ET 'r' SONT
NOMBRE ENTIERS NON NÉGATIFS.
.modèle petit
.pile
.données
--------------------------------------------------------------------
Réalisé par : L. Krishnananda, Professeur adjoint, département de ISE Page 25 sur 56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
n DW 5 valeur de n
r DW 3 valeur de r
ncr DW 1 ; pour stocker le résultat
Le nCr est : $
Erreur ! La valeur n ne peut pas être zéro !
afficher MACRO str ; définition de macro pour afficher une chaîne à l'écran
LEA DX, str
MOV AH, 9
INT 21H
FIN
.code
; programme principal
début : MOV AX, @données
MOV DS, AX
JMP arrêt
MUL NCR
DIV CX
DÉPLACER NCR, AX
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur adjoint, Département d'ISE Page26de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
au-dessus : RET
ncp ENDP
MOV AL, AH
APPELER disp
MOV AX, BX
ET AL, 0F0H ; masquer le chiffre suivant
SHR AL, CL
APPELER disp
MOV AX, BX
ET AL, 0FH ; maks chiffre le plus à droite (LSD)
APPELER disp
RET
déballer ENDP
FIN début
_____________________________________________
titre 9B) Contrôler une interface de moteur pas à pas pour faire tourner le moteur N étapes dans le sens des aiguilles d'une montre
.modèle petit
.pile
.données
pa EQU 0d400h Adresse des ports 8255
pb ÉQU 0d401h
--------------------------------------------------------------------
Compilation par : L. Krishnananda, professeur assistant, département d'ISE Page27de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
pc EQU 0d402h
cr ÉQU 0d403h Adresse du registre de contrôle 8255
cw EQU 80h Mot de contrôle pour 8255 pour configurer tous les ports en tant que sortie
n1 ÉQU 50
n2 ÉQU 75 ; nombre de rotations. N = 50 est une rotation
.code
début : MOV DX, cr
MOV AL, cw
OUT DX, AL
ROR AL, 1
DEC BL
JNZ en haut1
montre LOOP
Questions d'exercice :
1. Modifiez le problème 9a avec une autre logique (mathématiquement) pour trouver nCr.
2. Modifiez le problème 9a pour vérifier si r > n et, si oui, imprimez une condition d'erreur.
3. Modifiez le prob 9b pour faire tourner le moteur soit dans le sens horaire soit dans le sens antihoraire, selon le
touche pressée du clavier.
4. Quels sont les usages des moteurs pas à pas ?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
titre 10a) Vérifiez si une sous-chaîne donnée est présente ou non dans une chaîne principale.
; caractères.
.modèle petit
.pile
lire MACRO str macro pour lire une chaîne depuis le clavier
LEA DX, str
MOV AH, 0AH
INT 21H
FIN
.données
DB 10, 13, 'ENTRER LA CHAÎNE PRINCIPALE:$'
msg2 DB 10, 13, 'ENTREZ LA SOUS CHAÎNE:$'
msg3 DB 10, 13, 10, ' Félicitations !! LA SOUS-CHAÎNE EST TROUVÉE : *** ', 10, '$'
msg4 DB 10, 13, 10, ' Désolé !! LA SOUS-CHAÎNE N'EST PAS TROUVÉE : !!! ', 10, '$'
DB 0H
DB 50H DUP (?)
y DB 50H ; tableau pour stocker une sous-chaîne
DB 0H
DB 50H DUP (?)
.code
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur adjoint, Département de l'ISE Page 29 de 56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
mot suivant
POP SI
INC SI
DEC CL
CMP CL, 00H
JNE back2 ; après toutes les comparaisons, si non trouvé afficher msg4
msg4 ; invoquer la macro
JMP arrêt
trouvé : disp_msg msg3 ; invoquer la macro pour afficher msg3
.modèle petit
.pile
MOV AH, 0
INT 10h
FIN
--------------------------------------------------------------------
Compile par : L. Krishnananda, Professeur Assistant, Département d'ISE Page30de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
.données
PROGRAMME DE DÉMONSTRATION POUR L'INTERFACE CLAVIER
appuyez sur une touche de l'interface du clavier pour connaître le numéro de ligne et de colonne...
Ce programme est en cours d'exécution... Appuyez sur n'importe quelle touche de l'ordinateur pour QUITTER. $
La touche pressée est :
numéro de ligne :
Colonne n°: '$'
pa EQU 0D400h
pb EQU 0D401h
pc ÉQU 0D402h
cr ÉQU 0D403h
.code
getkey
MOV BH, 1h Lignes de scan
MOV BL, 0h Initialiser un compteur. Il contient le numéro de la clé
lignes de balayage
MOV AL, BH
SORTIE_pc ;invoke macro to send Line Number to Port CL
en_pa ;invoquer la macro pour lire depuis le Port A
MOV CL, CH
ET CL, 01h ; masquer tous les bits sauf le bit de poids faible
cdisp
mdisp msg6
POP AX
cdisp
msg4
MOV AX, 0h
MOUV AL, BL
MOV BL, 02h
MUL BL
DÉPLACER BX, AX
MOV DI, OFFSET Show
MOV AL, Keys[BX]
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur Assistant, Département d'ISE Page32de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
JNZ suivant
JMP obtenir une clé
suivant : MOV AH,4ch ;Quittez le programme en toute sécurité.
INT 21h
Questions d'exercice :
1. Modifiez le problème 10a pour imprimer la longueur de la chaîne principale et de la sous-chaîne.
2. Modifiez le problème 10b pour afficher le numéro de ligne en commençant à partir de 0.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
11a) Générer les premiers 'n' nombres de Fibonacci
.modèle petit
.pile
.données
arr DW 0,1,50 DUP (?) ; tableau pour stocker les nombres de Fib
; arrdec DW 0,1, 50 DUP (?) ; tableau pour stocker les nombres de Fibonacci décimaux
compter DW 15 combien de nombres générer
.code
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur assistant, Département d'ISE Page 33 de 56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
DÉPLACE SI, 0
MOV CX, compte
; génération de nombres fib HEX
.modèle petit
.pile
clrscr MACRO
MOV AL, 3
MOV AH, 0
INT 10h
FIN
--------------------------------------------------------------------
Compilé par : L. Krishnananda, professeur adjoint, département d'ISE Page34de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
pa EQU 0d400h
pb ÉQU 0d401h
pc ÉQU 0d402h
cr ÉQU 0d403h
0123456789.+-*/%c$
base de données 4
.code
MOV DX, cr
MOV AL, 90h ;initialiser le port A 8255 en entrée
SORTIE DX, AL ; et d'autres ports comme sortie
mdisp msg1
Délai d'appel
Délai d'appel
APPELER keypress utiliser une procédure pour obtenir le premier numéro de l'interface du pavé numérique
POUSSE AX
MOV AH, 07h appuyez sur une touche pour continuer
INT 21h
POP AX
mdisp msg2
INC DI
--------------------------------------------------------------------
Rédigé par : L. Krishnananda, Professeur adjoint, Département de l'ISE Page35de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
délai d'appel
Délai d'appel
APPELER keypress utilisez une procédure pour obtenir le deuxième nombre de l'interface du clavier
PUSH AX
MOV AH, 07h
INT 21h
POP AX
mdisp msg3
INC DI
Délai d'appel
Délai d'appel
APPELER pression de touche ; utiliser une procédure pour obtenir l'opérateur - ou + à partir de l'interface du clavier
PUSH AX
MOV AH, 07h
INT 21h
POP AX
mdisp msg4
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur adjoint, Département d'ISE Page36de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
keypress PROC PROC PROCHE ; procédure pour scanner le clavier afin de lire les chiffres et l'opérateur
JMP f_c
suivant : MOV DX, pc
MOV AL, 02h
OUT DX, AL
MOV DX, pa
DANS AL, DX
CMP AL, 00
JNZ s_c
Répéter JMP
f_c Délai d'appel
MOV SI, OFFSET disp1
suivant1: SHR AL, 1
JC suivant ; si une touche est enfoncée, l'afficher
INC SI
JMP suivant1
s_c retard d'appel
MOV SI, OFFSET disp1
AJOUTER SI, 08h
SHR AL, 1
JC suivant
INC SI
JMP next2
nextc : MOV DL, [SI]
MOV AH, 2h
INT 21h
MOV [DI], DL
RET
touche de fin
JNZ retour1
BOUCLE back2
POP CX
POP AX
RET
retard FIN
FIN début
Questions d'exercice :
1. Modifiez le prob 11a pour afficher les nombres de Fibonacci à l'écran.
2. Modifiez le problème 11b pour inclure également l'opération de multiplication.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
15a (i) Programme pour créer un fichier en utilisant les interruptions DOS.
.modèle petit
.pile
.données
fichier DB 'd:\mpa_09\[Link] $'
Création réussie $
Échec de la création $
.code
Erreur JC
afficher msg1 ; invoquer une macro pour afficher des messages
JMP arrêt
--------------------------------------------------------------------
Compilation par : L. Krishnananda, Professeur Assistant, Département d'ISE Page38de56
Laboratoire de microprocesseur (8086) Dept de CSE/ISE, Reva ITM, Bangalore
FIN début
.modèle petit
.pile
.données
fichier DB 'd:\mpa_09\[Link]'
fichier supprimé avec succès.
msg2 DB 10, 13, ' !!!! fichier non trouvé !!!$'
.code
JC échoue
afficher msg1
JMP suivant
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur adjoint, Département d'ISE Page39de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
.modèle petit
.pile
.données
pa EQU 0d400h
pb EQU 0d401h
pc ÉQU 0d402h
cr ÉQU 0d403h
fcode DB 00h, 03h, 06h, 09h numéros d'étage
effacer DB 0e0h, 0d3h, 0b6h, 79h ; code pour effacer la LED de demande
.code
MOV AX, @données
MOV DS, AX
MOV DX, cr
MOV AL, 82H ; port A en sortie, port B en entrée
OUT DX, AL
XOR AX, AX
MOV AL, AH
OU AL, 0F0H
MOV DX, pa
OUT DX, AL
MOV DX, pb ; pointer au port B
retour2 : MOV CH, AH ; au départ AH = 0
; initialement, l'ascenseur au rez-de-chaussée
MOU AH, 01h
INT 16H
JNZ arrêter
MOV AH, CH
DANS AL, DX lire la demande de l'étage du port B
ET AL, 0FH
CMP AL, 0FH
JZ retour2
MOUV SI, 0
trouver: ROR AL, 1 trouver le numéro de l'étage
JNC trouvé
INC SI
JMP trouvezf
trouvé : MOV AL, fcode[SI] déplacez l'ascenseur vers
CMP AL, AH le sol demandé après
JA up ; comparaison de la demande avec la position actuelle de l'ascenseur
JB en bas
clair : MOV AL, fclear[SI] ; après avoir atteint le sol, effacez la demande
MOV DX, pa
SORTIE DX, AL
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur Assistant, Département d'ISE Page40de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
JMP retour1
appel retard ; pour déplacer l'ascenseur vers le haut
INC AH
XCHG AL, AH
OU AL, 0F0H
MOV DX, pa
OUT DX, AL
ET AL, 0FH
XCHG AH, AL
CMP AL, AH
JNZ vers le haut
JMP clair
appel retard pour faire descendre l'ascenseur
DEC AH
ÉCHANGEMENT AL, AH
OU AL, 0F0H
MOV DX, pa
SORTIE DX, AL
ET AL, 0FH
XCHG AH, AL
CMP AL, AH
JNZ vers le bas
JMP clair
stop : MOV AH, 4CH
INT 21
POUSSE CX
PUSH AX
MOV CX, 04fffh
back3 : MOV AX, 02fffh
DÉC AX
JNZ back4
BOUCLE arrière3
POP AX
POP CX
RET
retard ENDP
FIN
Questions d'exercice :
1. Modifiez le problème 15a pour afficher le répertoire de travail actuel
2. Modifiez le problème 15b pour déplacer l'ascenseur au rez-de-chaussée après que toutes les demandes aient été satisfaites.
--------------------------------------------------------------------
Rassemblé par : L. Krishnananda, Professeur Assistant, Département d'ISE Page 41 sur 56
Laboratoire de microprocesseur (8086) Dépt de CSE/ISE, Reva ITM, Bangalore
12a) Lire l'heure actuelle du système et l'afficher dans un format standard sur
; l'écran.
.modèle petit
.pile
.données
msg1 DB 10,13, " @@@ Lecture du temps système :::$"
MOV DL, BL
AJOUTER DL, 30h
MOV AH, 02h
INT 21h
RET
afficher ENDP
FIN
______________________________________________________-
titre 12b) Générer une onde sinusoïdale en utilisant l'interface DAC (la sortie du DAC est à
; être affiché sur un CRO).
.modèle petit
.données
porta EQU 0d400h
portb EQU 0d401h
portc EQU 0d402h
cwr EQU 0d403h
DB 00,11,22,33,43,53,63,72,81,89,97,104,109,115,119,122,125,126,127
; tableau pour stocker les valeurs de sinè
Observez l'onde sinusoidale sur le CRO ; Appuyez sur une touche pour quitter
.code
--------------------------------------------------------------------
Compile par : L. Krishnananda, Professeur Assistant, Département d'ISE Page 43 sur 56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
onde complète
MOV SI, OFFSET sines ; utiliser SI comme pointeur vers le tableau
deuxième trimestre
MOV AL, 7FH
MOV BL, octet ptr [SI]
AJOUTER AL, BL
OUT DX, AL
DEC SI
BOUCLE deuxième_trimestre
troisième trimestre
MOV AL, 7fh
MOV BL, byte ptr [SI]
SOUSTRAIRE AL, BL
OUT DX, AL
INC SI
BOUCLE troisième_trimestre
DEC SI
MOV CX, 12h
--------------------------------------------------------------------
Compilé par : L. Krishnananda, professeur adjoint, département de l'ISE Page 44 sur 56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
quatrième trimestre
MOV AL, 7Fh
MOV BL, BYTE PTR [SI]
SUB AL, BL
OUT DX, AL
DÉC SI
BOUCLE quatrième_quart
FIN
Questions d'exercice :
1. Modifiez le problème 12a pour décompresser les chiffres sans utiliser l'instruction AAM.
2. Modifiez le problème 12a pour lire l'heure actuelle et mettre en œuvre une horloge en temps réel.
3. Modifiez le problème 12b pour générer des formes d'onde avec une valeur de crête de 2,5V et 4V.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
.modèle petit
.pile
.données
Le compteur décimal fonctionne##
clrscr MACRO
MOV AL, 2
MOV AH, 0
INT 10H
FIN
.code
MOV AX, @données
--------------------------------------------------------------------
Rédigé par : L. Krishnananda, Professeur adjoint, Département d'ISE Page45de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
MOV DS, AX
effacer l'écran ; invoquer la macro pour effacer l'écran
XOR AX, AX
afficher msg ; invoquer la macro pour afficher le message
appel de délai
MOUV AL, 30H ; AL contient le premier (plus grand) chiffre
à nouveau : MOV DL, AL ; afficher un chiffre supérieur
MOV AH, 02h
INT 21h
MOV AH, 2
INT 10h
MOV AX, SI
INC AL ;incrémenter le 1er chiffre
CMP AL, 39h
JLE encore ;boucle 1er chiffre (0-9)
; boucle externe pour un chiffre supérieur
DÉPLACE AH, 4Ch
INT 21h
délai PROC PRÈS ; procédure de retard
PUSH CX
POUSSE AX
MOV CX, 1000H
retour2: MOV AX, 04FFFh
RETOUR AX
JNZ retour1
BOUCLE arrière
POP AX
--------------------------------------------------------------------
Rassemblé par : L. Krishnananda, Professeur Assistant, Département d'ISE Page46de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
POP CX
RET
retard ENDP
FIN
_____________________________________________________
titre 13b) Générer une forme d'onde sinusoïdale demi-redressée en utilisant l'interface DAC (le
La sortie du DAC doit être affichée sur un CRO.
.modèle
.données
00,22,44,66,87,108,127,146,164,180,195,209,221,231,240,246,251,254,255
msg DB 10,13, 10, 'Observez l'onde demi-redressée sur le CRO. Appuyez sur une touche pour sortir $'
.pile
.code
MOV AX, @données
DÉPLACER DS, AX
LEA DX, msg
MOV AH, 9
INT 21H
MOV AL, 80h ; rendre tous les ports en sortie
MOV DX, ctrl
OUT DX, AL
Délai d'appel
demi-onde
MOV DX, porta
MOV CX, 13h
MOV SI, OFFSET sines ; utiliser SI comme pointeur vers le tableau
deuxième trimestre
MOV AL, BYTE PTR [SI]
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur adjoint, Département d'ISE Page47de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
SORTIE DX, AL
Délai d'appel
DEC SI
BOUCLE deuxième_quart
retard PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC PROC
POUSSE CX
MOV CX, 2FFFH
NOP
RETOUR EN ARRIÈRE
POP CX
RET
retard ENDP
FIN
Questions d'exercice :
1. Modifier le prob 13a pour générer un compteur décimal descendant.
2. Modifier le problème 13a pour générer un compteur HEX UP.
3. Modifiez le problème 13b pour générer des formes d'onde avec une valeur crête de 5V et 2,5V pendant no_wave.
durée.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
14a) Lire une paire de coordonnées d'entrée en BCD et déplacer le curseur vers la position spécifiée
; position sur l'écran.
.modèle petit
.pile
.données
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur adjoint, Département d'ISE Page 48 sur 56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
clrscr MACRO
MOV AH, 0 ;macro POUR EFFACER L'ÉCRAN
MOV AL, 3
INT 10h
FIN
dispm MACRO str ; macro pour afficher une chaîne
MOV DX, OFFSET str
MOV AH,9H
INT 21H
FINM
.code
INT 21H
MOV AH, 4Ch
INT 21h
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur adjoint, Département d'ISE Page49de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
FIN
___________________________________________________________
titre 14b) Générer une forme d'onde sinusoïdale entièrement redressée en utilisant l'interface DAC
; (la sortie du DAC doit être affichée sur un CRO).
.modèle petit
.données
porta ÉQU 0d400h
portb EQU 0d401h
portc EQU 0d402h
cwr EQU 0d403h
sines DB 00,11,22,33,43,53,63,72,81,89,97,104,109,115,119,122,125,126,127
tableau pour stocker les valeurs de sin
Observer la forme d'onde sinusoïdale du redresseur complet sur l'oscilloscope ; Appuyez sur une touche pour sortir
.code
DEPLACE AX, @donnees
DÉPLACE DS, AX
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur Assistant, Département de ISE Page 50 sur 56
Laboratoire de Microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
fullrec_wave
MOV SI, OFFSET sines
MOV CX, 13h
la pleine onde sinusoïdale redressée aura les deux premiers quadrants répétés en continu.
premier_quart
MOV AL, 7FH
MOV BL, octet PTR [si] ; prendre la valeur du sinus à partir du tableau
AJOUTER AL, BL
OUT DX, AL ; et l'envoyer au port (CRO)
INC SI
BOUCLE premier_quart
MOV CX, 12H
DEC SI
deuxième trimestre
MOV AL, 7FH
MOV BL, BYTE PTR [SI]
AJOUTER AL, BL
SORTIE DX, AL
DEC SI
BOUCLE deuxième_quart
Questions d'exercice :
1. Modifier le prob 14a pour afficher votre nom à la position après avoir lu les points de coordonnées.
2. Modifiez le problème 14b pour générer des formes d'onde avec des tensions de sortie de 0 à 2,5 V et de 0 à 5 V
portée.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
.modèle petit
.pile
.données
DB 10, 'ENTREZ UNE TOUCHE DU CLAVIER', 10, 13, '$'
msg2 DB La valeur ASCII est : $
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur adjoint, Département d'ISE Page51de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
clrscr MACRO
MOV AL, 3 ;Mode vidéo = 3
MOU AH, 0 Pour effacer l'écran
INT 10H
FIN
dispm MACRO str
MOV DX, OFFSET str
MOV AH, 9H
INT 21H
FIN
.code
MOV AX, @data
DÉPLACE DS, AX ;Initialiser DS
--------------------------------------------------------------------
Élaboré par : L. Krishnananda, professeur adjoint, département d'ISE Page52de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
INT 21H
RETOUR
FIN
Questions d'exercice :
1. Modifiez le problème 4a pour afficher la valeur ASCII à n'importe quelle position à l'écran
2. Modifier le problème 4b pour afficher les messages PASS et FAIL alternativement sur un afficheur à 7 segments
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
titre 5A) Inverser une chaîne donnée et vérifier si c'est un palindrome ou non.
.modèle petit
.pile
.données
buf DB 60 ; tableau pour stocker la chaîne originale
DB ?
DB 60 DUP(?)
revbuf DB 60 DUP (?) ; tableau pour stocker la chaîne inversée
ENTRER LA CHAÎNE : $
MOV CH, 0
MOV CL, buf+1
AJOUTER SI, CX
retour : MOV AL, BYTE PTR [SI] ; inverser la chaîne et stocker dans la mémoire
MOV OCTET PTR [DI], AL
INC DI
DEC SI
RETOUR EN BOUCLE
répéter CMPSB
JNZ différent
FIN
Questions d'exercice :
1. Modifier le problème 5a pour afficher la chaîne d'origine ainsi que la chaîne inversée à l'écran.
2. Modifier le problème 5a pour vérifier si c'est un palindrome sans inverser la chaîne de caractères originale.
3. Modifiez le problème 5b pour faire défiler le message dans une seule direction pour un nombre spécifié de
fois.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
titre 6a) lire deux chaînes à partir du clavier et les stocker dans des emplacements.
vérifiez s'ils sont égaux ou non et affichez des messages appropriés.
; afficher également la longueur des chaînes
.modèle petit
.pile
.données
str1 DB 150 ; réserver de la mémoire pour stocker la chaîne 1
DB ? ; longueur de chaîne stockée ici
DB 150 dup(?)
str2 DB 150 réserver un tableau de mémoire pour stocker la chaîne 2
DB ?
DB 150 dup(?)
--------------------------------------------------------------------
Rassemblé par : L. Krishnananda, Professeur adjoint, Département de l'ISE Page54de56
Laboratoire de microprocesseur (8086) Département de CSE/ISE, Reva ITM, Bangalore
dispm MACRO str ; définition de macro pour afficher une chaîne à l'écran
LEA DX, str
MOV AH, 09h
INT 21h
FIN
.code
MOUV AX,@données
MOV DS, AX
MOV ES, AX ; Segment supplémentaire requis pour l'instruction CMPSB
effacer l'écran
dispm msg3 ; invoquer la macro pour afficher le message
dispm msg4
JNE noteq Si les longueurs ne sont pas égales, afficher 'pas égal'
MOV CH, 00h ; Si les longueurs de chaîne sont égales, alors comparer deux chaînes
MOV CL, str1[1] ; obtenir la taille de la chaîne 2 dans le registre CL
CLD
LIRE SI, str1+2
LEA DI, str2+2
répéter CMPSB Comparez les chaînes en utilisant l'instruction CMPSB
JNZ noteq Si ils ne sont pas égaux afficher 'pas égaux'
JMP arrêter
noteq : dispm msg2 Affichage Non Égal
FIN
Questions d'exercice :
1. Modifiez le problème 6a pour vérifier l'égalité des chaînes sans utiliser l'instruction CMPSB.
2. Modifiez le problème 6a pour accepter des chaînes de plus de 9 caractères et afficher leur longueur.
de manière appropriée en Hex ou décimal.
--------------------------------------------------------------------
Compilé par : L. Krishnananda, Professeur Assistant, Département d'ISE Page 56 de 56