2010-10-27 11 views
0

J'écris un convertisseur numérique entre les systèmes de numérotation (b h d), le programme accepte un nombre binaire de 16 bits, ou 4 chiffres hexadécimal. ou 5 décimales.Lecture du nombre décimal à 5 ​​chiffres dans l'assemblage x86

la procédure de lecture je l'ai écrit semble avoir un problème lorsque la valeur décimale est supérieure à 65535 (FFFFh) depuis im traitant des registres 16 bits et il ne peut pas contenir des valeurs plus élevées

Je vous serais reconnaissant si vous me aider.

Voici ma procédure de lecture:

Proc R 
     mov ah,01;read first digit 
    int 21h 
    mov saveal,al 

    cmp al,0dh; if it is a new line break then dont read 
    jz toret 

    mov al,radex ; the radex value already entered by user 
    mov ah,0 
    mul dx 
    mov dx,ax; multiplies the radex by the number entered so far to shift it 1 dig.      

    mov al,saveal 
    cmp al,65 
    jge big2 
    sub al,30h; taking decimal value of the character 

    cont2: 
    call checkerror 
    mov ah,0 
    add dx,ax; adding the digit to the number read so far 

loop R 

toret: 
ret 
endp 

Merci Nataly

+3

Eh bien, que voulez-vous faire? Voulez-vous utiliser le stockage 32 bits ou souhaitez-vous identifier et rejeter les valeurs> 65535? –

+0

Je veux aussi convertir les nombres> 65535, j'ai essayé les registres étendus mais je n'ai pas pu les gérer correctement. – Nataly

Répondre

2

vous avez besoin plus de bits pour aller au-65536 (0xFFFF) si vous avez besoin d'un registre plus, 32 bits ou un autre registre 16 bits . Réglez cet autre registre de 16 bits à zéro et après votre ajout pour ajouter les chiffres jusqu'à présent, mettez un ajout avec carry pour ajouter le bit de retenue dans ce registre suivant. Donc, 0xFFFF + 5 par exemple est 0x10004 ou 0x0004 avec le bit de retenue, prenez cet autre registre, ajoutez-y le bit de retenue pour récupérer cet autre bit, maintenant vous avez 0x0001 dans le registre de poids fort et 0x0004 dans le registre de poids fort et 0x0004 dans le registre registre de faible importance.

Absolument aucune différence que si vous deviez faire addition avec un crayon et du papier. 99 + 5 = 04 avec un "porter le un" à la place des centaines. Et quand les centaines débordent, vous les portez à l'endroit suivant. binaire est le même beaucoup plus facile. Chaque colonne binaire est comme une colonne décimale lorsque vous le faites sur papier, elle est invisible du bit 0 au bit 15, mais le report du bit 15 est visible afin que vous puissiez enchaîner les additionneurs et les rendre aussi arbitrairement que vous le souhaitez.

Questions connexes