Question

Je suis en train d'utiliser le code ci-dessous pour convertir un nombre entier en ax aux codes ASCII. Mais en cours d'exécution, il émet 515, plutôt que 513 comme je m'y attendais. Où est l'erreur?

stk segment
    dw 32 dup(0)
stk ends
dts Segment
    posnum db 6 dup(0) ;0<x<65536;
dts ends
cds Segment
    Assume cs:cds , ds:dts,ss:stk
    Main Proc Far

     mov ax,seg dts
     mov ds,ax
     mov es,ax
     xor ax,ax

     mov ax,513

     mov di,offset posnum

     Call ConvertPositive

     mov ah,09h
     mov dx ,offset posnum
     int 21h
    main_finish:
        mov ah,08h
        int 21h
        mov ax,4c00h
        int 21h
    Main endp
cds Ends

procs segment
    assume cs:procs
    ConvertPositive proc far
        xor dx,dx
        xor cx,cx
        mov bl,10
        mov bh,0
        divloop:
            mov dx,0
            div bx
            add dl,30h
            mov byte ptr [si],dl
            inc cl
            inc si
            cmp ax,0
            jne divloop
        enddiv:
            dec si
            copy:
                std
                LODSB
                cld
                STOSB   
            loop copy
            mov byte ptr [di],'$'
        ret
    ConvertPositive endp
procs ends
end Main
Était-ce utile?

La solution

SI n'est pas initialisé. Il doit pointer vers un tampon alloué pour les chiffres de l'ordre inverse.

Autres conseils

Votre apparence de boucle diviser bonne

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

 int main ( void )
 {
     unsigned int ax;
     unsigned int dx;

     ax=513;

     while(ax)
     {
        dx=ax%10;
        ax=ax/10;
        printf("%c",dx+0x30);
     }
     printf("\n");
 }

Je reçois 315 de la boucle au-dessus.

Je soupçonne que lorsque vous essayez de retourner la chaîne autour de votre 5 est piétinant sur votre 3. Essayez un certain nombre comme 713 et voir si elle aboutit à 717. 523 si vous obtenez 525, etc. Je suppose 1234 résultats en 4334.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top