質問
私は、アセンブリ内格差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の使用を使用しての
所属していません StackOverflow