Problem Umwandlung Ganzzahl-ASCII-Code in x86 Montage
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
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