Assemblée 8086: Conversion 8 bits du nombre binaire à sa couleur Gris nombre équivalent?
Problème:
Écrire un programme permettant de convertir les 8 bits du nombre binaire saisi à partir du clavier à l'équivalent Gris code nombre binaire, à l'aide de la suite de l'algorithme:
[image brisée: http://www.harborlandings.com/images/grayAlgm.jpg]
Je suis en apprentissage de l'assemblée (8086, requis par classe) et ne savez pas comment faire cela.
Puis-je convertir chaque caractère (1 ou 0) comme je le recevoir à partir du clavier? Ou, dois-je le lire dans l'ensemble de la 8-bits du nombre binaire, boucle à travers elle, le taux de conversion-je aller?
Je viens de Perl/Java, afin de visualiser la façon dont cela va fonctionner dans l'assemblage est un peu intimidant. Aussi, je ne suis pas sûr de ce que le symbole est dans l'algorithme ci-dessus?
Je vous remercie pour votre aide et votre critique!
- plus-dans-un-cercle est le ou exclusif (XOR) de l'opérateur.
- Vous n'êtes autorisé à utiliser toutes sortes de bibliothèques? Parce que sinon, l'obtention d'entrée va être une vraie douleur dans le cul.
- Courrez-vous dans les vieux Systèmes d'exploitation, comme le DOS?
- Non, je ne le pense pas. J'ai fait cela de la manière suivante... segment de données PARLIST ÉTIQUETTE OCTET MAXLEN DB 40 ACTLEN DB ? inpchr DB 40 DUP(?) prmpt db '1 ou 0: $', 0DH, 0AH, se termine début: mov ax, data mov ds, ax mov es, ax mov bx, 1 mov cx, 0 Loop1: mov ah, 9 lea dx, prmpt int 21H ; DOS clavier pour saisir des caractères mov ah, 0AH lea dx, PARLIST int 21H ; Déplacer l'entrée char à al mov al, inpchr cmp al, 49 ; Est entrée char == 1 jne Loop1 xor bx, 1 jmp Loop1 se termine
- Qui a travaillé :-{ je suppose que pas de code dans les commentaires!
- Je suis en cours d'exécution sur WinXP, à l'aide de l'émulateur emu8086.com.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement xor le personnage avec lui-même décalé à droite une place pour obtenir le Gris de la représentation, pas de boucle nécessaire. Exemple si votre personnage est dans AL :
AL est maintenant le Gris-représentation de code.
En C ce serait :
Pour revenir à la représentation binaire vous pouvez xor-Gris code avec auto, décalé à droite par la diminution de puissances de 2, en commençant par la plus grande puissance de 2 qui est plus petite que la taille des données, par exemple:
En C ce serait :
Il a été un long temps depuis que j'ai écrit de toute réunion du code mais la question semble plus philosophique. Sans connaître les grands objectifs ici sont quelques idées.
La conversion de chaque touche comme ils sont inscrits: Nombre de fois où le programme doit répondre à clé individuelle de coups que le programme est en cours d'exécution, (c'est à dire dynamique commandes, haut, bas, gauche, etc.). Dans ce cas, les touches doivent être convertis individuellement. D'autres fois, un bloc de données ou de chaînes de caractères doivent être convertis et cette opération se fait généralement à la conclusion de la touche entrée est un grand bloc de données. Ces cas nécessitent les caractères de l'être “bouclé” grâce et de conversion.
Toutefois, dans les deux cas, le “travail” doit faire dans un générique de sous-routine qui peut être appelée à partir de deux types de situation.
J'espère que cette aide,
Ed