Frage

Ich versuche, den Code zu verwenden, unten eine ganze Zahl in ax in ASCII-Codes zu konvertieren. Aber es läuft gibt 515 statt 513, wie ich erwartet hatte. Wo liegt der Fehler?

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
War es hilfreich?

Lösung

SI ist nicht initialisiert. Es sollte auf einen Puffer für die umgekehrte Reihenfolge Ziffern zugewiesen zeigen.

Andere Tipps

Ihre divide Schleife sieht gut aus

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

Ich bekomme 315 aus der obigen Schleife.

Ich vermute, wenn Sie versuchen, die Schnur um Ihre 5 zu kippen stampfen auf Ihrem 3. eine Reihe Versuchen Sie, wie 713 und sehen, ob es in 717. 523 führt, wenn Sie 525 bekommen, etc. Ich 1.234 Ergebnisse in 4334 bin zu raten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top