Assemblée : Convertir en 8 bits du nombre binaire à l'hexadécimal nombre
J'ai besoin d'écrire assemblée programme sur tasm que doit prendre pour l'entrée: 8 bits du nombre binaire et la sortie doit être : représentation hexadécimale du même nombre.
exemple:
10010110 ->96
10110100 ->B4
Depuis que je suis très nouveau dans l'assemblée,je n'ai pas la moindre idée d'où je peux commencer à résoudre ce genre de problème.
edit :
Voici mon idée de base de la façon dont le programme doit être structuré:
.MODEL SMALL
.STACK 100H
.DATA
PROMPT_1 DB 'Enter the binary number : $'
PROMPT_2 DB 0DH,0AH,'The number of 1 bits is : $'
HEX_MAp DB '1,2,3,4,5,6,7,8,9,A,B,C,D,E,F'
HEXA DB ?
.CODE
MAIN PROC
MOV AX, @DATA ; initialize DS
MOV DS, AX
LEA DX, PROMPT_1 ; load and display PROMPT_1
MOV AH, 9
INT 21H
XOR BX, BX ; clear BX
MOV CX, 16 ; initialize loop counter
MOV AH, 1 ; set input function
/
Ok,donc après que l'on charge les PROMT_1
variable qui contient notre nombre binaire nous avons besoin de le séparer en 2 amuse-gueules
(permet de supposer que notre contribution est toujours corriger les 8 bits d'entrée)
j'ai trouvé quelques conseils avec google qui stipule:
Imaginez que vous avez déjà un nombre binaire stocké dans le registre ah
pour exapmple 10101100
mov al, ah
shr al, 4
sorte que nous avons dans al
00001010
c'est le premier chiffre hex forme, si elle est moins thatn 10 vous venez de sortie en décembre, sinon la sortie de la caractère (A, B, C, D, E, F)
ensuite faire de même avec les 4 autres chiffres
mov al, ah
shl al, 4
shr al, 4
sorte que nous avons dans al
00001100
de sortie et le résultat
/
MOV AH, 4CH ; return control to DOS
INT 21H
MAIN ENDP
END MAIN
J'ai besoin de quelques conseils pour la mise en œuvre correcte ici(je ne suis vraiment pas dans l'assemblée de la syntaxe pour l'instant,aussi la logique de la langue est très inhabituel pour moi)
- Avez-vous essayé la lecture ou à la suite de toute tutoriels sur l'ASM? Est le Q sur ASM ou sur la conversion de binaire en hexadécimal? Si son ex alors que vous pouvez trouver des réponses similaires. Vous devriez toujours tenter de nous montrer ce que vous avez essayé. stackoverflow.com/help/how-to-answer
- Oui je suis élaboration d'une certaine idée de base de ce que le code pourrait ressembler(comme je l'ai dit avant, je suis vraiment pas dans l'assemblée pour l'instant)
- Comment le programme est censé recevoir l'entrée ? c'est à dire, où le programme obtenir les 8 bits de la valeur qui est de convertir ?
Vous devez vous connecter pour publier un commentaire.
Diviser l'octet dans 2 unités, puis utiliser un 16-entrée carte pour trouver le personnage.
Vous avez deux missions principales:
1) pour lire une chaîne de caractères à partir de STDIN et de le convertir dans le format informatique, un entier dans un registre, et
2) pour convertir un entier en une chaîne hexadécimale et de sortie.
Il est plus facile pour vous de séparer les tâches et les traiter séparément. Pour la deuxième tâche, il existe deux méthodes courantes:
1) Lire le code hexadécimal du caractère à partir d'un tableau (Exemple N ° 1 dans le code suivant). Vous avez besoin d'une table avec 16 entrées pour chaque grignoter. Un quartet est un bloc de 4 bits. Et oui: vous pouvez également créer un tableau avec 256 entrées pour gérer un octet sans "nibblifying", ou une table avec 65536 entrées pour un mot (avec un peu de difficulté en mode 16 bits).
2) Calculer le code ASCII de chaque grignoter (Exemple N ° 2 dans le code suivant).
J'espère que ce code est utile:
Afin de séparer le faible grignoter du registre AL nous pouvons utilisation simple: