mips寄存器、指令、寄存器和函数调用

mips寄存器、指令、寄存器和函数调用

本文是为分析0ctf2016 trace所写,下文相关知识点如果有遗漏请见凉

寄存器

https://blog.csdn.net/gujing001/article/details/8476685

REGISTER NAME USAGE
$0 $zero 常量0(constant value 0)
$1 $at 保留给汇编器(Reserved for assembler)
$2-$3 $v0-$v1 函数调用返回值(values for results and expression evaluation)
$4-$7 $a0-$a3 函数调用参数(arguments)
$8-$15 $t0-$t7 暂时的(或随便用的)
$16-$23 $s0-$s7 保存的(或如果用,需要SAVE/RESTORE的)(saved)
$24-$25 $t8-$t9 暂时的(或随便用的)
$28 $gp 全局指针(Global Pointer)
$29 $sp 堆栈指针(Stack Pointer)
$30 $fp 帧指针(Frame Pointer)
$31 $ra 返回地址(return address)

指令

指令 用法 功能
addiu addiu $1,$2,n $1=$2+n
sw sw $1,n($2) memory[n+$2]=$1
addiu addiu $1,$2,n $1=$2+n
lui lui $1,n $1=65536*$1
lw lw $1,n($2) $1=memory[n+$2]
bnez bnez R1,addr 不等于0则跳转到addr
jal jal addr 类似与call
j j addr 直接跳转指令,跳转的地址在指令中

函数调用

http://vcamx.me/2013/05/15/subroutines-functions-in-MIPS/

  • 调用者将参数保存在寄存器 $a0 - $a3 中。其总共能保存4个参数。如果有更多的参数,或者有传值的结构,其将被保存在栈中。
  • 调用者使用 jal 加上子程序的标记。返回地址保存在 $ra 中。
  • 返回地址是 PC + 4,PC 是 jal 指令的地址。
  • 如果被调用者使用框架指针,它通常将其设置为栈指针。旧的栈指针必须在之前被保存到栈中。
  • 被调用者通常在开头将其需要使用的寄存器保存到栈中。如果被调用者调用了辅助子程序,必须将 $ra入栈,同时也必须将临时寄存器或被保留的寄存器入栈。
  • 当子程序结束,返回值要保存在 $v0 - $v1 中。
  • 被调用者使用 jr $ra 返回到调用者那里。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文地址:C语言函数调用栈(一)C语言函数调用栈(二) 0 引言 程序的执行过程可看作连续的函数调用。当一个函数执...
    小猪啊呜阅读 10,256评论 1 19
  • 计算机系统漫游 代码从文本到可执行文件的过程(c语言示例):预处理阶段,处理 #inlcude , #defin...
    willdimagine阅读 9,063评论 0 5
  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 37,743评论 8 114
  • 今天不更小说了,可能是最近太幸福了,小说有点卡,先停一下,缓缓神。 文|云云先生 今天参加了宝宝的中考誓师大会,会...
    燕小白阅读 2,586评论 7 11
  • 影子裹进了黑暗,仰起脸,咸涩的海风,呼啸着从眼角划过,撕裂的泪水,该咽进苍白的心田,还是滴落寂寞的空港?或者也像影...
    宿时阅读 2,990评论 0 0

友情链接更多精彩内容