装配中的乘法

时间:2013-10-15 12:50:57

标签: 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

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

1 个答案:

答案 0 :(得分:5)

你想要

mul ebx

eax是隐含的。 mul ebx的作用是ebx*eax,并将结果存储在edx:eax中(当edx不足以保存结果时,较高位的位会进入eax,在你的例子中,这不是问题。)

请注意,necx中有两个并行计数器。您可以删除一个以缩短代码:

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

更短,您可以用dec ecx, jnz Top替换两行loop Top。现在那是一些短而甜的因子功能!