码迷,mamicode.com
首页 > 其他好文 > 详细

自己写CPU第九阶段(3)——加载存储指令说明2(swl、swr)

时间:2015-07-09 21:14:23      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

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

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

活动时间:2014-9-11至2014-10-30


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


9.1.5 存储指令swlswr说明

      存储指令swlswr的格式如图9-12所看到的。

技术分享

  •  当指令中的指令码为6‘b101010时。是swl指令。非对齐存储指令。向左存储

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

      指令作用为:将地址为rt的通用寄存器的高位部分存储到内存中指定的地址处,存储地址的最后两位确定了要存储rt通用寄存器的哪几个字节。swl指令对存储地址没有对齐要求,这是与前面介绍的shsw指令的不同之处。在大端模式、小端模式下,swl指令的效果不同,由于OpenMIPS是大端模式。所以此处仅仅介绍在大端模式下swl指令的效果。如果计算出来的存储地址是storeaddrstoreaddr最低两位的值为nstoreaddr最低两位设为0后的值称为storeaddr_align,例如以下。

存储地址storeaddr = signed_extended(offset) + GPR[base]

n = storeaddr[1:0]

storeaddr_align = storeaddr – n

      比如:如果计算出来的存储地址是5swl指令要向地址5存储数据,那么storeaddr就等于5n等于1storeaddr_align等于4

      swl指令的作用是将地址为rt的通用寄存器的最高4-n个字节存储到地址storeaddr处。

      继续上例。此时storeaddr_align4n1,所以将地址rt的通用寄存器的最高3个字节存储到从地址5開始处。相应的是地址为567的三个字节,如图9-13所看到的。

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

技术分享


技术分享

  •  当指令中的指令码为6‘b101110时。是swr指令,非对齐存储指令,向右存储

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

      指令作用为:将地址为rt的通用寄存器的低位部分存储到内存中指定的地址处,存储地址的最后两位确定了要存储rt通用寄存器的哪几个字节。

还是如果计算出来的存储地址是storeaddrstoreaddr的最低两位的值为nstoreaddr最低两位设为0后的值称为storeaddr_align。例如以下。

存储地址storeaddr = signed_extended(offset) + GPR[base]

n = storeaddr[1:0]

storeaddr_align = storeaddr – n

      比如:如果计算出来的存储地址是9swr指令要向地址9存储数据,那么storeaddr就等于9n等于1storeaddr_align等于8

      swr指令的作用是将地址为rt的通用寄存器的最低n+1个字节存储到地址storeaddr_align处。

      继续上例。此时storeaddr_align8n1,所以将地址rt的通用寄存器的最低2个字节存储到从地址8開始处,相应的是地址为89的两个位置,如图9-15所看到的。一个更加通用的描写叙述如图9-16所看到的。

技术分享


技术分享

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

sll $2, $1, 24       # 要存储的数据在$1中。将$1的最高字节存储到$2
sb  $2, 7($0)        # 存储最高字节到地址为7的内存处
sll $2, $1, 8        # 将$1的第2、1字节保存到$2中
sh  $2, 8($0)        # 存储第2、1字节到地址为8、9的内存处
sb  $1, 10($0)       # 存储第0字节到地址为10的内存处

      而有了swlswr指令后,仅仅须要2条指令就可以。例如以下。图9-17是对这个过程的描写叙述。

swl $1, 7($0)
swr $1, 10($0)
技术分享


版权声明:本文博客原创文章,博客,未经同意,不得转载。

自己写CPU第九阶段(3)——加载存储指令说明2(swl、swr)

标签:

原文地址:http://www.cnblogs.com/bhlsheji/p/4634108.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!