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の出口を出たと思います。

誰が私たちがint21を再び見るだろうと思ったのですか?

于 2011-04-15T16:54:42.297 に答える