11

アセンブリで2つの数値を分割しようとしています。私はIntelコンピューターの本のためのIrvineアセンブリーで作業していて、私の人生のために除算を機能させることはできません。

これが私のコードです

.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がクラッシュします(ただし、プログラムはコンパイルされます)。

4

3 に答える 3

17

除算を行う前に、EDXレジスタをゼロ拡張する必要があります。

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

これ;set edx to zeroはMASMのコメントです。Cでインラインアセンブリを使用している場合に機能するかどうかはわかりません。そのため、コピーしないでください:)

于 2010-02-13T00:28:52.543 に答える
4

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

これを行う最も簡単な方法は次のとおりです。

xor edx, edx
于 2010-05-22T01:20:21.550 に答える
0

上記の理由は正しいと思います.eaxをebxで割ると両方とも32ビットの数値ですが、被除数は64ビットである必要があります除数は32ビットであり、edxをmsbと見なします...uはedxを0にするか、代わりに3bx を使用する場合は、bx のみを使用します。そのようにすると、32 ビットの数値が 16 ビットの数値で除算されます。

于 2010-03-01T12:58:15.893 に答える