2016-08-10 1 views
0

Le programme doit afficher les lettres de a à z (en alternance majuscules et minuscules horizontalement) en utilisant la boucle.Programme TASM qui affiche les lettres de a à z (majuscules et minuscules horizontales) en utilisant la boucle

Exemple de sortie:

AaBb . . . . . . . . . . . . YyZz 

C'est le code que je l'ai utilisé jusqu'à présent, mais il ne conserve que des lettres majuscules. S'il vous plaît aidez-moi comment combiner ces lettres minuscules :(

Merci :)

.model small 
.code 
.stack 100 
org 100h 
start : 
     mov ah, 02h 
     mov cl, 41h 
skip : 
     mov dl, cl 
     Int  21h 
     inc cl 
     cmp cl, 5Ah 
     jnz skip 
     Int 27h 
end start 
+2

Veuillez ne pas dégrader votre question. En l'affichant ici, vous l'avez concédé sous licence à la communauté (voir [cette page du centre d'aide] (http://stackoverflow.com/help/editing)). Vous ne pouvez pas le détruire pour des raisons personnelles. Si vous avez besoin de l'aide d'un modérateur, vous pouvez marquer le message et expliquer ce dont vous avez besoin. –

+0

okay. merci quand même – Francoise

Répondre

1

Si vous voulez les intercalés, le jeu de caractères ASCII a un décalage de 20h entre les majuscules et lettres minuscules:

enter image description here

Vous pouvez voir de ce tableau que le déplacement A-a nécessite l'ajout 20h (aller 41h-61h), ce qui est la même pour toutes les autres lettres aussi bien.

Ainsi, au lieu de simplement ajouter un à la fin de la boucle, vous devez d'abord:

  • ajouter 20h.
  • imprime ce caractère.
  • soustraire 1fh (c'est-à-dire, soustraire 20h puis ajouter un).

En d'autres termes, le changement:

mov dl, cl 
int 21h 
inc cl 

en quelque chose comme:

mov dl, cl  ; load dl with character and print. 
int 21h 

add cl, 20h ; move to lowercase variant and print. 
mov dl, cl 
int 21h 

sub cl, 1fh ; move back to next uppercase variant. 

Le code peut être raccourci si vous savez que l'interruption ne sera pas écraserait le dl vous inscrivez utilisez (et l'excellent Ralf Brown interrupt list semble l'indiquer, indiquant que seulement al est changé):

mov dl, cl  ; load dl with character and print. 
int 21h 

add dl, 20h ; move dl to lowercase variant and print. 
int 21h 

inc cl   ; move cl to next uppercase variant. 
+0

Ayy Sir. Je n'obtiens pas le jeu de caractères ASCII a un décalage de 20h. Pouvez-vous m'expliquer s'il vous plaît? – Francoise

+0

@ L.Arona, J'ai ajouté une petite explication juste sous la table ASCII, laissez-moi savoir si plus est nécessaire. – paxdiablo

1

Vous devez ajouter 20 (hex) pour montrer les minuscules. Comme ceci:

start : 
    mov ah, 02h 
    mov cl, 41h 
skip : 
    mov dl, cl 
    Int 21h 
    add dl, 20h 
    Int 21h 
    inc cl 
    cmp cl, 5Ah 
    jnz skip 
    Int 27h 
end start 

MISE À JOUR

Une autre façon de le faire:

start : 
    mov ah, 02h 
    mov cl, 41h 
skip : 
    mov dl, cl 
    Int 21h 
    xor dl, 20h 
    Int 21h 
    inc cl 
    cmp cl, 5Ah 
    jnz skip 
    Int 27h 
end start 
+0

Je ne vois pas comment cela alterne. Ne pas simplement incrémenter un compteur de boucle majuscule et en envoyer une copie à chaque itération?J'aime la suggestion de déroulement par deux de Paxdiablo qui le rend facile à mettre en œuvre. L'autre option consiste à 'xor cl, 0x20' à chaque itération de [basculer entre majuscules et minuscules] (http://stackoverflow.com/a/35936844/224132). –

+0

Si xor cl, 20h vous devrez déplacer à nouveau le contenu CL vers DL pour fournir l'impression en utilisant INT 21h (voir le caractère dans DL). XOR est aussi un bon résultat, mais sur DL et non sur CL. Quoi qu'il en soit, je crois que XOR et ADD peuvent consommer les mêmes horloges de CPU (je ne suis pas sûr à ce sujet). –

+0

Monsieur puis-je demander quelle est l'utilisation de "xor"? Je suis nouveau dans TASM donc ce n'est pas facile pour moi de comprendre certains des codes :( – Francoise