首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在MIPS中,为什么跳转指令可以将程序计数器设置为28位目标地址

在MIPS中,跳转指令可以将程序计数器设置为28位目标地址的原因是为了支持相对较大的程序空间。MIPS架构中的跳转指令使用相对地址编码,即跳转目标地址相对于当前指令的地址。由于MIPS指令长度固定为32位,其中6位用于操作码,所以剩下的26位用于表示跳转目标地址的偏移量。

由于MIPS指令集架构的设计初衷是为了支持高性能和高效率的计算,相对较大的程序空间可以提供更多的代码和数据存储空间,使得程序员可以编写更复杂的程序。同时,使用相对地址编码的跳转指令可以减少指令的长度,从而提高指令的存储和传输效率。

在MIPS架构中,跳转指令的目标地址是通过将当前指令的地址与跳转指令中的偏移量相加得到的。由于跳转指令的偏移量只有26位,所以跳转指令的目标地址是相对于当前指令地址的一个相对值。在计算目标地址时,MIPS处理器会将跳转指令的地址的高4位与跳转指令的目标地址的高4位进行拼接,得到一个32位的目标地址。

需要注意的是,由于MIPS指令集架构的设计特点,跳转指令只能用于相对较短的跳转,即跳转目标地址必须在当前指令的前后范围内。如果跳转目标地址超出了这个范围,就需要使用分支指令或者其他方式来实现跳转。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云计算服务:https://cloud.tencent.com/product/cvm
  • 腾讯云数据库:https://cloud.tencent.com/product/cdb
  • 腾讯云服务器运维:https://cloud.tencent.com/product/cvm
  • 腾讯云音视频处理:https://cloud.tencent.com/product/mps
  • 腾讯云人工智能服务:https://cloud.tencent.com/product/ai
  • 腾讯云物联网平台:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发:https://cloud.tencent.com/product/mobdev
  • 腾讯云存储服务:https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务:https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙服务:https://cloud.tencent.com/product/3d
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MIPS架构深入理解1-MIPS和RISC架构体系介绍

MIPS架构的设计者两条指令保留了26位,这两条特殊的指令就是跳转jump指令,一个跳转到指定的目标地址,一个跳转到子程序。其它的指令都只有16位留给常数。...MIPS指令中最小的操作码域是6位,跳转的目的地址保留了26位。因为内存指令代码都是4字节对齐的,也就是说,最低2位不需要保存,那么允许访问的程序范围就是2^28,等于256MB。...这个地址不是相对于PC(程序计数器)的,而是被解释256M的代码段中一个绝对地址。这样以来,对于大于256M的单个程序非常不便。...但是这儿的地址可以解释相对PC寄存器的正负范围。所以,编译器只有知道目标地址分支指令前后128KB的范围内才能正确地编码条件分支指令。...但是分支指令的重要性足以给其特殊处理,从上图可以看出,通过特殊的处理,ALU阶段可以半个时钟周期内就使目标地址可用。连同取指令提前的半个周期,刚好在下下个流水线槽得到分支目标地址作为指令开始执行。

7.4K21

『计算机的组成与设计』-指令:计算机的语言

取数指令的格式是操作码之后接着目标寄存器,在后面是用来访问存储器的常数和寄存器。常数和第二个寄存器的值相加即得到存储器地址。取数指令助记符 lw(load word)。...实现方式是: 多个指令序列分支的地址编码一张表,即转移表(jump table) MIPS 提供了寄存器跳转指令 jr 意为 jump register,用来无条件跳转到寄存器的指定的地址。...,MIPS 还包括一条过程调用指令: 跳转到某个地址的同时下一条指令地址保存在 ra ,这条跳转和链接指令(jump and link instruction)格式:jal procedureAddress...存储程序概念,使用一个寄存器保存当前运行的指令地址是决定必要的。...这个寄存器称为程序计数器(program counter), MIPS 简称 PC。jal 指令实际 PC+4 保存在 ra

2.9K20

MIPS架构深入理解6-异常和中断

异常和中断概念在不同架构上的含义区别: MIPS架构所有可以中断程序执行流的事件称为异常; X86架构所有可以中断程序执行流的事件称为中断,我们日常所见的狭义上的中断,也就是外部中断,称之为异步中断...大部分操作系统,中断处理程序共享代码(为了节约寄存器之类的目的),因此,常见的作法就是硬件或者微代码CPU派发到不同的入口点,在这儿,OS再跳转到共同处理程序,根据中断编号进行处理。...但是,MIPS架构可以允许把不同的中断设置不同的入口点。但是,这样软件也就丧失了调整中断优先级的控制,需要软件、硬件开发工程师协商。...但是EPC寄存器的值仍然指向最初造成TLB未命中的指令处。 这样的话,通用异常程序修复kseg2的页表未命中问题(也就是页表的地址合法化),然后,就返回到用户程序。...1的话,就表明这对指令中间的代码是一次性执行完成的,而不是中间受到了某些中断,那么原子操作就成功了;0的话,就表明原子操作没 成功,执行后面beq指令时,就会跳转到ll指令重新执行,直到原子操作成功为止

2.7K20

从IDA动态调试方法到ARM三级流水线的分析到实操

当该位1时,程序运行于THUMB状态,否则运行于ARM状态。该信号反映在外部引脚TBIT上。程序不得修改CPSR的TBIT位,否则处理器工作状态不能确定。...MIPS/MHz表示CPU每MHz的运行速度下可以执行多少个MIPS,如0.9MIPS/MHz则表示如果CPU运行在1MHz的频率下,每秒可执行90万条指令。...因此,尽量地少使用跳转指令可以提高程序指令效率 PC代表程序计数器,流水线使用三个阶段,因此指令分为三个阶段执行: 1、取指(从存储器装载一条指令) 2、译码(识别将要被执行的指令) 3、执行(处理指令并将结果写回寄存器...0000 1010 5)0-23位:偏移地址目标地址与该指令的相对偏移 偏移的计算公式: (目标跳转地址-(当前这条指令地址+8))/4 (1c04-(1bd0+8))/4=1011 1c04:...测试一下 IDAhex随便一个地方改为0B 00 00 0A 我们看到指令变为了BEQ loc_F42AA0D4 我们计算利用偏移公式计算F42AA0D4(目标地址)和F42AA0A0(当前地址

1.7K20

CPU 执行程序的秘密,藏在了这 15 张图里

其中,控制单元负责控制 CPU 工作,逻辑运算单元负责计算,而寄存器可以分为多种类,每种寄存器的功能又不尽相同。 CPU 的寄存器主要作用是存储计算时的数据,你可能好奇为什么有了内存还需要寄存器?...程序计数器,用来存储 CPU 要执行下一条指令「所在的内存地址」,注意不是存储了下一条要执行的指令,此时指令还在内存程序计数器只是存储了下一条指令地址。...而 64 位 CPU 寻址范围则很大,理论最大的寻址空间 2^64。 ---- 程序执行的基本过程 在前面,我们知道了程序图灵机的执行过程,接下来我们来看看程序冯诺依曼模型上是怎么执行的。...R2 的数据存回数据段的 0x108 地址,这个地址也就是变量 a 内存地址; 编译完成后,具体执行程序的时候,程序计数器会被设置 0x200 地址,然后依次执行这 4 条指令。...,比如加减乘除、位运算、比较大小等等,它们最多只能处理两个寄存器的数据; 跳转类型的指令,通过修改程序计数器的值来达到跳转执行指令的过程,比如编程中常见的 if-else、swtich-case、函数调用等

1.6K42

MIPS架构深入理解3-协处理器0

处理异常: 异常入口处,不会保存任何程序计数器,只把返回地址存入EPC寄存器MIPS架构CPU硬件对于堆栈一无所知,所以发生异常时,无法打印堆栈的数据。...对于MIPS架构,程序发生异常时,只能看EPC寄存器的值,然后通过反汇编得到执行代码的地址,从而获取到导致异常的代码大概位置。充分利用异常发生时的信息,是调试程序的一种有效手段。...MIPS架构也异常处理程序保留了2个寄存器v0和v1。我们的程序可以把一些异常需要的重要信息保存在这儿。但是,通用寄存器极易发生变化,大部分时候,这两个寄存器不建议使用。...最后eret指令返回用户程序并复位SR(EXL)寄存器。 中断: 通过SR寄存器的中断控制位,可以设置哪些中断具有更高的优先级。虽然,MIPS架构硬件没有提供中断优先级,但是软件可以任意设置。...jr.hb和jalr.hb指令 跳转寄存器指令,用来消除指令危险。最常见的使用方式就是替换普通的子程序返回和子程序调用指令。 旧架构上,这两个指令还是会被解释成jr和jalr指令

1.1K10

arm和mips架构区别_arm架构详解

8.3、 三级流水线运行情况分析 三级流水线处理简单的寄存器操作指令时,吞吐率平均每个时钟周期一条指令;但是存在存储器访问指令跳转指令的情况下会出现流水线阻断情况,导致流水线的性能下降...因为分支指令执行完毕后,程序应该转到跳转目标地址处执行,因此流水线上需要丢弃这两条指令,同时程序计数器就会转移到新的位置接着进行取指、译码和执行。...此外还有一些特殊的转移指令需要在跳转完成的同时进行写链接寄存器、程序计数寄存器,如BL执行过程包括两个附加操作——写链接寄存器和调整程序指针。...Oxl8处有IRO中断向量(也就是跳向IRQ中断服务的指令),接下来执行跳转指令转向中断服务程序,流水线又被阻断,执行0x18处指令的过程同带有分支指令的流水线。...考虑到通过减少流水线的冲突可以提高流水线的执行效率,而流水线的冲突主要来自寄存器冲突和分支指令,因此对代码作如下两方面调整 两个循环合并成一个循环能够充分减少循环跳转的次数,减少跳转带来的流水线停滞;

2.9K10

【计算机本科补全计划】指令:计算机的语言(MIPS) --计算机组成原理 Part2

把控制转交给过程,跳转程序段·并且开始执行;此过程一般是中断 获得过程所需要的资源,比如内存,处理器等; 执行需要的任务; 结果的值放到调用程序可以访问的位置;返回值咯 控制返回初始点,因为一个过程可能由一个程序的多个点调用...---- 3、除了寄存器外,MIPS 还包括一条过程调用指令【 jalIndex】:跳转到子程序地址并且把当前位置所在的下一条指令位置存入 ra寄存器,以用于子程序执行完后的返回 ....为了支持这种情况,MIPS还使用了寄存器跳转指令 jr 用于case语句,表示无条件跳转到寄存器所指定的地址: jr $ra 。...jr实际上就是PC+4这个位置保存到了 ra寄存器。(PC是程序计数器的意思。不管是哪儿我感觉都是简写PC,就是说,这个东西指在当前程序执行的指令的位置。)...; jr $ra; ---- 7、MIPS汇编语言的寄存器约定,加速大概率事件的思想重要体现 ---- 8、J型跳转指令,因为MIPS每一个操作指令的长度都是4字节,所以其实可以用字来表示单位,也就是说

1K40

MIPS架构深入理解2-MIPS架构体系

当需要使用更多的寄存器时,就需要堆栈了,MIPS编译器总是参数堆栈留有空间以防有参数需要存储。 8..15:(t0-t7)临时寄存器,子程序可以使用它们而不用保留。...MIPS有个叫异常程序计数器(exception program counter,EPC)的寄存器,属于CP0寄存器,用于保存造成异常的那条指令地址。...查看控制寄存器的唯一方法是把它复制到通用寄存器里,指令mfc0 (move from system control)可以EPC地址复制到某个通用寄存器,通过跳转语句(jr),程序可以返 回到造成异常的那条指令处继续执行...发生异常时,这两个寄存器的值不会被恢复,编译器也不使用k0和k1,异常处理函数可以返回地址放到这两个中的任何一个,然后使用jr跳转到造成异常的指令处继续执行。...MIPS有个jal(jump-and-link,跳转并链接)指令跳转到某个地址时,把下一条指令地址放到ra,用于支持子程序调用。

5.5K20

WinMIPS64汇编指令详解

操作数指令自身的常数立即数 addi r2,r1,1 r2=r1+1  寄存器寻址 操作数寄存器的值 add r2,r1,r0 r2=r1+r0  基址寻址 以基址寄存器的值和立即数常数之和作为地址...,该地址指向的内存的值作为操作数  lw r2,8(r1) r2=M[r1+8]  PC相对寻址 以PC程序计数器指令中常数之和作为地址,即16位地址左移2位(即乘以4)与PC计数器相加 beq r2...,r1,label 如果r2==r1则程序跳到label处  伪直接寻址 跳转地址指令26位地址左移两位(即乘以4)与PC计数器的高4位相连所组成 j label WinMIPS64汇编指令 助记 ...,程序直接跳转到label并保存程序当前下一条指令地址到r31 jalr jalr rs 伪直接寻址,程序直接跳转到rs地址并保存程序当前下一条指令地址到r31 移位 为什么没有算术左移,因为算术左移和逻辑左移效果一样...要写入终端: 内存地址设置要写入的值DATA 适当的值写入内存地址CONTROL 要从终端读取: 适当的值写入内存地址CONTROL 从内存地址读取输入DATA CONTROL

49740

【自己动手画CPU】控制器设计(二)

计数器模块的使能端受命中信号驱动,缺失时使能端无效,计数器不计数,等待系统待请求数据所在块从二级存储器调度到 cache 后才能继续计数。...自动测试电路会逐一取出 trace 存储器的主存地址去访问存储系统,并逐一数据从 cache 模块取出送校验和计算电路计算校验和,计数器256时会停止电路运行,此时所有存储访问的 cache 命中率将会在右上角...的标准库,其中运算器既可以使用运算器实验自行设计的运算器,也可以使用标准库的 ALU 模块,构建多周期 MIPS 处理器数据通路,最终将各功能部件连接形成数据通路。 ​...位移次数控制:采用计数器+比较器的硬件实现,控制右移9次即可(题目中有提示),LOAD=0时,给到1信号;b送入右侧寄存器,其他时候都=0就按照位移情况对右侧寄存器开展更新 2....2. 4K×32位ROM地址线是12位,16K×32位ROM地址线的位数是14位,4片小容量ROM的地址端并联,并联后的地址分线器的0-11端,然后通过分线器14位地址线的高两位(12-13

74810

MIPS架构深入理解7-汇编语言理解

指定使用的指令集。 标签1: 同其它汇编语言一样,就是一个程序调转的地址别名。 1f:后面的f表示forward,代表向前跳转; 1b:后面的b表示back,代表向后跳转指令: 真正的可执行指令。...但是复杂指令集的风格一般是2个操作数。为此,汇编器目标寄存器d作为源寄存器s使用。如果编写代码时,省略s,写成addu d,t,汇编器生成最终的机器码时,会将其展开addu d,d,t。...汇编器这种最常见的操作转换为or d,zero,s。 9.3.2 立即数运算 汇编或者机器指令,编入指令的常数称为立即数。许多算术和逻辑运算使用16位立即数替换t。...9.3.3 64/32位指令 我们在前面看到,MIPS体系结构扩展到64位(第2.7.3节)时非常注意确保MIPS32程序的行为保持不变,即使它们MIPS64机器上运行;MIPS64机器MIPS32...指令的执行总是任何GP寄存器的32位上半部分设置所有1或所有0(反映第31位的值)。

3.2K20

嵌入式:ARM转移指令(分支指令

转移和转移链接指令(B,BL) 转移指令B程序完成简单的跳转指令可以跳转指令中指定的目的地址。...二进制编码 跳转目标地址的计算方法:先对指令定义的有符号的24位转移量用符号扩展32位,并将该32位左移2位形成字的偏移,然后将它加到程序计数器PC(相加前程序计数器的内容转移指令地址加8字节...是条件执行的助记符扩展,缺省AL,即无条件转移。一般是汇编代码的标号,是转移到的目标地址。...BL指令完成两个操作:程序的返回地址放在LR寄存器(r14),同时PC寄存器值设置目标程序的第一条指令地址。...类似的Thumb指令可以使处理器切换回32位ARM指令第一种格式,寄存器Rm的值是转移目标,Rm的第0位拷贝到CPSR的T位,进而决定是切换到Thumb状态还是ARM状态。

98520

重学计算机组成原理(4)-还记得纸带编程吗?

那高级语言的程序,最终是怎么变成一串串“0”和“1”的? 这一串串“0”和“1”又是怎么CPU处理的? 1 软硬件接口中,CPU做了啥?...逻辑类指令 逻辑上的与或非 条件分支类指令 日常的“if/else” 无条件跳转指令 写一些大一点的程序,我们常常需要写一些函数或者方法 调用函数的时候,其实就是发起了一个无条件跳转指令。...不同CPU有不同指令集,对应不同的汇编语言和不同的机器码。 方便快速理解机器码的计算方式,选用最简单的MIPS指令集,看机器码是如何生成的。...J指令 一个跳转指令,高6位之外的26位都是一个跳转后的地址 add $t0,$s2,$s1 下面都用十进制来表示对应的代码,对应的MIPS指令的: opcode是0 rs代表第一个寄存器s1的地址是...17 rt代表第二个寄存器s2的地址是18 rd代表目标的临时寄存器t0的地址是8 因为不是位移操作,所以位移量是0 把这些数字拼在一起,就变成了一个MIPS的加法指令

59720

重学计算机组成原理(四)- 玩玩纸带编程

我们每天用高级语言的程序,最终是怎么变成一串串“0”和“1”的?这一串串“0”和“1”又是怎么CPU处理的?...逻辑类指令 逻辑上的与或非 条件分支类指令 日常的“if/else” 无条件跳转指令 写一些大一点的程序,我们常常需要写一些函数或者方法 调用函数的时候,其实就是发起了一个无条件跳转指令。...MIPS是一组由MIPS技术公司80年代中期设计出来的CPU指令集。就在最近,MIPS公司把整个指令集和芯片架构都完全开源了。想要深入研究CPU和指令集的同学,推荐一些资料,可以自己了解下。...J指令 一个跳转指令,高6位之外的26位都是一个跳转后的地址 add $t0,$s2,$s1 下面都用十进制来表示对应的代码。...对应的MIPS指令里 opcode是0 rs代表第一个寄存器s1的地址是17 rt代表第二个寄存器s2的地址是18 rd代表目标的临时寄存器t0的地址是8 因为不是位移操作,所以位移量是0 把这些数字拼在一起

1.2K50

『计算机的组成与设计』-处理器

编译器和指令集决定了一个程序所需的指令数目,而处理器则决定了时钟周期长度和 CPI。 本篇通过一个基本 MIPS 实现,来了解实现一个处理器所需要的原理和技术。...实现每条指令的前两步是一样的: 程序计数器(PC)指向指令所在的储存单元,从中取出指令。 通过指令,读取一个或两个寄存器。对于取字指令,只需读取一个寄存器,其他大多数指令需要读取两个寄存器。...指令系统的需求 算术逻辑单元(ALU) 算术类型: 加,减,或,比较等 操作数: 2 个 32 位的数,来自寄存器或扩展后的立即数 立即数扩展部件 一个 16 位的立即数扩展 32 位 扩展方式:...0 扩展,符号扩展 程序计数器(PC) 1 个 32 位寄存器 支持两种加法: 加 4 或加一个立即数 寄存器堆(两读一写寄存器堆,register file) 每个寄存器 32 位宽,共 32 个...用 PC 的内容作为地址,访问指令存储器获取指令编码 更新 PC 顺序执行: PC = PC + 4 发生分支: PC = 分支目标地址 不同指令的不同需求 流水线(pipelining) 流水线是一种实现多条指令重叠执行的技术

44220

NES基本原理(二)CPU

寄存器 Program Counter 16 bit,程序计数器 PC,存放下一条指令地址,一条指令执行时就会更新这个寄存器的值,使它指向下一条指令地址,与我们熟悉的 PC 一样,可以被分支指令修改等等...,而是操作数本身,这就是立即数寻址,也就是说这条指令需要的操作数没有在内存或者寄存器,而是指令本身里面,使用汇编指令时,立即数的前面加上 # 表示“这是个立即数”,举个例子: LDA #$01...;A = 0x01 Absolute 绝对寻址,指令操作数部分为 操作数的绝对地址,举个例子: AND $1234 ;地址1234的数据取出来与A相与 ;A = A...,不会一检测到中断就立马停下手头事务取处理中断 程序计数器,状态寄存器 压栈 设置状态寄存器的 I 位关中断 PC 设置中断处理程序地址 执行中断处理程序 执行 RTI(Return From Interrupt...) 指令从中断返回,程序计数器,状态寄存器出栈 回到原任务继续执行 这就是 6502 的中断处理过程,比较简单,过程和了解的 x86,MIPS 等等都差不多,中断处理需要花费 CPU 7 个 clock

36610

MIPS架构深入理解5-内存管理

产生伪随机数(实际上是一个自由运行的计数器)。表示tlbwr指令写新TLB项时随机指定的位置。当在异常处理,重新填充TLB时,随机替换TLB表项使用。可以节省时间。...每一页映射大小4K的页,位13自动两个可能的输出值之间进行选择。 refill异常发生后,将自动设置此域,以匹配无法转译的程序地址或虚拟地址。...4 TLB编程 TLB表的设置过程是:想要的值写入到EntryHi和EntryLo寄存器,然后使用tlbwr或tlbwi指令拷贝到相应的TLB表。...使用方法就是设置TLB项的ASID域对应的值,并且EntryLo0-1(G)标志位0,就可以只访问EntryHi(ASID)匹配的项了。...通过这种方式TLB索引0到wired-1的项永久保留在TLB表。 5 对硬件友好的页表和重填机制 类Unix的OSMIPS架构提供了一种特殊的地址转换机制。

1.7K20

【计算机本科补全计划】指令:计算机的语言(MIPS) --计算机组成原理

MIPS讲述) ---- 2、MIPS体系结构,对寄存器和存储器的操作如下: 寄存器的大小32位,由于32位一组的情况很常见,所以称之为 “字(word)”,另外由于MIPS使用字节编址,所以连续的地址字的地址也就相差...所以MIPS体系要对存储器和寄存器之间的数据进行传输,就有了 数据传送指令 。...另外注意,由于“0”这个数用处远比别的常数大,所以专门寄存器zero存放了0,且恒0;至于为什么大?...汇编语言到机器语言的翻译,操作志林分为R I(J)两(3)种型号,前者对寄存器进行操作,后者对因为对存储器进行取址等操作,所以32位的操作指令后16全部划归地址表示。...好处就是程序可以被当成二进制数的文件发行) 指令用数的形式表示 和数据一样,程序存储存储器,并且可以读写。

2K70

探索CPU的黑盒子:解密指令执行的秘密

程序执行时,PC的初始值被设置程序第一条指令地址。当顺序执行程序时,控制器首先从内存取出一条指令,该指令地址由PC指示。...操作系统会将程序计数器设置0100作为起始位置,并开始执行程序。每执行一条指令后,程序计数器的值会增加1,或者直接指向下一条指令地址。CPU根据程序计数器的值,从内存读取指令并执行。...即使是使用高级语言编写的程序,函数调用的处理也是通过程序计数器的值设置函数的存储地址来实现的。函数执行跳转指令之后,必须进行返回处理,否则仅仅进行指令跳转是没有意义的。...函数的入口地址设置程序计数器之前,call指令会将调用函数后要执行的指令地址存储名为栈的主存。函数处理完毕后,通过函数的出口执行return指令。...return指令的功能是保存在栈地址设置程序计数器。例如,当调用MyFun函数之前,地址0154被保存在栈MyFun函数处理完成后,将会将0154的地址保存在程序计数器

24120
领券