`
nannan408
  • 浏览: 1783708 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

汇编递归中的ret跳到了哪?

 
阅读更多
   汇编递归调用的时候,call的每一句,实际上都将其下一句压栈,而其中的ret,是直接返回最后一次的call的下一句,而不是第一次call调用的下一句。所以,在程序结束之前,调用了几次call,将执行多少次return,才能最终将程序结束。并非java中的 一句 return,所有返回。

     如:递归求n的阶乘,例子如下:
FACT PROC
   PUSH DX
   MOV DX,AX
   CMP AX,0
   JZ DONE ;若零的阶乘或者已经把n-1的阶乘压栈完毕后跳出最后一层call调用,到mov
   DEC AX
CALL FACT
   MUL DX
   POP DX
RET
   DONE:MOV AX,1;0!=1
   POP DX
RET
FACT ENDP

请注意(1)倒数第二行的RET,将跳到MUL,DX,也就是Call fact的下一句。
      (2)倒数第五行的RET,将跳到的是本次调用的Call fact的下一句,即还是MUL DX
     (3)当倒数第五行的RET已经执行n-1次返回后,将返回到第一次的call调用的下一句mul dx,此时是最后一次执行POP DX,执行完后整个FACT程序全部结束。

0
0
分享到:
评论

相关推荐

    汇编语言的递归程序

    《汇编语言中的递归程序实现》 在计算机科学领域,递归是一种强大的编程技术,它通过函数或过程自我调用来解决复杂问题。在高级语言中,递归的使用广泛且直观,但在低级语言如汇编语言中,递归的实现则需要更深入的...

    Q1069907.zip 汇编递归求斐波那契数列前N项 以及 TASM TurboC等工具

    在汇编语言中编写斐波那契数列的递归算法,需要对汇编指令有深入的理解,包括数据处理、流程控制和函数调用。以下是一个简单的汇编语言递归斐波那契数列的框架: ```assembly section .data n db 10 ; 计算...

    插入排序递归非递归汇编写法

    在本实验报告中,我们将使用MIPS汇编语言来实现插入排序,包括递归和非递归版本。 递归版本 在递归版本中,我们使用了递归函数sort来实现插入排序。sort函数将数组的首地址和要排序的数据个数作为参数。函数首先...

    汇编语言,计算斐波那契数列的前22项,斐波那契数列,分别用两种方法:递归调用,普通循环加法

    在本文中,我们将深入探讨如何使用汇编语言来计算斐波那契数列的前22项,并且对比两种不同的实现方法:递归调用和普通循环加法。首先,让我们了解一下斐波那契数列的基本概念。 斐波那契数列是一个数学上的序列,...

    11 递归:如何利用递归求解汉诺塔问题?.mp4

    11 递归:如何利用递归求解汉诺塔问题?.mp4

    C#递归 C#递归 C#递归

    #### 什么是递归? 递归是一种编程技术,它允许一个方法或函数直接或间接地调用自身。递归通常用于解决可以通过重复相同过程分解成更小问题的问题。递归方法包含两个主要部分: 1. **基本情况**(Base Case):这是...

    汇编程序 递归子程序

    本程序用汇编语言编写,在MasmEditor 下运行成功 拷贝之后便可以运行。 本程序是本人在学习汇编程序设计课程时所编写的,现在不用了,发出来供大家一起参考讨论之用。 由于只是为了实验课的需要而编,所以程序的功能...

    汇编语言 递归调用计算最大兄弟的年龄 自己编的

    自己编的,真的费了很大的劲儿~~很有有用的,计算机的朋友看看 吧

    汇编课程设计.doc

    在汇编语言中,程序员需要了解和掌握不同处理器架构(如Intel x86)的指令集。 【润年判断算法】 在编程中,润年的判断是一个常见的任务。一个年份是润年当且仅当以下条件之一成立: 1. 能被4整除但不能被100整除。...

    消除左递归汇编.pdf

    《消除左递归汇编》是一份关于编译原理的实验报告,主要探讨了如何消除文法中的左递归现象,这对于理解编译器构造和解析器设计至关重要。文法的左递归分为直接左递归和间接左递归,这两种递归在文法处理中可能导致...

    用递归调的方法计算年龄 汇编

    递归调用算年龄 汇编 成绩为优 课设参考的而好东西

    27丨递归树:如何借助树来求解递归算法的时间复杂度?1

    在递归树中,节点代表了递归调用的实例,而边则表示了递归之间的相互关系。 归并排序的递归树是一个典型的满二叉树结构,其中每个非叶子节点都有两个子节点。由于归并排序每次都将数组均等地分成两部分,因此递归树...

    abap简单递归算法

    2. **主程序**:主程序部分首先调用了递归函数`jiecheng`,传入数字10,并将结果存储到`sum_num`中。最后打印出`sum_num`的值。 3. **递归函数`jiecheng`**: - 参数:接受一个输入参数`dt_num`,并返回一个输出...

    .net 递归算法 .net 递归算法.net 递归算法

    在.NET编程环境中,递归算法是一种强大的工具,它允许函数或方法调用自身来解决复杂问题。递归的核心思想是将大问题分解为相同或相似的小问题,直到问题变得足够简单,可以直接得出答案。这种解决问题的方式在数据...

    递归算法到非递归算法的转换.ppt

    递归算法是编程中一种强大的工具,它通过调用自身来解决问题或简化复杂的问题。然而,在某些场景下,非递归算法可能更有利于性能优化或理解。本章将探讨如何将递归算法转换为非递归算法。 首先,我们要了解递归的...

    用汇编语言,并且递归求菲波那契函数FIB(N).zip

    标题中的“用汇编语言,并且递归求菲波那契函数FIB(N)”表明了这个压缩包包含的内容是关于使用汇编语言实现递归计算菲波那契数列的程序。菲波那契数列是一个数学上的序列,定义为:F(0) = 0, F(1) = 1, 且对于 n > 1...

    可并行递归算法的递归多线程实现

    本文旨在探讨如何在递归算法中运用多线程技术,以实现高效的并行计算。 #### Java多线程框架与递归算法结合 Java作为一门广泛使用的高级编程语言,其内置的多线程机制为开发者提供了丰富的工具,以便在多核架构上...

    递归算法与非递归转化

    当递归调用返回时,是返回到上一层的调用点,而不是返回到初始调用点。 间接转换法使用栈保存中间结果,将递归调用转换为循环结构。这种方法可以应用于所有类型的递归算法,但是需要仔细地设计栈的数据结构和访问...

    程序设计中递归算法

    ### 递归算法在程序设计中的应用 #### 一、递归的概念与本质 递归是一种重要的编程思想,在计算机科学和数学领域都有...然而,在实际应用中也需要考虑到递归可能带来的性能问题,并根据具体情况选择适当的优化方法。

Global site tag (gtag.js) - Google Analytics