2

我需要将 32 位数字转换为 ASCII。我不知道我该怎么做......

这是我写的代码:可以转换的最大数字是 0001FFFF,如果我将 Dx 设置为000F并将 Ax 设置为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

我应该怎么办?

提前致谢

4

2 回答 2

2

呵呵,这很容易:P

我相信您可能会遇到“除法错误”,但不是特别是“除以零错误”

您说当 DX=0xF 时出现错误,对吗?

那么 0x000FFFFF = 1048575 ...除以 10 你得到 >65535 ...答案:你只是得到一个除法溢出。结果需要适合 AX。

于 2011-04-15T17:29:41.323 回答
0

我会说你会推出一个 CR (015)、一个 LF (012) 并退出 BIOS。

谁会想到我们会再次看到int 21?

于 2011-04-15T16:54:42.297 回答