Se connecter / S'enregistrer

Résolu [ASM] Prog. qui affiche la maj. d'une lettre min.

Solutions (2)
Tags :
  • Programme
  • Programmation
|
Bonjour;
Voila, je voudrais ecrire un programme qui lit une lettre et affiche sa majuscule/minuscule si elle est min/maj
Si ce n'est pas une lettre, on demande de refaire la saisie
On sort du programme en tappant 0
Et enfin on affiche le nombre de caractères valides avant de sortir...

Voilà comment j'ai interprete l'exercice :

==================

Dosseg
.model small ; choix du modèle de la mémoire
.data
message1 db 13,10,'Entrez une lettre:','$'
message2 db 13,10,'Veuillez choisir un autre caractere!','$'
message3 db 13,10,'Pour sortir, tapez 0:','$'
message4 db 13,10,'Le nombre de caracteres valides est:','$'
message5 db 13,10,'La lettre correspondante est:','$'
val1 db ?
val2 db ?
compt db 0
.code
.startup
mov ax,@data
mov ds,ax

JMP Prog

Erreur: ; Choisir un autre caractère
mov ah,9
mov dx,offset message2
int 21h

Prog: ; Entrer le caractère
mov ah,9
mov dx,offset message1
int 21h

mov ah,1
int 21h
mov val1,al

cmp al,64
JLE Erreur
cmp al,122
JG Erreur
cmp al,96
JG Etape1
cmp al,90
JLE Etape2

JMP Erreur

Etape1:
sub al,32
JMP Affiche

Etape2:
add al,32
JMP Affiche

Affiche: ; Afficher la maj/min
mov ah,9
mov dx,offset message5
int 21h
mov val2,al
mov dl,val2
mov ah,2
int 21h
inc compt

mov ah,9 ; Continuer ou sortir
mov dx,offset message3
int 21h
mov ah,1
int 21h
cmp al,48
JNE Prog

mov ah,9 ; Nombre de car. valides
mov dx,offset message4
int 21h
add compt,48
mov ah,2
mov dl,compt
int 21h


mov ah,4ch ; Fin du programme
int 21h

END

==================

Seulement quand je veux compiler (aucune erreur n'est identifiée durant la compilation) et que je veux executer ce programme sur Dos, bah la partie principale du programme ne marche pas : L'affichage de la maj/min!
1. Le programme finit bien quand je tappe seulement 0
2. Le compteur pour le nombre de car. valides est testé et marche!
Mais je ne sais pas comment faire pour l'affichage de la maj/min !
Faut il ajouter/retrancher 48 de l'al ?
Car sur dos ca m'affiche un joli '$' au lieu de la lettre correspondante...
Merci d'avance pour votre aide, je n'arrive pas a trouver ce qui manque et ca fait des heures que je tourne en rond @_@
Contenus similaires
  • Autres pages sur : asm prog affiche maj lettre min
Meilleure solution
partage
|
Citation :
(aucune erreur n'est identifiée durant la compilation)

C'est ça le plus beau avec l'assembleur, ça compile souvent. :D 

  1. ...
  2. Affiche: ; Afficher la maj/min
  3. mov ah,9
  4. mov dx,offset message5
  5. int 21h
  6. mov val2,al
  7. mov dl,val2
  8. ...

Bon alors voyons la doc... :) 
Pour l'interruption 21h:
- fonction 09h => modifie le registre AL
- fonction 01h => modifie les registres AH, BX CX, DX, SI, DI, BP, CS, DS, SS, ES
Donc, après l'appel à la fonction 09h, ton registre AL ne contient plus le caractère, donc, à mémoriser avant le déclenchement de l'interruption.

Je pense que AL est utilisé pour l'affichage des caractères, et donc tu as le dernier caractère de la chaine affichée: $

Sinon, une petite astuce d'optimisation: pour la lecture clavier, tu peux directement lire la sortie du micro-contrôleur du clavier (en lisant à l'adresse 60h): IN AL, 60h. ça retourne le scan code.
  • Commenter cette solution |
Score
0
òh
òi
|
CRicky a dit :
Donc, après l'appel à la fonction 09h, ton registre AL ne contient plus le caractère, donc, à mémoriser avant le déclenchement de l'interruption.

Bingoo!! ;) 

Il fallait utiliser "mov val2,al " dans 'Etape1' et 'Etape2', juste avant le Jump vers 'Affiche' en effet !

Merci beaucoup pour ta réponse CRicky, j'ignorais que l'appel à la fonction 09h modifiait le registre AL (hihi, ca se voit que je suis débutant dans le domaine xD), ca me servira beaucoup pour mon exam! =p

Énorme merci une fois de plus pour ton aide, bonne soirée! =)
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS