質問

これは私のコードです:

.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.正確にどのレジスタを掛けますか。in1in2を複数回掛けますか。 それらを分割するには? 3.部門に収納されている残りはどこですか?

一般的な声明を心配しないでください、どの登録者が絶対に乗算と除算で(できるだけ近く)作業するかを教えてください。

注: この投稿は x86アセンブリ - MASM32:乗算と部門の絶対的な内訳、しかし(私が間違っているなら私を正しければ正しい)古い投稿をするのではなく、新しい投稿をすることをより尊重して、トピックをオフにします。

役に立ちましたか?

解決

アセンブリを書いている場合は、参照仕様

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

あなたが知る必要があるすべてのものをあなたに伝えます。結果はAXに配置されます。ソースはAL、および8ビットレジスタまたはメモリの位置です。

編集

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

除算はDIV

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

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

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