Assembly 改进装配工艺
我想写一个通过参数的阶乘过程。请帮忙。请帮助我查看此代码是否需要改进,例如如何使此代码更短、更简单。它太长了,我只想要主功能Assembly 改进装配工艺,assembly,masm,factorial,irvine32,Assembly,Masm,Factorial,Irvine32,我想写一个通过参数的阶乘过程。请帮忙。请帮助我查看此代码是否需要改进,例如如何使此代码更短、更简单。它太长了,我只想要主功能 INCLUDELIB C:\Irvine\Kernel32.lib INCLUDELIB C:\Irvine\Irvine32.lib INCLUDE C:\Irvine\Irvine32.inc .code main PROC push 5 ; calc 5! call Factorial ; calcul
INCLUDELIB C:\Irvine\Kernel32.lib
INCLUDELIB C:\Irvine\Irvine32.lib
INCLUDE C:\Irvine\Irvine32.inc
.code
main PROC
push 5 ; calc 5!
call Factorial ; calculate factorial (EAX)
call WriteDec ; display it
call Crlf
exit
main ENDP
;----------------------------------------------------------
Factorial PROC
; Calculates a factorial.
; Receives: [ebp+8] = n, the number to calculate
; Returns: eax = the factorial of n
;----------------------------------------------------------
push ebp
mov ebp,esp
mov eax,[ebp+8] ; get n
cmp eax,0 ; n > 0?
ja L1 ; yes: continue
mov eax,1 ; no: return 1 as the value of 0!
jmp L2 ; and return to the caller
L1: dec eax ; Factorial(n-1)
push eax
call Factorial
; Instructions from this point on execute when each
; recursive call returns.
ReturnFact:
mov ebx,[ebp+8] ; get n
mul ebx ; EDX:EAX = EAX * EBX
L2: pop ebp ; return EAX
ret 4 ; clean up stack
Factorial ENDP
END main
这将额外乘以1,但它很短
factorial proc near
mov ecx,[esp+4]
mov eax,1
cmp ecx,eax
jb fct1
fct0: mul ecx
loop fct0
fct1: ret
factorial endp
这将额外乘以1,但它很短
factorial proc near
mov ecx,[esp+4]
mov eax,1
cmp ecx,eax
jb fct1
fct0: mul ecx
loop fct0
fct1: ret
factorial endp
这将额外乘以1,但它很短
factorial proc near
mov ecx,[esp+4]
mov eax,1
cmp ecx,eax
jb fct1
fct0: mul ecx
loop fct0
fct1: ret
factorial endp
这将额外乘以1,但它很短
factorial proc near
mov ecx,[esp+4]
mov eax,1
cmp ecx,eax
jb fct1
fct0: mul ecx
loop fct0
fct1: ret
factorial endp
接下来是使用循环指令的非递归阶乘的完整程序,只需复制、粘贴和运行(使用EMU8086制作):
接下来是使用循环指令的非递归阶乘的完整程序,只需复制、粘贴和运行(使用EMU8086制作):
接下来是使用循环指令的非递归阶乘的完整程序,只需复制、粘贴和运行(使用EMU8086制作):
接下来是使用循环指令的非递归阶乘的完整程序,只需复制、粘贴和运行(使用EMU8086制作):
考虑到那12个!是使用32位寄存器可以计算的最大值,您可以只对12个条目的表进行单个索引。你也可以索引到一个12个条目的分支表中,进入一个展开的循环,这个循环可以进行乘法运算,或者你可以循环多达12次“我太迷路了。我保证我会接受这个答案!我只需要知道如何用非草书书写!我认为这是为了家庭作业?我投票将这个问题作为离题题结束,因为它似乎是在家庭作业上寻求帮助,而没有显示所做的尝试和中概述的具体困难。考虑到这一点,12!是使用32位寄存器可以计算的最大值,您可以只对12个条目的表进行单个索引。你也可以索引到一个12个条目的分支表中,进入一个展开的循环,这个循环可以进行乘法运算,或者你可以循环多达12次“我太迷路了。我保证我会接受这个答案!我只需要知道如何用非草书书写!我认为这是为了家庭作业?我投票将这个问题作为离题题结束,因为它似乎是在家庭作业上寻求帮助,而没有显示所做的尝试和中概述的具体困难。考虑到这一点,12!是使用32位寄存器可以计算的最大值,您可以只对12个条目的表进行单个索引。你也可以索引到一个12个条目的分支表中,进入一个展开的循环,这个循环可以进行乘法运算,或者你可以循环多达12次“我太迷路了。我保证我会接受这个答案!我只需要知道如何用非草书书写!我认为这是为了家庭作业?我投票将这个问题作为离题题结束,因为它似乎是在家庭作业上寻求帮助,而没有显示所做的尝试和中概述的具体困难。考虑到这一点,12!是使用32位寄存器可以计算的最大值,您可以只对12个条目的表进行单个索引。你也可以索引到一个12个条目的分支表中,进入一个展开的循环,这个循环可以进行乘法运算,或者你可以循环多达12次“我太迷路了。我保证我会接受这个答案!我只需要知道如何用非草书书写!我认为这是为了家庭作业?我投票将这个问题作为离题题结束,因为它似乎是在家庭作业上寻求帮助,而没有显示所做的尝试和中概述的具体困难。