此博客为个人博客,不涉及商业用途,仅提供学习参考,内容均来自个人原创以及互联网转载和摘录。
此博客上带有原创标识的文章、图片、文件等,未经本人允许,不得用于商业用途以及传统媒体。
本文首发于CSDN,其他网站均为转载。网络媒体或个人转载请注明出处和链接,否则属于侵权行为。

原博客链接:https://blog.csdn.net/qq_38305370
原博主昵称:城外南风起
————————————————

为什么MIPS处理器的数据通路中需要符号扩展单元和左移两位?

符号扩展单元

考虑MIPS的存取指令,其一般形式为:

lw   $tl,offset_value ($t2)  #取字指令

sw   $tl,offset_value ($t2)  #存储指令

在这类指令中,通过将基址寄存器$t2 的内容与指令中的带符号偏移量offset_value相加,得到存储器地址。如果是取数指令,则要将从存储器中读出的数据存入指定的寄存器$t1中;如果是存储指令,要从寄存器$t1中读出要存储的数据,存入存储器地址。

我们知道,这两种指令均为I型指令(立即数)。其字段构成为:

所以,offset_value为16位字段。而MIPS寄存器为32位,则基址寄存器$t2 的内容也为32位,要将两者相加,就需要先将offset_value扩展为32位。

符号扩展的具体操作为:将原数据项的最高位复制到新数据项多出来的高位。(为增加数据项的长度,将原数据项的最高位复制到新数据项多出来的高位。)

例如,-1存储为8位:11111111(补码!),现需要将其扩展为16位,显然是:1111111111111111。而正数只需要在多出来的高位补0即可。

左移两位

如图为MIPS处理器分支指令的数据通路:


考虑MIPS的分支指令:

beq  $t1, $t2, offset_value

该指令表示:如果 t 1 和 t1和 t1和t2中的数值相等, 则转到执行地址为offset_value与紧随分支指令的地址两者之和的语句。紧随分支指令的地址即为当前的PC+4。

即:新的PC = offset_value+ PC+4。PC存储在程序计数器(保存程序正在执行的指令地址的寄存器)中。所以,该指令同样会用到符号扩展单元。

但是,MIPS中连续字的地址相差4,且字的起始地址为4的倍数(一个地址为8位,即一个字节,一个字有4个字节)。所以,需要将offset_value左移2位,使其表示为字的地址(这也是为什么是PC+4而不是PC+1)。为什么要保证其为字的地址呢?因为该指令将要跳转到下一条待执行的指令地址,而MIPS指令长度为32位(一个字),所以指令地址一定为字的地址。

左移2位以后,offset_value最低两位为00,而最高的两位符号位则被舍去。

例如,offset_value原来为0011,表示偏移三个字,但是,地址是按字节编码的,如果不执行左移,就会变成偏移三个字节。正确的应该是左移两位得到:1100,即偏移12个字节(3个字)。

————————————————

感谢阅读,欢迎 点赞 / 评论 / 收藏 / 打赏 ~

我是城外南风起,欢迎关注我的公众号【木叶芯】。


以下链接可以快速搜索公众号内的文章:号内搜

木叶飞舞之处,火亦生生不息。

为什么MIPS处理器的数据通路中需要符号扩展单元和左移2位?相关推荐

  1. 汇编语言符号扩展指令及应用示例

    1. 什么是符号扩展?为什么要用符号扩展? 所谓符号扩展,就是将数据的表示大小加倍,数值仍保持不变,即将符号位扩展到同样大小的寄存器空间中去,由两部分构成一个比原值表示大一倍的数.正数必须要0扩展,负 ...

  2. MIPS指令以及数据通路

    MIPS指令以及数据通路 MIPS 1字=4字节 1字节=8位 即:1字=32位 每一个时钟周期:IM取指令->译码->ALU执行->DM访存->回写Reg ADDI addi ...

  3. 【Computer Organization笔记10】单周期CPU设计:基于7条MIPS指令的数据通路

    本次笔记内容: P19 计算机组成原理(19) P20 计算机组成原理(20) 本节课对应幻灯片: 组成原理24 singlecycle.pptx 基于上节课的7条MIPS指令的数据通路,分别针对7条 ...

  4. 详解qtopia4.4.3移植到mips处理器以及相关问题总结

    最近公司做一个linux手机项目,需要做一个图形界面程序,移植qtopia,其中遇到一些难题也折腾了1个多星期,总算是弄好了,这里总结一下.分为以下几部分: 1 编译运行x86版本的qtopia 2 ...

  5. ARM、Intel、MIPS处理器的区别

    安卓支持三类处理器(CPU):ARM.Intel和MIPS.ARM无疑被使用得最为广泛.Intel因为普及于台式机和服务器而被人们所熟知,然而对移动行业影响力相对较小.MIPS在32位和64位嵌入式领 ...

  6. Linux的nm查看动态和静态库中的符号

    功能 列出.o .a .so中的符号信息,包括诸如符号的值,符号类型及符号名称等.所谓符号,通常指定义出的函数,全局变量等等. 使用 nm [option(s)] [file(s)] 有用的optio ...

  7. 【Linux命令】nm 查看动态库和静态库中的符号

    功能 列出.o .a .so中的符号信息,包括诸如符号的值,符号类型及符号名称等.所谓符号,通常指定义出的函数,全局变量等等. 使用 nm [option(s)] [file(s)] 有用的optio ...

  8. 从流水线角度看MIPS处理器ISA的实现逻辑以及RTOS操作系统仿真

    MIPS最终还是失败了,最可惜的是, 它既不是败给了对手,也不是败给了技术,而是败给了自己,败给了市场.MIPS的失败充分说明了,人美活儿好不一定能混好,MIPS作为一项处理器的设计技术是顶级的,但是 ...

  9. 【汇编优化系列】关于符号扩展和无符号扩展(包括mips msa实现)

    DATE: 2021.11.26 文章目录 前言 1.参考 2.符号扩展和无符号扩展 含义 3.举例说明 4.mips msa相关指令 前言 在mips msa intrinsic工程优化过程中,遇到 ...

最新文章

  1. 【PAT (Basic Level) 】1028 人口普查 (20 分)
  2. 【号外号外:微软收购 .NET 的开源实现 Xamarin 项目的公司】
  3. javaweb连接不上mysql怎么办_java web应用连接mysql会突然connection连接失败
  4. php访问服务器文件路径,PHP与服务器文件系统的简单交互
  5. 如何区分iptables的PREROUTING和POSTROUTING链
  6. 支付页面设计灵感|最美剁手的正确姿势!
  7. Project Euler 97 :Large non-Mersenne prime 非梅森大素数
  8. matlab约束转非约束,请问:fmincon非等和等于的约束条件
  9. 数值分析(第五版) 第九章知识点总结
  10. java连接查询where_SQL中join连接查询时条件放在on后与where后的区别
  11. 关于JSF Converter转换器的知识点
  12. FineUIMvc随笔(5)UIHelper是个什么梗?
  13. Ego的JavaWeb笔记
  14. c语言魂斗罗小游戏代码,(搬运)魂斗罗系列游戏秘籍(包含一些解锁要数)
  15. TLS SNI(TLS Server Name Indication)配置:F5、Nginx和IIS
  16. hadoop清理回收站
  17. 破解苹果电脑开机密码
  18. 01.精益敏捷项目管理——敏捷开发者指南笔记
  19. 【C++】计算一个正整数的阶乘
  20. JAVA小实例(十五)

热门文章

  1. 软件开发模型 - 瀑布模型 快速原型模型 增量模型 螺旋模型 及优缺点详解
  2. 2.4G 天线设计完整指南
  3. python pillow库画图_python几种柱状图画法以及简单图片处理pillow库的学习
  4. 国防科技大学计算机学院刘洋,记国防科技大学计算机学院计算机研究所所长肖_全封闭式学校...
  5. 使用CSS3完成阴阳师宣传页
  6. 下载搜狐小说-软件介绍
  7. 第五章 创建和编辑AutoCAD对象
  8. 动态规划01背包问题之跳跃点解法
  9. 在Vue中使用HappyPack
  10. 西部数据----移动硬盘---参数查询手册