Correction de la série N°2 – Programmation assembleur

Ex.2 : Quelques programmes
1- Affichage de l'alphabet en majuscule (alphabet.asm)
assume CS:Code Code segment main: mov DL,"A" mov CX,26 ;compteur de la boucle pour affichage de 26 lettres de ; l’alphabet mov AH,2 ; affichage encore: int 21h inc DL ;incrémentation de DL pour passer à l’alphabet suivant Loop encore ; fin de la boucle mov ah,4Ch int 21h Code Ends End main

2- Saisie et Affichage d'un caractère (caracter.asm)
assume CS:Code Code segment main: mov AH,1 int 21h mov DL, AL mov AH,2 int 21h mov ah,4Ch int 21h Code Ends End main

; saisie ; le caractère lu arrive dans AL ; affichage

3- Modifier le programme précédent pour qu'il fasse la saisie et l'affichage tant que le caractère saisi est différent de ^d (code ASCII 4)
assume CS:Code Code segment main: mov AH,1 int 21h Cmp AL, 4 JZ Fin mov DL, AL mov AH,2 int 21h jmp main fin: mov ah,4Ch int 21h Code Ends End main

; saisie ; le caractere lu arrive dans AL ; si AL=4 alors Fini ; sinon : ; affichage ; et retour au début

4- Affichage d'un octet en binaire : afficher la valeur contenue dans un registre 8 bits (BL).

1

Si c'est le cas. AL mov CX.3 : Saisie au clavier d'un nombre décimal Le but de l'exercice est d'écrire un programme qui lit un entier décimal au clavier et le sauvegarde en mémoire dans une variable de type octet N1.2 .1 ."0" jmp affiche bit1: Mov DL. on teste le programme avec BL=10 mov CX. affichage d'un bit int 21h SHL BL. affichage int 21h SHL BL.4Ch int 21h Code Ends End main Ex.2 .4Ch int 21h Code Ends End main Modifier le programme caracter. 1. compteur de boucle masque: Test BL. Lire un caractère au clavier et tester si son code ASCII est celui d'un chiffre. sinon afficher "N".8 . le caractere lu arrive dans AL Cmp AL. 4 JZ Fin ."0" jmp affiche bit1: Mov DL. et de décaler BL à gauche pour parcourir ainsi tous les bits. fin de la boucle d'affichage des 8 bits jmp main .asm) 2. (oneread."1" affiche: mov AH. assume CS:Code 2 . assume CS:Code Code segment main: mov AH.8 . 10000000b JNZ bit1 bit0: Mov DL.asm pour qu'il affiche (en binaire) le code ASCII de chaque caractère saisi.L'idée est d'utiliser un masque BL AND 10000000 pour tester le bit de gauche. ranger ce chiffre (et non son code ASCII) dans N1. compteur de boucle masque: Test BL.1 Loop masque . et retour au debut fin: mov ah. 10 ."1" affiche: mov AH. si AL=4 alors Fini mov BL. 10000000b JNZ bit1 bit0: Mov DL.1 Loop masque fin: mov ah. saisie int 21h . assume CS:Code Code segment main: mov BL.

1 .A partir du programme précédent. saisie 5.1 SHL BL. et N1 <. pasbon: mov DL.1 int 21h Cmp AL. End main 2. "0" JB fin Cmp AL.Ecrire maintenant un programme (numread.4Ch 17.asm) qui lit un nombre décimal au clavier et le sauvegarde dans N1.1 AL. int 21h . si AL<"0" ce n'est pas un chiffre 8. Code Ends 19. AL 12. jmp fin 13. si AL>"9" ce n'est pas un chiffre 10. JB pasbon . mov AH. "N" 14."0" . main: mov AH. sinon le chiffre= code ASCII-ASCII(0) 3. le caractere lu arrive dans AL 6.1 N1. Mov N1.N1 SHL BL.1 Add N1. "0" 7. écrire un programme (dixfois. On ne contrôlera pas le débordement de capacité.asm) qui multiplie le nombre par 10 avant de le ranger dans N1 (deuxième méthode) Remplacer N1<.2 . sinon le chiffre= code ASCII-ASCII(0) .AL . La lecture s'arrête quand le caractère lu n'est pas un chiffre (plus besoin d'afficher "N"). DS:Data Data Segment N1 db ? Data Ends Code segment main: mov AX.3.Data Mov DS."0" AL.AX Mov N1.(AL-"0")*10 Sub SHL Mov SHL SHL Add AL."0" SHL N1. sinon le chiffre= code ASCII-ASCII(0) 11. assume CS:Code. affichage de "N" 15.0 lecture: mov AH. JA pasbon . saisie . le caractere lu arrive dans AL . Cmp AL. int 21h 18. int 21h 16. Sub AL. fin: mov ah.BL Add N1.10*N1 + AL 3 . Cmp AL."9" JA fin Sub AL.AL AL."9" 9. Code segment 4.AL .1 N1.AL-"0" par N1<.1 Mov BL.

4Ch int 21h Code Ends End main Correction de l’examen TP Ecrire un programme assembleur permettant de faire une boucle de saisie de caractère qui s’arrête à la saisie du caractère spécial « # ».9) le programme doit afficher « C » pour dire Chiffre.asm assume CS:Code Code segment main: mov AL. assume CS:Code Code segment main: mov AH. le programme affiche « N » pour dire Non. "#" 4 .4Ch int 21h Code Ends End main 2.[40H] neg AL mov [41H].AL mov ah. si BL<[40H] alors saut vers SUITE Mov [42H]. sinon SUITE : mov [42H]..[40H] JB SUITE . Sinon. complément.asm assume CS:Code Code segment main: mov AL.[40H] neg AL mov [41H]. s’il s’agit d’un chiffre ( 0. pluspetit. Pour chaque caractère saisi.AL mov BL.[41H] CMP BL.4Ch int 21h Code Ends End main fin: Ex.[40H] .4 : Complément à deux et nombre plus petit 1.BL mov ah.1 int 21h Cmp AL.jmp lecture mov ah.

"N" AFFICHAGE : mov AH.4Ch int 21h Code Ends End main 5 . "C" jmp AFFICHAGE NON : mov DL.2 ."9" JA NON mov DL.JE FIN Cmp AL. affichage int 21h jmp main FIN: mov ah."0" JB NON Cmp AL.

Sign up to vote on this title
UsefulNot useful