entier convertir un problème de code ASCII en assembleur x86
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
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