2011-09-26 6 views
0

J'écris un programme qui va lire et écrire des caractères, en convertissant les minuscules en majuscules. Ceci est mon premier programme d'assemblage, donc j'essaye d'obtenir d'abord le programme pour lire dans un personnage et l'écrire. C'est ce que j'ai codé jusqu'à présent:Assembly Language: Lire (sans écho) et écrire

.model  small 
    .8086 


    .data 

lower db  'a' 


    .code 

start: 
     mov  ax,@data 
     mov  ds,ax 

     mov  ah,8 
     int  21h 
     mov  dl,al 
     mov  ah,2 
     int  21h 

exit: 
     mov  ax,4c00h 
     int  21h 
     end  start 

Ai-je manipulé la lecture/écriture correctement? Quand j'exécute ce programme et que j'entre dans un personnage, j'en vois seulement une occurrence. Ça ne devrait pas être deux? Un pour la lettre que j'ai tapé, puis un pour la lettre retourné? Par exemple, si je tape d, je vois:

d 

, mais je ne devrais pas voir

d 
d 
or 
dd 

Répondre

1

08h Int DOS lit un caractère de STDIN et ne l'écho pas. Si vous voulez faire écho au personnage, appelez int 01h.

+0

Merci. Nous ne sommes pas autorisés à utiliser l'écho pour cette tâche, donc j'essaie simplement de lire dans un caractère et de l'écrire ensuite sur l'affichage. Je pense que je lis correctement le caractère, mais si j'écris le caractère à l'affichage, alors mon programme ne devrait-il pas imiter l'écho? Peut-être qu'il y a une erreur avec ma méthode d'écriture? – raphnguyen

+0

@raphnguyen: Non, vous ne devriez pas voir deux caractères. Votre code lit un caractère, sans écho, puis sort le caractère. Puisque vous lisez sans écho, le personnage n'est pas sorti sur la console tant que vous ne l'avez pas fait. Pour voir ce que je veux dire, changez la ligne qui se lit 'mov dl, al'' mov dl, 'X''. Lorsque vous exécutez le programme, quelle que soit la touche sur laquelle vous appuyez, la sortie sera 'X'. –

+0

Merci encore, Jim. Joué avec le programme un peu plus et ont fait beaucoup de progrès. Je pense que je comprends comment ça fonctionne maintenant. – raphnguyen