毕业设计,毕业论文代写。专业水平。钻石水准,黄金品质。

计算机专业毕业设计,论文,设计代写。电邮:elevenor@gmail.com。专业水平,质优价廉。

原创 从MIPS指令角度看计算机对子程序的支持 收藏

新一篇: 由MIPS指令想到数组与指针  | 旧一篇: 关于Open Source Project的Eclipse

程序是程序员实现程序结构化的一条有效途径。

     首先让我们来看看支持子程序过程调用的最基本的操作:MIPS提供了一条指令jal(jump and link),它的功能是把紧位于jal下的指令地址保存到寄存器$31中,然后跳转到子程序,即跳转和链接。这时$31=PC+4, PC是指令jal的地址。

    比如:  jal             Procedure Address

我们已经有一条指令jr(jump register)用于链接的.可以用它来执行跳回操作。

    比如:  jr              $31           

这也正是寄存器$31的通常用途所在。对于参数的保存,有两种方法:调用者保存和被调用者保存。现在约定:通常采用被调用者保存,并且$4,$5,$6,$7是专门用以保存参数的。

下面我们举例来说明:

假设程序A调用B,B又调用C,C不调用任何其他程序。在调用C之前,程序B必须将它自己的返回地址存储在寄存器$31中,并且把堆栈指针指向堆栈的新顶端。因此,C被调用,并且指令

jal 将寄存器$31改变为存储C的返回地址。在程序C返回到程序B之后,这个旧的返回值从寄存器$31中被重新存储,并且堆栈指针

还原。

根据上面的分析,我们可以写出该程序的主体代码:

(我们假定寄存器$29保有堆栈指针,并且$24指向当前堆栈的顶端)

        A:  ...

            ...

            jal  B                                  # call B and save return address in $31

        B:  ...

            ...                                     # now ready to call C        

            add   $29,$29,$24                        # adjust stack to make room for next item

            sw    $31,0($29)                         # save the return address

            jal  C                                  # call C and save return address in $31

                                                   # return from C to next instruction

            lw    $31,0($29)                         # restore B's return address...

            sub   $29,$29,$24                        # adjust stack to pop B's return address

            ...

            ...

            jr     $31                               # return to routine that called B

        C:  ...

            ...

            jr     $31                               # return to routine that called C   
 
更多内容:

浙江大学ACM试题解答(四月)
http://blog.csdn.net/ctu_85/archive/2007/04/24/1576831.aspx
浙江大学ACM试题解答(三月)
http://blog.csdn.net/ctu_85/archive/2007/03/20/1535556.aspx
麻省理工算法导论翻译
http://blog.csdn.net/ctu_85/archive/2007/06/08/1643179.aspx
华容道游戏与算法
http://blog.csdn.net/ctu_85/archive/2007/05/15/1610722.aspx
中国象棋对战程序C语言源代码
http://blog.csdn.net/ctu_85/archive/2007/05/04/1596351.aspx

发表于 @ 2006年11月02日 17:12:00|评论(loading...)|编辑

新一篇: 由MIPS指令想到数组与指针  | 旧一篇: 关于Open Source Project的Eclipse

评论:没有评论。

发表评论  


登录
Csdn Blog version 3.1a
Copyright © ctu_85