通过实例学习 HC11 汇编递归应用

原创 2004年04月15日 17:40:00

递归是高级语言里的重要技巧,在 functional language 中更是基本要素,但在汇编语言中却很少直接用到,大多数 compiler 遇到有递归的函数时一般会自动转换成 loop 。不过,理解如何在汇编中使用递归倒是十分重要的。

我在我之前的文章中有谈过如何使用 SBC 里使用递归计算 sigmaRX,有兴趣的朋友可以看看这里。stack 在递归里是一个重要的元素,所有的临时结果都要暂时保存在 stack 里,然后再一步一步推上来。下面就用递归语法实现 sigmaRX 在 HC11 上的运行:

;函数:sigmaRX
;sigmaRX(n) = n + sigmaRX(n-2), sigmaRX(0) = 0, sigmaRX(1) = 1
;n 位于 B;返回值位于 IX

    sigmaRX: cmpb #0   ;1st base case, if n=0
                    bgt cOne  ;if n>0 check 2nd base case
                    ldx #0      ;else retun value is 0
                    rts
    cOne: cmpb #1         ;2nd base case
                    bgt recCall ;if n>1 goto recursive part
                    ldx #1        ;else return value is 1
                    rts
     RecCall: pshb           ;save parameter on the stack
                    decb
                    decb
                    jsr sigmaRX ;recursive call
                    pulb             ;restore the value from the stack 
                    abx              ;abx will do IX = IX + B
                    rts

就这么简单,每次借 stack 保存一下参数,计算结果就一直放在 IX 上。

通过实例学习 tcpdump 命令

通过实例学习 tcpdump 命令 来源:https://linux.cn/article-9210-1.html tcpdump 是一个很常用的网络包分析工具,可以用...
  • jeffreynnn
  • jeffreynnn
  • 2018年01月10日 21:58
  • 97

通过实例学习Java对象的构造过程

本文提供一个项目中的错误实例,提供对其观察和分析,揭示出Java语言实例化一个对象具体过程,最后总结出设计Java类的一个重要规则。通过阅读本文,可以使Java程序员理解Java对象的构造过程,从而设...
  • imnol
  • imnol
  • 2006年08月16日 15:30
  • 611

java学习笔记-------通过实例来学习事件

事件的实例分析; import java.awt.*; import java.awt.event.*; class Exa_8_3 extends Frame { //在构...
  • H002399
  • H002399
  • 2015年07月23日 19:42
  • 138

汇编递归过程

汇编的递归过程习惯写C程序后,一般很少会去敲汇编代码,最近在研究系统学习方面知识,需要用到汇编,考虑到编译器是如何将C程序编译成汇编代码的,这里对于C语言中的语句(赋值,运算,选择,循环)就不着重介绍...
  • u010865478
  • u010865478
  • 2017年03月28日 16:07
  • 1193

汇编语言学习系列 递归实现

假如汇编语言要实现如下C语言的功能,编译环境Ubuntu14.04(32位)。 #include int refact(int n){ if(n == 1) return ...
  • csujiangyu
  • csujiangyu
  • 2015年03月01日 14:04
  • 1598

程序语言的底层描述(4)——递归函数汇编栈帧实现

这一节我们来讨论递归函数栈帧实现、
  • u013471946
  • u013471946
  • 2014年10月13日 13:33
  • 1104

32位汇编语言学习笔记(14)--递归函数的调用

 看一个简单的算阶乘的例子: int rfact(int n) {    int result;    if (n     {        result...
  • swordmanwk
  • swordmanwk
  • 2014年12月01日 20:47
  • 1251

汇编语言的简答入门--斐波那契数列(递归)

TITLE Save an array and dispaly INCLUDE Irvine32.inc .data array DWORD 12 DUP (?) ; define a ar...
  • YtdxYHZ
  • YtdxYHZ
  • 2013年10月08日 05:25
  • 4218

从汇编的角度看递归

我们先来看一个实现阶乘的函数
  • q3733353520
  • q3733353520
  • 2014年07月25日 15:18
  • 523

ARM中汇编程序实例小笔记

ARM 汇编
  • u013800219
  • u013800219
  • 2014年03月21日 12:08
  • 1747
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过实例学习 HC11 汇编递归应用
举报原因:
原因补充:

(最多只允许输入30个字)