Проблема преобразования целого числа к коду ASCII в сборке x86

StackOverflow https://stackoverflow.com/questions/4639745

  •  08-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь использовать код ниже, чтобы преобразовать целое число в 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 году.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top