`
qdujunjie
  • 浏览: 110379 次
  • 性别: Icon_minigender_1
  • 来自: Mars
社区版块
存档分类
最新评论

汇编语言实现递归阶乘算法代码分析(8)

阅读更多

 

 

来自于《Intel汇编语言程序设计》(第四版)第八章的代码,但是我总是感觉有错误,红色代码部分从逻辑上看永远不会被执行到,以下为源代码:

 

 

【注:因为使用的是32位寄存器,因此可以容纳的最大阶乘是12!(479001600)】

 

 

TITLE Calculating a Factorial                        ( Fact.asm )

 

INCLUDE Irvine32.inc

.code

main PROC

        push 12                   ; calc 12!

        call Factorial            ; calculate factorial (eax)

ReturnMain:

        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

           jmp L2

L1:      dec eax

           push eax               ; Factorial(n-1)

           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

 

 

为什么感觉有问题呢,红色代码什么时候才会被执行到呢?

0
0
分享到:
评论

相关推荐

    汇编语言求阶乘

    本文介绍了如何在汇编语言中实现阶乘计算的完整算法。通过对数据段、堆栈段和代码段的设置,以及使用输入/输出操作、位操作、数学运算、递归调用和内存管理等技术手段,实现了用户输入数字后的阶乘计算并输出结果。...

    汇编 子程序设计 阶乘

    在汇编语言编程中,子程序...通过实现递归阶乘计算,学生可以更好地理解递归调用的工作原理以及如何在汇编语言中实现这种调用。此外,实验还要求学生观察并记录运行结果,这有助于他们理解递归算法的执行过程和效率。

    汇编求阶乘

    本主题聚焦于如何使用汇编语言实现一个计算阶乘的递归子程序,并将其结果显示出来。阶乘是一个数学概念,表示的是从1到某个正整数N的所有整数的乘积,通常表示为N!。 首先,我们需要理解阶乘的基本定义:N! = N * ...

    汇编语言与接口技术-求一个数的阶乘(课程设计)

    本篇文章将探讨如何使用汇编语言来实现一个计算阶乘的程序,这是一个常见的算法问题,同时也是学习汇编语言的良好实践。 阶乘是一个数学概念,表示一个正整数n的所有小于等于n的正整数的乘积,通常表示为n!。例如,...

    大数阶乘相乘和快速排序汇编实现

    在"快速排序算法.txt"和"阶乘代码.txt"这两个文件中,你应该能找到具体的汇编代码实现,通过分析这些代码,可以更好地理解这两种算法在底层是如何工作的。汇编语言编程虽然难度较高,但能够提供对硬件的直接控制,...

    微机原理与接口——计算N的阶乘

    6. **汇编语言实现高级语言的数学函数**:通过汇编语言,可以实现像阶乘这样的数学运算,这对于理解计算机底层的计算机制至关重要。 在实验内容部分,我们需要编写一个汇编程序来实现上述功能,步骤包括: 1. 打开...

    汇编语言实验报告之一

    【汇编语言实验报告之一】涉及的是使用汇编语言实现冒泡排序算法的程序设计。在本次实验中,学生需要掌握以下几个关键知识点: 1. **冒泡排序算法**:冒泡排序是一种简单的排序算法,通过重复遍历待排序的元素列表...

    汇编语言程序设计实验指导书2007

    **:实现阶乘函数通常需要递归或循环结构,这对于展示汇编语言的流程控制和计算能力至关重要。 5. **显示字符串**:在汇编语言中,显示字符串涉及对显示器硬件的直接操作,学习者需要理解BIOS中断或DOS调用来实现...

    asm.rar_factoriel

    标题“asm.rar_factoriel...总的来说,"asm.rar_factoriel"项目展示了如何使用汇编语言和递归算法来实现阶乘计算。通过阅读和分析fct.asm文件,我们可以深入了解底层计算机操作以及如何在低级语言中实现高级数学概念。

    汇编-子程序设计-阶乘.doc

    在汇编语言编程中,子程序设计是一项重要的技术,尤其在实现复杂算法时。本实验主要关注如何使用汇编语言编写子程序来计算阶乘,并通过子程序设计的方法进行深入理解。实验的目标包括掌握子程序设计的基本方法,实现...

    汇编语言程序设计练习题

    ### 汇编语言程序设计练习题解析 #### 练习题1:输入两个字符,然后按逆序输出。 - **知识点**: - 字符输入/输出:使用INT 21H中断来读取和显示字符。 - 数据交换:通过XCHG或临时变量实现字符数据的交换。 ###...

    微机原理与接口技术 第一次实验代码

    `Factory.asm`文件很可能是实现阶乘计算的代码,其中可能包含了递归或迭代的算法设计。 3. **九九乘法表**:九九乘法表是儿童学习基础数学运算的工具,用表格形式展示了1到9的所有整数对的乘积。在汇编语言中实现...

    小精灵——微机接口

    递归算法在汇编语言中实现需要特别注意控制栈空间的使用,因为每次递归调用都会增加栈的深度。在计算阶乘的递归过程中,递归基线是1的阶乘等于1,而其他情况下n的阶乘是n乘以(n-1)的阶乘。在汇编中,递归函数的返回...

    常用算法汇编(用C语言描述)

    本资源“常用算法汇编——用C语言描述”显然是一份集合了多种常见算法的代码库,旨在帮助开发者理解和应用这些算法。 1. **排序算法**:排序是数据处理的基础,包括冒泡排序、选择排序、插入排序、快速排序、归并...

    汇编课设 包含二,十,十六进制转换,击鼓传花,输出字符串的ascii值的程序,计算阶乘(1000及以上).zip

    在本汇编课程设计中,...`汇编语言课程报告.docx`可能包含了学生对这些项目的详细分析和总结,有助于深化理论理解并展示实践成果。而`.EXE`文件是编译后的可执行程序,可以直接在DOSBox中运行,验证源代码的正确性。

    VC的小程序(连续整型数的阶乘累加)

    总之,"VC的小程序(连续整型数的阶乘累加)"是编程教育中的一个基础练习,它涵盖了整数阶乘计算和累加操作的核心概念,是学习C++或其他类似编程语言时的经典例子。通过此类练习,不仅可以提升编程技巧,还能增强对...

    编程实现计算:1!+2!+3!+……+N!的值,要求定义并调用函数计算N!。

    在编程领域,计算阶乘(Factorial)是一个常见的数学运算,尤其在算法和组合数学中。阶乘表示为一个正整数n与小于等于n的所有正整数的乘积,通常表示为n!。例如,5!(5的阶乘)等于5×4×3×2×1,即120。 本题要求...

    ARM.rar_ARM编程_arm 阶乘_累加和

    对于ARM处理器,我们可以使用C语言或汇编语言来编写代码,利用ARM指令集执行这些计算。理解阶乘的算法对优化计算性能至关重要,尤其是在资源有限的嵌入式系统中。 接着是“累加和”,累加和是指将一系列数值相加...

    关于尾递归的使用详解

    通过查看汇编代码可以发现,编译器会将递归转换为循环,避免栈空间的消耗。 **尾递归的优势** 尾递归的主要优点是减少递归调用栈的开销。在处理大规模数据或深度递归时,能够显著降低内存使用,防止栈溢出。例如,...

    计组实验报告

    学生需要将C代码转换为汇编语言,然后更新program.mif文件。在仿真过程中,可以观察到递归调用的各个阶段,包括主函数压栈、调用子函数、子函数内部递归调用、返回主函数等步骤。每个递归调用都会创建一个新的栈帧,...

Global site tag (gtag.js) - Google Analytics