質問

私は、アセンブリ内格差2つの数値をしようとしています。私は、Intelのコンピュータの本のためアーバインアセンブリの外に働いていると私は私の人生のための部門の仕事をすることはできません。

ここに私のコードがあります。

.code
main PROC
    call division
    exit
main ENDP

division PROC
    mov eax, 4
    mov ebx, 2
    div ebx
    call WriteDec
    ret
divison ENDP

END main

ここでWriteDecは(分割呼び出し後商に設定されるべきである)EAXレジスタにあるどんな数書くべきです。代わりに、毎回私は、Visual Studioがクラッシュする(ただし、プログラムがコンパイルん)。

それを実行します
役に立ちましたか?

解決

あなたは分裂を行う前に、あなたのEDXレジスタを拡張ゼロにする必要があります。

mov eax, 4
mov ebx, 2
xor edx, edx          ;set edx to zero
div ebx
call WriteDec

;set edx to zeroはMASM内のコメントです。それはあなたがCでインラインアセンブリを使用している場合は動作しますので、あなたがある場合は、それをコピーしない場合、私は知りません。)

他のヒント

はい、あなたはゼロにedxを設定する必要があります。

これを行う最も簡単な方法はあります:

xor edx, edx

私はuがEBXによってEAXを分割するときの両方が32ビットの数値であるが、配当は64ビットの除数が32ビットであることが必要であるので、それはuがEDXを行うことができる... MSBとしてEDXを考慮しているため、上述した理由が正しいと思います0又は代わりのみuは16ビット数で32ビット数を分割するそのようbx..in 3bxの使用を使用しての

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top