`
nannan408
  • 浏览: 1770863 次
  • 性别: 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#递归 C#递归 C#递归

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

    汇编程序 递归子程序

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

    c++递归c++递归c++递归

    c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘...

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

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

    汇编课程设计.doc

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

    消除左递归汇编.pdf

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

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

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

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

    在递归算法中,我们通常将大问题分解为小问题来解决,这个过程可以抽象成一棵树的结构,即递归树。 递归树的节点代表递归调用,而边则表示这些调用之间的关系。在斐波那契数列的例子中,每个节点表示一个待解决的...

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

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

    c语言,二叉树,前中后,递归,非递归

    根据给定的信息,本文将详细解释二叉树的遍历方法,包括递归与非递归方式下的前序、中序、后序遍历,并简要介绍层次遍历的概念。 ### 二叉树简介 二叉树是一种常用的数据结构,其中每个节点最多有两个子节点,通常...

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

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

    abap简单递归算法

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

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

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

Global site tag (gtag.js) - Google Analytics