MIPS中j,jr,jal这三个跳转指令有啥区别,最好能举下例子说明下,谢谢了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MIPS中j,jr,jal这三个跳转指令有啥区别,最好能举下例子说明下,谢谢了相关的知识,希望对你有一定的参考价值。

j是最简单的跳转
j 1111 意思就是跳转到地址1111
jr和jal与程序调用函数有关。程序调用函数,当函数调用结束后需要重新继续执行原来的程序,所以在调用函数之前,必须先存储函数返回起始点地址,用于存储这一地址的寄存器在MIPS中是$ra。
jal的意思就是跳转到某个地址同时把返回调用点的地址存储在$ra中。而jr用法一般是“jr $ra”,一般是函数调用结束后,用于跳转到返回地址。
更详细的信息可以参考《计算机组成与设计 硬件/软件接口》,David A. Patterson, John L. Hennessy
参考技术A

1、j是最简单的跳转。

2、jr和jal与程序调用函数有关。程序调用函数,当函数调用结束后需要重新继续执行原来的程序,所以在调用函数之前,必须先存储函数返回起始点地址。

3、jal是跳转到某个地址同时把返回调用点的地址存储在$ra中。

j1111 意思就是跳转到地址1111,而jr用法一般是“jr $ra”,一般是函数调用结束后,用于跳转到返回地址。

MIPS(Million Instructions Per Second):单字长定点指令平均执行速度 Million Instructions Per Second的缩写,每秒处理的百万级的机器语言指令数。这是衡量CPU速度的一个指标。像是一个Intel80386 电脑可以每秒处理3百万到5百万机器语言指令,即我们可以说80386是3到5MIPS的CPU。MIPS只是衡量CPU性能的指标。

跳转指令的基本格式

<opcode><cond>S <Rd>,<Rn>,<opcode2>

其中,<>内的项是必须的,内的项是可选的,如<opcode>是指令助记符,是必须的,而<cond>为指令执行条件,是可选的,如果不写则使用默认条件AL(无条件执行)。

参考技术B j 跳转
eg:j 2500 //跳转到目标地址10000,指令中的地址是字地址,所以需要乘以4,转换成字节地址。
jal 跳转并链接
eg:jal 2500 //$ra=PC+4, PC=10000,指令中的地址也是字地址,乘以4转换成字节地址。一般用于主程序调用函数时候的跳转,设置函数的返回地址为主程序中跳转指令的下一个指令,意思就是执行完函数就得回到主程序继续执行。寄存器$ra专门用来保存函数的返回地址。
jr 跳转到寄存器所指的位置
eg:jr $ra //跳转到寄存器中的地址。一般用于函数执行完返回主函数时候的跳转。

MIPS有哪几种指令格式

MIPS指令格式(32位):MIPS共32条指令,有三种类型格式:R型指令、I型指令、J型指令.详情见下图及文字说明:
R型指令:op(6bits) Rs(5bits) Rt(5bits) Rd(5bits) shamt(5bits) funct(6bits)
I型指令: op(6bits) Rs(5bits) 立即数(16bits)
J型指令: op(6bits) 立即数(26bits)

R格式指令(算数类、逻辑类、位移类、跳转类指令):纯寄存器指令,所有的操作数(除移位外)均保存在寄存器中。Op字段均为0,使用funct字段区分指令
R型指令组成:
OP:指令的基本操作---操作码
Rs:第一个源操作数寄存器
Rt:第二个源操作寄存器
Rd:存放结果的目的操作寄存器
Shamt:偏移量,用于移位指令
Funct:函数,对操作码进行补充
I格式指令(算数类、逻辑类指令):带立即数的指令,最多使用两个寄存器,同时包括了load/store指令。使用Op字段区分指令
I型指令组成:
OP:指令的基本操作---操作码
Rs:第一个源操作数寄存器
Rt:第二个源操作寄存器
立即数:参与运算的数据,16位
J格式指令(跳转指令,跳转并链接指令,自陷指令,异常返回指令):
长跳转指令,仅有一个立即数操作数。使用Op字段区分指令
J型指令组成:
OP:指令的基本操作---操作码
立即数:参与跳转地址运算,26位
参考技术A 有I型指令,R型指令和J型指令本回答被提问者采纳

以上是关于MIPS中j,jr,jal这三个跳转指令有啥区别,最好能举下例子说明下,谢谢了的主要内容,如果未能解决你的问题,请参考以下文章

如何在 IDE 之外使用 python 代码

MIPS汇编指令集

MIPS有哪几种指令格式

3.6 MIPS指令简介

ARM指令和THUMB指令有啥区别

MIPS中有关于分支指令及跳转寻址