-4

これが私のコードです:

.data
        ans1 db 0
        ans2 db 0
.data? 
        in1 db 100 dup(?) ; first input value
        in2 db 100 dup(?) ; second input value
.code
start:
        ; here I have code for input 
        ; I get 2 nums, and I want to multiply and divide them
        ; here is what I already have to mul/div them:
        lea eax, in1
        lea edx, in2
        imul eax ; multiply in1 and in2
        mov ans1, eax ; move result to ans1
        xor eax, eax ; clear register
        xor edx, edx ; " "
        lea eax, in1
        lea edx, in2
        idiv eax ; divide in1 by in2
        mov ans2, eax ; move result to ans2
        lea eax, ans1
        push eax
        call StdOut ; print ans1 (I have include instructions at the start)
        lea ebx, ans2
        push ebx  
        call StdOut ; print ans2 ("")

私の質問:1。正確にどのレジスタを配置in1し、in2それらを乗算しますか?2. ""それらを分割するには?3.残りは部門のどこに保管されますか?

そして、一般的なステートメントについて心配する必要はありません。乗算と除算で確実に(可能な限り)機能するレジスタを教えてください。

注:この投稿はx86アセンブリの繰り返しであると言う人もいるかもしれません-masm32:乗算と除算の絶対的な内訳です​​が、(間違っている場合は訂正してください)フォーラムコミュニティでは、追加するよりも新しい投稿を作成する方が尊重されます古いものにコメントし、トピックから外します。

4

1 に答える 1

1

アセンブリを作成している場合は、参照仕様から離れすぎないようにする必要があります。

Unsigned multiply (AX ← AL ∗ r/m8).

あなたが知る必要があるすべてを教えてくれます。結果はに配置されAXます。ソースはALと任意の8ビットレジスタまたはメモリ位置です。

編集

あなたの質問は正しくフォーマットされていない/フォーマットされていませんでした、あなたの質問は同じ行にありました。

除算はDIV

Unsigned divide AX by r/m8, with result stored in AL ← Quotient, AH ← Remainder

真剣に:マニュアルを読んでください。

于 2012-05-22T04:18:22.103 に答える