$ra寄存器中存入的是pc的值(程序运行处的地址),调用函数时,在跳转前,必须保存当前地址(pc的值),以便后来返回。jal $ra 保存后跳转,jr $ra,返回到跳转前,通过$ra保存进入上层栈地址。

jal
    直接跳转指令,并带有链接功能,指令的跳转地址在指令中,跳转发生时要把返回地址存放到R31寄存器(ra)中。
jr
    使用寄存器的跳转指令,跳转地址在寄存器中。

所以根据ra定位core位置时,可以直接在ra位置前找jal便可以找到当前正在执行的函数。

转自http://user.it.uu.se/~justin/Teaching/NewDarkSlides/lecture5.pdf

•  As in high level languages , when programming in assembly language you should split up your program into smaller functions, that you can reuse.

•  One of the key ideas with functions is that you can call them
from any where and return back to where you called the function from.

•  The MIPS processor has two instructions that enable you to call functions, jr and jal.
•  Jump and link.
                    jal  label
   Copies the address of the next instruction into the register $ra
(register 31) and then jumps to the address label.

•  jr  $register jumps to the address in $register most common use
                    jr  $ra

            .data
str:        .asciiz  "Hello  mum!.\n".text.globl  main  #necessary  for  the  assembler
main:        jal  messagejal  messageli  $v0,10syscall    #exit  the  program  gracefully
message:    la  $a0,strli  $v0,4syscall    #Magic  to  printhings  on  the  screen. jr  $ra

•  There are many way of passing values to functions, but there is a convention that most programs on the MIPS follow.
•  $a0-$a3 (registers 4 to 7) arguments 1-4 of a function.

•  $v0-$v1 (registers 2 and 3) results of a function.

        li  $a0,10li  $a1,21li  $a3,31jal  silly  #Now  the  result  of  the  function  is  is  $v0. li  $v0,10syscall
silly:  add  $t0,$a0,$a1 sub  $v0,$a3,$t0 jr  $ra

ra寄存器定位core相关推荐

  1. log夹逼法定位core, 可能存在问题

    以前经常用log夹逼法定位问题, 比如core dump,  但是, 最近在某情况下发现, 如果出现core, 那么core前的log不一定会打印, 这可能是log的缓存问题(没有core的话, lo ...

  2. 如何快速定位程序Core?

    导读:程序core是指应用程序无法保持正常running状态而发生的崩溃行为.程序core时会生成相关的core-dump文件,是程序崩溃时程序状态的数据备份.core-dump文件中包含内存.处理器 ...

  3. 学会用core dump调试程序错误(转)

    前言 最近在项目中遇到大型程序出现SIGSEGV ,一直不知道用core dump工具来调试程序,花了近一周的时间,才定位问题,老大很生气,后果很严重,呵呵,事后仔细学习了这块的知识,了解一点core ...

  4. 学会用core dump调试程序错误

    最来在项目中遇到大型程序出现SIGSEGV ,一直不知道用core dump工具来调试程序,花了近一周的时间,才定位问题,老大很生气,后果很严重,呵呵,事后仔细学习了这块的知识,了解一点core du ...

  5. gdb core调试

    原文链接 http://blog.163.com/lanka83/blog/static/32637615200801793020182/ http://blog.csdn.net/taina2008 ...

  6. gdb core 调试(ZZ)

    gdb core 调试(ZZ) http://blog.163.com/lanka83/blog/static/32637615200801793020182/ http://blog.csdn.ne ...

  7. Linux Kernel 6.0 CXL Core Regs.c 详解

    前言 CXL 是一个比较新的技术,所以我研究的内核源码是选了当前比较新的内核版本 linux 6.0.打算将内核关于 CXL 的驱动进行解析一遍,一步一步慢慢来. 在阅读之前,希望读者能有一定的 PC ...

  8. mips指令与寄存器详解

    MIPS通用寄存器 MIPS有32个通用寄存器($0-$31),各寄存器的功能及汇编程序中使用约定如下: 下表描述32个通用寄存器的别名和用途 REGISTER NAME USAGE $0 $zero ...

  9. Core文件作用、设置及用法

    原文:https://www.cnblogs.com/xiaodoujiaohome/p/6222895.html 1.Core文件简介 Core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信 ...

最新文章

  1. 重大要素改变中的机会选择包括_财务人员专业胜任能力要素及框架
  2. 3的三个整数立方和有多少个解?全球40万台计算机助力,MIT研究登上PNAS
  3. 欧洲估值最高的5家人工智能创业公司
  4. XP,2003下使用route命令增加永久路由(静态路由)
  5. 第三篇 SpringBoot 2 x中使用JPA
  6. Linux下显示ip所属位置
  7. jzoj3854-分组【树状数组,线段树】
  8. debian命令乱码_Debian 9.5 解决中文显示乱码
  9. Interview Common Sample Codes
  10. php.exe占用资源过大,记录一次php占用系统资源过高的问题
  11. 从 JMM 透析 volatile 与 synchronized 原理
  12. 蓝牙通信-打开和关闭蓝牙设备
  13. Django项目实践3 - Django模型(view-数据库)
  14. CentOS 7服务
  15. BZOJ4152 AMPPZ2014 The Captain 【最短路】【贪心】*
  16. 数字电路与模拟电路区别
  17. 下载hibernate4的jar包
  18. 关于中英文等宽字体的设置
  19. uniapp canvas生成海报不显示问题
  20. Diligent宣布2021年现代治理100强公司名单

热门文章

  1. 各代iphone尺寸_历代16款iPhone厚度对比:最薄的竟是iPhone 6!
  2. 基于指数平滑模型与ARIMA模型在苹果股价的预测应用
  3. 使用云效构建部署项目
  4. DNS配置异常无法上网(明明有网,但是网页打不开了?)
  5. Android 10.0相关权限的变更(使用WiFi Direct必须打开定位)
  6. 四、字符编码:ascii、gbk、Unicode、utf-8
  7. PTA 6-10 二分查找
  8. uni微信小程序引入商圈快速积分插件
  9. 机器翻译 MXNet(使用含注意力机制的编码器—解码器,即 Encoder编码器-Decoder解码器框架 + Attention注意力机制)
  10. 【乐逍遥网站设计】网站建设如何让网站设计更加合理化?