装配中的乘法

1 assembly masm masm32

我正在尝试创建一个计算数字阶乘的汇编程序:

.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
Run Code Online (Sandbox Code Playgroud)

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

us2*_*012 5

你要

mul ebx
Run Code Online (Sandbox Code Playgroud)

eax是隐含的.什么mul ebx确实是ebx*eax并将结果保存在edx:eax(高阶位进去edx的时候eax是不是大到足以容纳结果,在你的例子,这是没有问题的,虽然).

请注意,在n和中有两个并行计数器ecx.你可以摆脱一个让你的代码更短:

.code
start:
mov ecx, 5
mov eax, 1
Top:
mul ecx
dec ecx
jnz Top
mov res, eax
Run Code Online (Sandbox Code Playgroud)

甚至更短,可以代替两行dec ecx, jnz Top通过loop Top.现在这是一些短而甜的阶乘功能!