Comment faire pour convertir à partir de 4 bits en hexadécimal ASCII de 7 bits?
La mission est d'apprendre de l'assemblée de la programmation par l'écriture d'un sous-programme qui peut convertir entre les 4 bits en hexadécimal et ASCII 7 bits. Au début, je n'avais aucune idée, mais après quelques recherches j'ai pu faire et de l'effort et de dessiner un organigramme et d'en faire un programme mais il n'est pas tout à fait correct c'est pourquoi je sollicite vos conseils pour m'aider à résoudre ce problème.
L'attribution texte, le voici:
HA 3.1. Dessiner un organigramme pour une sous-routine pour convertir un 4 bits
la valeur hexadécimale correspondant à l'7-bit ASCII-code. Voir l'intégralité de l'
spécification pour hexasc ci-dessous. Exemple: binaire 0010 (hexadécimal
chiffre 2) est converti 011 0010 (ASCII-code '2'). Un autre
exemple: binaire 1011 (chiffre hexadécimal B) est convertie à 100 0010
(ASCII-code 'B') assurez-vous que votre sous-routine est documenté
en fonction de nos exigences.HA 3.2. À l'aide de la labwork projet dans le Nios II IDE, créer un nouveau
fichier appelé hexasc.sHA 3.3. Dans le fichier hexasc.s, écrire un sous-programme appelé hexasc, que
convertit un 4 bits, la valeur hexadécimale correspondant à 7 bits
ASCII-code.
J'ai dessiné un diagramme de flux pour le programme:
Et le programme que j'ai essayé est ce mais je soupçonne qu'il n'est pas conforme aux spécifications:
.global main
.text
.align 2
main: movi r8, 0x09
movi r9, 0x0f
andi r4, r4, 0x0f
bgt r8, r4, L1
movi r2, 0x1e
add r2, r2, r4
andi r2, r2, 0xff
movia r2,putchar
br L2
L1: movi r2, 0x29
add r2, r2, r4
andi r2, r2, 0xff
movia r2,putchar
L2: .end
Pouvez-vous m'aider à développer et à résoudre cette mission? Il ya beaucoup de temps, il n'est pas en raison jusqu'à un mois.
Mise à jour
Après avoir vu ici dans un commentaire que l'organigramme a été incorrect, j'ai fait les ajustements nécessaires:
Je tiens aussi à discuter de la façon dont cet algorithme est correct qui convertit entre le format hexadécimal et ASCII.
Mise à jour /modifier
Voici le programme complet.
.global hexasc
.text
.align 2
hexasc: movi r8, 0x09
movi r9, 0x0f
andi r4, r4, 0x0f #keep only 4 bits
bgt r4, r8, L1 #is x>9?
movi r2, 0x30
add r2, r2, r4
andi r2, r2, 0xff
ret
L1: movi r2, 0x37
add r2, r2, r4
andi r2, r2, 0xff
ret
Je suis sûr que vous êtes censé masque et de ne garder que les quatre derniers bits, pas d'octets. Votre code ne fait que correctement.
Ce n'est pas clair dans
a=h+((h>9)?55:49)
? C'est ce que le corrigé schéma décrit maintenant, à l'exception de la formule doit avoir 48 et pas 49.Je ne sais pas ce que l'assembleur que vous utilisez, mais il ne peut certainement travailler avec les chaînes de caractères au lieu de seulement des chiffres. Pour convertir 5 ASCII, vous venez d'ajouter 5 au caractère
'0'
. Laissez l'assembleur faire le travail d'évaluation que '0'
est 30H et 30H + 5 est de 35H, qui est le caractère ASCII '5'. Si vous le faites de cette façon, votre code est auto-documenter au lieu de jonché avec des numéros de magie.De la myriade de comment puis-je convertir décimal, binaire, hexadécimal, ascii questions que nous avons vu lors de. Celui-ci est la peine de répondre parce que vous avez tenté de le faire, de la pensée à travers elle, de comprendre le nombre de systèmes et de représentations en bits, juste eu un subtil mathématiques erreur.
OriginalL'auteur Niklas Rosencrantz | 2012-08-21
Vous devez vous connecter pour publier un commentaire.
Lorsque vous masque sur la partie inférieure de quatre bits, vous avez le potentiel pour se retrouver avec les valeurs de 0x0 à 0xF. Le tableau des résultats désirés est:
À partir de ce tableau de résultats souhaités, nous pouvons voir qu'il y a deux linéaires sections, à partir de 0x0 à 0x9 et de 0xA à 0xF. Pour le 0x0 à 0x9 cas 0x30 - 0 x 0 = 0x30 nous avons donc ajouter 0x30. Pour le 0xA à 0xF section 0x41 - 0xA = 0x37.
Ça marche?
Semble bon.
D'une manière légèrement différente est toujours ajouter 0x30 puis ajuster après.
Lors de la création du résultat souhaité de la table, du côté gauche, vous devriez avoir connu quelque chose de anded avec 0xF vous donne 0x0 à 0xF, et il semble que vous avez fait. Le côté droit de la table désirée vient de l'ASCII. Je pense que si vous aviez fait ce graphique et sortons d'une calculatrice (oui que peu de chose avec des boutons que les personnes âgées, bien que d'un autre qui ne l'hexagone, votre téléphone doit avoir une application pour ça). À partir de là, visuellement, à partir de cette table venir avec de l'algorithme.
Vous devriez également demander à vous-même, que si je veux de A à F pour être en minuscules au lieu de majuscules (a,b,c,d,e,f)? Comment puis-je modifier l'algorithme?
bien le code que vous avez là est encore mal, mais votre mise à jour de l'algorithme utilise les bons chiffres, vous avez 0x1e dans le code où vous devriez avoir 0x30 et 0 x 29 où vous devriez avoir 0x37. vous n'avez pas besoin de et avec 0xFF à la fin le plus grand nombre serait 0xF + 0x37 = 0x46.
OriginalL'auteur old_timer
Quelques erreurs dans l'organigramme
1.Masque et garder seulement les quatre derniers octets --> bits
2.Décision
0<x<9
-->0<=x<=9
3.Décision
9<x<15
-->9<x<=15
(également superflu!)Le programme
OriginalL'auteur Sep Roland