美文网首页我爱编程
mips寄存器、指令、寄存器和函数调用

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

作者: 413x | 来源:发表于2018-04-16 20:58 被阅读0次

    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 返回到调用者那里。

    相关文章

      网友评论

        本文标题:mips寄存器、指令、寄存器和函数调用

        本文链接:https://www.haomeiwen.com/subject/jxcykftx.html