我正在尝试创建一个计算数字阶乘的汇编程序:
.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相乘.我怎样才能解决这个问题?任何帮助深表感谢.
你要
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.现在这是一些短而甜的阶乘功能!