0

単純なアセンブリ プログラムがあり、2 つの数値 (2 バイト サイズ) を除算して剰余を出力したいと考えています。これが私のコードです

  .model small
.stack 256

.data 
    ten dw 10

.code
main proc
    mov ax, @data
    mov ds, ax

    mov ax, 12 ; divident
    div ten    ; ax/10

    mov ah, 9  ; for printing dx
    int 21h

    mov ax, 4c00h ; ending program
    int 21h
main endp
end main

したがって、このコードを実行すると、結果は「除算オーバーフロー」になり、オーバーフローが発生する理由がわかりません。何か案は?

4

3 に答える 3

0

「ten DB 10」または「div BYTE PTR ten」と書きます。

そして、あなたが次のようなものを書くなら、私は確信しています

mov cl, 10
div cl 

欲しいものも手に入る。単語分割の場合は、DX をクリアする必要があります。

ところで、それがどのアセンブリ方言かはわかりませんが、本当にこれを書く必要がありますか?

mov ax, @data
mov ds, ax

DS はデフォルトでデータ セクションを指していませんか?

そして 09h はあなたが望むことをしません。02hを見てください。

于 2013-04-06T11:42:33.030 に答える
-1

.model 小 .stack 256

.data テン dw 10

.code main proc mov ax, @data mov ds, ax

mov ax, 12 ; divident
div ten    ; ax/10
add dl,48;
mov ah, 02h  ; for printing dl not the ascii vlaue
int 21h

mov ax, 4c00h ; ending program
int 21h

メイン endp end メイン

于 2013-09-25T18:49:11.820 に答える