1

数値の階乗を計算するアセンブリ プログラムを作成しようとしています。

.data
n dword 1
res dword 1

.code
start:
mov ecx, 5
Top:
add n, 1
mov eax, res
mov ebx, n
mul eax, ebx
mov res, eax
dec ecx
jnz Top

Next:
Invoke crt_printf, addr res

上記のコードで発生しているエラーは、eax と ebx を乗算する mul 部分です。どうすればこれを修正できますか? どんな助けでも大歓迎です。

4

1 に答える 1

6

あなたがしたい

mul ebx

eax暗黙的です。結果を保存するのmul ebxは何ですか(結果を保持するのに十分な大きさでない場合、上位ビットが入りますが、あなたの例ではこれは問題ではありません)。ebx*eaxedx:eaxedxeax

と に 2 つの並列カウンターがあることに注意してnくださいecx。コードを短くするために1つを取り除くことができます:

.code
start:
mov ecx, 5
mov eax, 1
Top:
mul ecx
dec ecx
jnz Top
mov res, eax

dec ecx, jnz Topさらに短くすると、2 行をに置き換えることができますloop Topこれで、短い階乗関数ができました。

于 2013-10-15T13:05:30.343 に答える