将陆续上传新书《自己动手写CPU》。今天是第38篇,我尽量每周四篇,可是近期已经非常久没有实现这个目标了。一直都有事,不好意思哈。

开展晒书评送书活动,在亚马逊、京东、当当三大图书站点上,发表《自己动手写CPU》书评的前十名读者。均可获赠《步步惊芯——软核处理器内部设计分析》一书。大家踊跃參与吧。活动时间:2014-9-11至2014-10-20

今天继续对MIPS32中载入存储指令进行说明(主要是lwl、lwr),上次已经介绍一些其它的载入存储指令,大家能够回想。

9.1.4 载入指令lwl、lwr说明

载入指令lwl、lwr的格式如图9-6所看到的。

  • 当指令中的指令码为6'b100010时,是lwl指令。非对齐载入指令,向左载入

指令使用方法为:lwl rt, offset(base)

指令作用为:从内存中指定的载入地址处,载入一个字的最高有效部分。lwl指令对载入地址没有要求。从而同意地址非对齐载入,这是与前面介绍的lh、lhu、lw指令的不同之处。在大端模式、小端模式下,lwl指令的效果不同,由于OpenMIPS是大端模式,所以此处仅仅介绍在大端模式下lwl指令的效果。如果计算出来的载入地址是loadaddr,loadaddr的最低两位的值为n。将loadaddr最低两位设为0后的值称为loadaddr_align,例如以下。

载入地址loadaddr = signed_extended(offset) + GPR[base]

n = loadaddr[1:0]

loadaddr_align = loadaddr – n

比如:如果计算出来的载入地址是5。lwl指令要从地址5载入数据。那么loadaddr就等于5,n等于1。loadaddr_align等于4。

lwl指令的作用是从地址为loadaddr_align处载入一个字,也就是4个字节,然后将这个字的最低4-n个字节保存到地址为rt的通用寄存器的高位。而且保持低位不变。

继续上例,此时loadaddr_align为4,所以从地址4处载入一个字,相应的是地址为4、5、6、7的字节,由于n等于1,所以将载入到的字的最低3个字节保存到地址rt的通用寄存器的高3个字节。如图9-7所看到的。

一个更加通用的描写叙述如图9-8所看到的。

  • 当指令中的指令码为6'b100110时,是lwr指令。非对齐载入指令,向右载入

指令使用方法为:lwr rt, offset(base)

指令作用为:从内存中指定的载入地址处,载入一个字的最低有效部分。还是如果计算出来的载入地址是loadaddr,loadaddr的最低两位的值为n。将loadaddr最低两位设为0后的值称为loadaddr_align,例如以下。

载入地址loadaddr = signed_extended(offset) + GPR[base]

n = loadaddr[1:0]

loadaddr_align = loadaddr – n

比如:如果计算出来的载入地址是9,lwr指令要从地址9载入数据。那么loadaddr就等于9,n等于1。loadaddr_align等于8。

lwr指令的作用是从地址为loadaddr_align处载入一个字。也就是4个字节。然后将这个字的最高n+1个字节保存到地址为rt的通用寄存器的低位,而且保持高位不变。

继续上例,此时loadaddr_align为8。所以从地址8处载入一个字,相应的是地址为8、9、10、11的字节,由于n等于1。所以将载入到的字的最高2个字节保存到地址rt的通用寄存器的低2个字节。如图9-9所看到的。一个更加通用的描写叙述如图9-10所看到的。

lwl与lwr指令配合能够实现从一个非对齐地址载入一个字,并且仅仅须要使用2条指令。提高了效率。比如:使用一般指令从地址7处载入一个字,那么能够使用下面代码实现。共5条指令。

lw  $1, 4($0)          # 取得地址0x4处的字,保存在$1中
lw  $2, 8($0)          # 取得地址0x8处的字,保存在$2中
sll $1, $1, 24         # $1左移24位
slr $2, $2, 8          # $2右移8位
or  $1, $1, $2         # $1与$2进行逻辑“或”运算,得到终于结果

而有了lwl、lwr指令后。仅仅须要2条指令就可以。

例如以下。图9-11是对这个过程的描写叙述。

lwl $1, 7($0)
lwr $1,10($0)

转载于:https://www.cnblogs.com/lxjshuju/p/7291357.html

自己动手写CPU之第九阶段(2)——载入存储指令说明2(lwl、lwr)相关推荐

  1. 自己动手写CPU之第九阶段(2)——加载存储指令说明2(lwl、lwr)

    将陆续上传新书<自己动手写CPU>,今天是第38篇,我尽量每周四篇,但是最近已经很久没有实现这个目标了,一直都有事,不好意思哈. 开展晒书评送书活动,在亚马逊.京东.当当三大图书网站上,发 ...

  2. 自己动手写CPU(11)——加载存储指令说明

    加载存储指令说明 加载指令(7) lb.lbu.lh.lhu.lw.lwl.lwr 存储指令(5) sb.sh.sw.swl.swr 补充 加载指令(7) lb.lbu.lh.lhu.lw.lwl.l ...

  3. 自己动手写CPU(3)逻辑、移位操作与空指令

    自己动手写CPU(3)逻辑.移位操作与空指令 指令说明 MIPS32指令集架构中定义的逻辑操作指令有8条: and.andi.or.ori.xor.xori.nor.lui,其中 ori指令已经实现. ...

  4. 自己动手写CPU(2)第一条ori指令

    本博客内容基于<自己动手写CPU>这本书 上一篇文章介绍了一下流水线思想.设计流程等,下面我们可以实操一下实现第一条ori指令. 其实实现一条ori指令不难,我目前对这一条指令的理解简单来 ...

  5. 《自己动手写CPU》--第九章--学习笔记

    章将实现MIPS32指令集架构中定义的加载存储指令,分两步:首先实现除ll.sc指令外的一般加载存储指令,其次实现比较特殊的加载存储指令ll.sc. 9.1加载存储指令说明 MIPS32指令集架构中定 ...

  6. 自己动手写CPU之第七阶段(5)——流水线暂停机制的设计与实现

    将陆续上传本人写的新书<自己动手写CPU>,今天是第28篇.我尽量每周四篇 China-pub的预售地址例如以下(有文件夹.内容简单介绍.前言): http://product.china ...

  7. 自己动手写CPU之第五阶段(1)——流水线数据相关问题

    将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第15篇,我尽量每周四篇 上一章建立了原始的OpenMIPS五级流水线结构,可是仅仅实现了一条ori指令,从本章開始,将逐步完 ...

  8. 自己动手写CPU之第七阶段(10)——除法指令实现过程1

    将陆续上传本人写的新书<自己动手写CPU>,今天是第33篇,我尽量每周四篇 亚马逊的销售地址如下,欢迎大家围观呵! http://www.amazon.cn/dp/b00mqkrlg8/r ...

  9. 【自己动手写CPU】异常相关指令的实现

    MIPS架构中定义的异常类型 MIPS32架构中,有些事情打断程序的正常的执行流程,这些事情称为中断.陷阱.系统调用以及其他打断程序执行流程的情况,统称为异常. 此处的OpenMIPS处理器只实现了其 ...

最新文章

  1. OpenCV人脸检测与三角剖分绘制
  2. EntityFramework用法探索(一)DatabaseFirst
  3. SpringBoot启动流程是怎样的
  4. lynda ux_UX编排原理
  5. 解决方案/DIV+CSS 在 IE7/IE6/Firefox间的兼容性问题
  6. http报文和协议首部
  7. MTK DRM常见问题介绍
  8. windbg调试句柄泄露
  9. 虚拟化qemu-img的简单用法。
  10. python快速写入hbase_Python 读写 hbase 数据的正确姿势(一)
  11. android 字体像素转换工具类_Android点9图机制及在聊天气泡中的应用
  12. 树莓派3通过网线连接电脑
  13. 【程序源代码】微信小程序商城管理系统(Java后台+微信小程序)最新版
  14. 物理内存是什么是计算机的显卡内存吗,物理内存使用率过高_任务管理器里的物理内存是什么,CPU使用率很低,但......
  15. 配置Hibernate环境
  16. 快速理解Linux系统中用户和组的概念及如何查看存储用户与组信息的文件/etc/passwd,/etc/shadow,/etc/group及其子段意思
  17. JMP的脚本JSL基础操作
  18. 虚幻4渲染编程(图元汇编篇)【第五卷:游戏中的动力学模拟】
  19. mysql5.5 mysql5.6 mysql5.7官方手册
  20. 正则表达式构造器(java-verbal-expressions)

热门文章

  1. 视频和视频帧:图像,从自然光到01串
  2. 电站计算机培训计划,电站年度培训的工作总结范文
  3. 2019暑期建模培训简单总结
  4. touchID 和 FaceID~1
  5. 编程题--疯狂序列----京东大数据笔试
  6. php实现手机投屏到电视机,手机画面投屏到电视机/投影仪,最常用最简单的3种方法!...
  7. 风变编程学python靠谱吗_风变编程学习Python的感受
  8. Linux下Bluetooth编程
  9. 如何自定义文档工程师绩效考核标准? | 职场杂谈
  10. flink 简单上手