2013-10-15 41 views
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。我怎样才能解决这个问题?任何帮助深表感谢。

+0

_“我遇到的错误是多个部分”_。而什么,完全是错误? – Michael

回答

5

你想

mul ebx 

eax是隐含的。 mul ebx做的是ebx*eax并将结果存储在edx:eax(当eax不足以保存结果时,更高位进入edx,在您的示例中,这不是问题)。

请注意,您有两个并行计数器necx。你可以摆脱一个,让你的代码更短:

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

更短,您可以通过loop Top代替两行dec ecx, jnz Top。现在这就是一些短而甜的析因函数!