Проблема преобразования целого числа к коду ASCII в сборке x86
Вопрос
Я пытаюсь использовать код ниже, чтобы преобразовать целое число в ax
к кодам ASCII. Но запуска его выводы 515, а не 513, как я ожидал. Где ошибка?
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
Решение
SI
не инициализируется. Он должен указывать на буфер, выделенный для цифр обратного заказа.
Другие советы
Ваш разделительный цикл выглядит хорошо
#включатьu003Cstdio.h> #включатьu003Cstdlib.h> #включатьu003Cstring.h> int main (void) {unsigned int ax; unsigned int dx; топор = 513; в то время как (топор) {dx = ax% 10; топор = топор / 10; printf ("% c", dx + 0x30); } printf (" n"); }
Я получаю 315 из вышеупомянутой петли.
Я подозреваю, что когда вы пытаетесь перевернуть строку вокруг 5, топпируется на вашем 3. Попробуйте номер, как 713 и посмотрите, приводит ли это в 717. 523, если вы получите 525 и т. Д. Я догадываюсь, что 1234 результаты в 4334 году.
Не связан с StackOverflow