Correction de la série N°2 – Programmation assembleur Ex.2 : Quelques programme
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 ; saisie int 21h ; le caractère lu arrive dans AL mov DL, AL mov AH,2 ; affichage int 21h mov ah,4Ch int 21h Code Ends End main 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 ; saisie int 21h ; le caractere lu arrive dans AL Cmp AL, 4 JZ Fin ; si AL=4 alors Fini mov DL, AL ; sinon : mov AH,2 ; affichage int 21h jmp main ; et retour au début fin: mov ah,4Ch int 21h Code Ends End main 4- Affichage d'un octet en binaire : afficher la valeur contenue dans un registre 8 bits (BL). 1 L'idée est d'utiliser un masque BL AND 10000000 pour tester le bit de gauche, et de décaler BL à gauche pour parcourir ainsi tous les bits. assume CS:Code Code segment main: mov BL, 10 ; on teste le programme avec BL=10 mov CX,8 ; compteur de boucle masque: Test BL, 10000000b JNZ bit1 bit0: Mov DL,"0" jmp affiche bit1: Mov DL,"1" affiche: mov AH,2 ; affichage int 21h SHL BL,1 Loop masque fin: mov ah,4Ch int 21h Code Ends End main Modifier le programme caracter.asm pour qu'il affiche (en binaire) le code ASCII de chaque caractère saisi. assume CS:Code Code segment main: mov AH,1 ; saisie int 21h ; le caractere lu arrive dans AL Cmp AL, 4 JZ Fin ; si AL=4 alors Fini mov BL, AL mov CX,8 ; compteur de boucle masque: Test BL, 10000000b JNZ bit1 bit0: Mov DL,"0" jmp affiche bit1: Mov DL,"1" affiche: mov AH,2 ; affichage d'un bit int 21h SHL BL,1 Loop masque ; fin de la boucle d'affichage des 8 bits jmp main ; et retour au debut fin: mov ah,4Ch int 21h Code Ends End main Ex.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. 1. Lire un caractère au clavier et tester si son code ASCII est celui d'un chiffre. Si c'est le cas, ranger ce chiffre (et non son code ASCII) dans N1, sinon afficher "N". (oneread.asm) 2. assume CS:Code 2 3. Code segment 4. main: mov AH,1 ; saisie 5. int 21h ; le caractere lu arrive dans AL 6. Cmp AL, "0" 7. JB pasbon ; si AL<"0" ce n'est pas un chiffre 8. Cmp AL,"9" 9. JA pasbon ; si AL>"9" ce n'est pas un chiffre 10. Sub AL,"0" ; sinon le chiffre= code ASCII-ASCII(0) 11. Mov N1, AL 12. jmp fin 13. pasbon: mov DL, "N" 14. mov AH,2 ; affichage de "N" 15. int 21h 16. fin: mov ah,4Ch 17. int 21h 18. Code Ends 19. End main 2- A partir du programme précédent, écrire un programme (dixfois.asm) qui multiplie le nombre par 10 avant de le ranger dans N1 (deuxième méthode) Remplacer N1<- AL-"0" par N1<- (AL-"0")*10 Sub AL,"0" ; sinon le chiffre= code ASCII-ASCII(0) SHL AL,1 Mov N1,AL SHL AL,1 SHL AL,1 Add N1,AL 3- Ecrire maintenant un programme (numread.asm) qui lit un nombre décimal au clavier et le sauvegarde dans N1. La lecture s'arrête quand le caractère lu n'est pas un chiffre (plus besoin d'afficher "N"). On ne contrôlera pas le débordement de capacité. assume CS:Code, DS:Data Data Segment N1 db ? Data Ends Code segment main: mov AX,Data Mov DS,AX Mov N1,0 lecture: mov AH,1 ; saisie int 21h ; le caractere lu arrive dans AL Cmp AL, "0" JB fin Cmp AL,"9" JA fin Sub AL,"0" ; sinon le chiffre= code ASCII-ASCII(0) SHL N1,1 ; et N1 <- 10*N1 + AL Mov BL,N1 SHL BL,1 SHL BL,1 Add N1,BL Add N1,AL 3 jmp lecture fin: mov ah,4Ch int 21h Code Ends End main Ex.4 : Complément à deux et nombre plus petit 1. complément.asm assume CS:Code Code segment main: mov AL,[40H] neg AL mov [41H],AL mov ah,4Ch int 21h Code Ends End main 2. pluspetit.asm assume CS:Code Code segment main: mov AL,[40H] neg AL mov [41H],AL mov BL,[41H] CMP BL,[40H] JB SUITE ; si BL<[40H] alors saut vers SUITE Mov [42H],[40H] ; sinon SUITE : mov [42H],BL mov ah,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 « # ». Pour chaque caractère saisi, s’il s’agit d’un chiffre ( 0..9) le programme doit afficher « C » pour dire Chiffre. Sinon, le programme affiche « N » pour dire Non. assume CS:Code Code segment main: mov AH,1 int 21h Cmp AL, "#" 4 JE FIN Cmp AL,"0" JB NON Cmp AL,"9" JA NON mov DL, "C" jmp AFFICHAGE NON : mov DL, "N" AFFICHAGE : mov AH,2 ; affichage int 21h jmp main FIN: mov ah,4Ch int 21h Code Ends End main 5 uploads/S4/ td-assembleur.pdf
Documents similaires
-
17
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Jan 22, 2021
- Catégorie Law / Droit
- Langue French
- Taille du fichier 0.1176MB