拉到最下面,可以看到$fp和$ra寄存器都变成了垃圾字符 这里最重要的是$ra寄存器,作用和ret指令差不多,控制了这个寄存器,就相当于控制了程序的执行流,他的值是61616171转换成ascii码是aaaq,这里有一个知识点,这个MISP是一个小端序,字符串是由低到高存储的,所以这里应该是qaaa,回到gdb,搜索qaaa 覆盖到$ra寄存器...
重要的寄存器在MIPS架构中扮演着至关重要的角色。其中,a0-a3被用作传参寄存器,负责传递函数参数。s8/fp寄存器的用途则与编译器行为紧密相关,在我们的示例中,s8被用作普通寄存器。而sp,即堆栈指针,则用于管理栈内存。ra寄存器,即程序返回地址,在函数调用后会自动更新为调用者的下一条指令地址,确保程序能够正...
move $fp, $sp:将当前栈指针的值赋给帧指针$fp,这样$fp可以作为当前栈帧的基准。 4.参数传递 在MIPS 架构中,函数参数通常通过寄存器$a0到$a3传递。这些寄存器可以存储最多 4 个参数,如果参数超过 4 个,则剩余的参数会通过栈进行传递。 在截图中可以看到: $a0和$a1等寄存器在函数调用过程中会被用来存储传递...
$29 $sp stack pointer $30 $fp frame pointer $31 $ra return address 寄存器号 符号名 用途 0 始终为0 看起来象浪费,其实很有用 1 at 保留给汇编器使用 2-3 v0,v1 函数返回值 4-7 a0-a3 前头几个函数参数 8-15 t0-t7 临时寄存器,子过程可以不保存就使用 24-25 t8,t9 同上 16-23 s0-s7...
留(被调用者保存和恢复,还包括 $fp和$ra ),MIPS 提供了临时寄存器和保存寄存器,这样就减少了寄存器溢出(spilling,即将不常用的变量放到存储器的过程), 编译器在编译一个叶(leaf)过程(不调用其它过程的过程)的时候,总是在临时寄存器分配完了才使用需要
fp/s9 30 (frame pointer)第九个寄存器变量;需要的子程序可以用来做帧指针 ra 31 (return address)子程序的返回值 MIPS的指令 R型 I型 J型 基本指令格式 两点注意: 1、移位指令是R型指令,但没有使用rs寄存器 例如,sll t2,t2,s0,4 #reg t2=regt2=regs0 << 4 bits,其对应的机器语言是 指令sll的opcod...
$30:($fp)GNU MIPS C编译器应用了侦指针(frame pointer),而SGI的C编译器没有应用,而把这个寄存器当作保存寄存器应用($s8),这节省了调用和返回开销,但增加了代码生成的复杂性。 $31: ($ra)存放返回地址,MIPS有个jal(jump-and-link,跳转并链接)指令,在跳转到某个地址时,把下一条指令的地址放到$ra中。用...
30:(fp)存放栈帧指针寄存器。为支持MIPS架构的GNU C编译器保留的,MIPS公司自己的C编译器没有使用,而把这个寄存器当作保存寄存器使用( 31:(ra)存放返回地址。MIPS有个jal(jump-and-link,跳转并链接)指令,在跳转到某个地址时,把下一条指令的 地址放到ra中,用于支持子程序调用。例如,调用程序把参数放到a0~a3,然...
MIPS IV的设计旨在显著提升浮点(FP)性能。为了优化操作数的访问,该版本引入了新的索引寻址模式,包括用于FP加载和存储的base+index寻址,以及用于内存预取和指定缓存提示的预取指令。此外,还增加了几项功能以增强指令级并行性,例如将浮点控制和状态寄存器的条件码位从一位扩展至七位,并重新定义了FP比较和分支指令...
与sp指针配合,构成栈帧,调试回溯时需要。类似于x86中的bp.可参考 http://lambda.uta.edu/cse5317/notes/node34.html