Domanda

Sto cercando di utilizzare il codice riportato di seguito per convertire un intero in ax ai codici ASCII. Ma in esecuzione emette 515, anziché 513 come mi aspettavo. Dov'è l'errore?

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
È stato utile?

Soluzione

SI non è inizializzata. Dovrebbe puntare a un buffer allocato per le cifre di ordine inverso.

Altri suggerimenti

Il divario sguardi ciclo buona

#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");
 }

ottengo 315 fuori dal giro sopra.

ho il sospetto quando si tenta di capovolgere la corda intorno al 5 è stomping sul vostro 3. Prova un numero come 713 e vedere se si traduce in 717. 523 se si ottiene 525, ecc sto indovinando 1234 risultati in 4334.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top