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

我在上面的代码中遇到的错误是 mul 部分,我想将 eax 和 ebx 相乘。我怎样才能解决这个问题?任何帮助深表感谢。

4

1 回答 1

6

你要

mul ebx

eax是隐含的。什么mul ebxebx*eax将结果存储在其中(当不足以容纳结果时,edx:eax高阶位进入,但在您的示例中这不是问题)。edxeax

请注意,您在n和中有两个并行计数器ecx。你可以去掉一个来使你的代码更短:

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

甚至更短,您可以将这两行替换dec ecx, jnz Toploop Top. 现在这是一些简短而甜蜜的阶乘函数!

于 2013-10-15T13:05:30.343 回答