Problema conversión de número entero a código ASCII en x86 conjunto
Pregunta
Estoy intentando usar el siguiente código para convertir un entero en ax
a los códigos ASCII. Pero el funcionamiento se da salida a 515, en lugar de 513 como lo esperaba. ¿Dónde está el error?
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
Solución
SI
no se ha inicializado. Se debe apuntar a un búfer asignado para los dígitos orden inverso.
Otros consejos
Su división miradas bucle buena
#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"); }
consigo 315 fuera del circuito anterior.
sospecho cuando intenta girar la cuerda alrededor de su 5 está pisando fuerte en su 3. Pruebe un número como 713 y ver si el resultado es 717. 523 si se obtiene 525, etc. Estoy adivinando 1234 resultados en 4334.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow