2011-01-09 5 views
0

Ich versuche, den folgenden Code zu verwenden, um eine Ganzzahl in ax in ASCII-Codes zu konvertieren. Aber es läuft 515, anstatt 513, wie ich erwartet hatte. Wo ist der Fehler?Problem Konvertieren Ganzzahl in ASCII-Code in x86 Assembly

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 

Antwort

1

SI ist nicht initialisiert. Es sollte auf einen Puffer zeigen, der für die Ziffern umgekehrter Reihenfolge reserviert ist.

0

Ihre divide Schleife sieht gut

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

I 315 aus der obigen Schleife erhalten.

Ich vermute, wenn Sie versuchen, die Schnur um Ihre 5 zu stampfen ist auf Ihre 3. Versuchen Sie eine Zahl wie 713 und sehen, ob es in 717 ergibt. 523, wenn Sie 525 usw. Ich rate 1234 Ergebnisse in 4334

+0

Er, Entschuldigung. Habe nicht bemerkt, dass dies eine alte Antwort war – Earlz