zoukankan      html  css  js  c++  java
  • ra寄存器定位core

    $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!.
    "
                .text
                .globl  main  #necessary  for  the  assembler 
    main:        jal  message
                jal  message
                li  $v0,10
                syscall    #exit  the  program  gracefully 
    message:    la  $a0,str
                li  $v0,4
                syscall    #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,10
            li  $a1,21
            li  $a3,31
            jal  silly  #Now  the  result  of  the  function  is  is  $v0. 
            li  $v0,10
            syscall
    silly:  add  $t0,$a0,$a1 
            sub  $v0,$a3,$t0 
            jr  $ra
  • 相关阅读:
    ffmpeg影片转码+m3u8-segmenter影片切片
    Linux ffmpeg安装步骤详解
    linux系统部署ffmpeg视频转码环境及使用方法
    SSH反向连接使用Autossh自动ssh
    WordPress整合Google自定义搜索
    优化Wordpress的方法总结
    WordPress 数据库操作WPDB对象($wpdb)用法详解
    WordPress插件WP-PostViews的调用方法
    国内大互联网公司如何做测试
    一分钟了解ruby中的单测
  • 原文地址:https://www.cnblogs.com/dongzhiquan/p/3176791.html
Copyright © 2011-2022 走看看