32-разрядный двоичный код для сборки ASCII 8086 - PullRequest
2 голосов
/ 15 апреля 2011

Мне нужно преобразовать 32-битное число в ASCII.Я не знаю, как я могу это сделать ....

Это код, который я написал: самое большое число, которое можно преобразовать, это 0001FFFF, если я установлю Dx на 000F иТопор к FFFF ассемблер выдаст мне ошибку переполнения при делении !!!

data segment  
    save db 10 dup(' ') , '$' ; the ASCII will save here
data ends

stack segment
    dw   128  dup(0)
stack ends

code segment
    assume cs:code , ds:data , ss:stack

    main proc far
    mov ax, data
    mov ds, ax
    mov es, ax



    mov di,offset save
    add di , 9

    mov ax,0ffffh
    mov dx,0001h


    mov cx,10  ; dx ax will divide by cx

    convert:
       div cx

       add dl,'0'
       mov [di],dl
       dec di

       mov dx,0



       cmp ax,cx
    jge convert

    add al,'0'
    mov [di] , al

    ;show the number
    mov ah,09h
    mov dx,offset save
    int 21h





    ; wait for any key....    
    mov ah, 1
    int 21h

    mov ax, 4c00h ; exit to operating system.
    int 21h    
    main endp
code ends    

end main

что мне делать?

заранее спасибо

Ответы [ 2 ]

2 голосов
/ 15 апреля 2011

Хе-хе, это просто: P

Я полагаю, что вы можете получить «Ошибка деления», а не «Ошибка деления на ноль»

Вы говорите, что получаете ошибкукогда DX = 0xF, верно?

Ну 0x000FFFFF = 1048575 ... разделите это на 10, вы получите> 65535 ... Ответ: вы просто получите переполнение.Результат должен соответствовать AX.

0 голосов
/ 15 апреля 2011

Я бы сказал, что вы бы выпустили CR (015), LF (012) и выбрали бы выход в BIOS.

Кто, черт возьми, мы когда-нибудь увидим снова в 21?

...