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

or1200中加载存储类指令说明

时间:2014-05-07 15:13:28      阅读:421      评论:0      收藏:0      [点我收藏+]

标签:or1200 openrisc 软核处理   or1200 软核处理器   软核   处理器   开源   

以下内容摘自《步步惊芯——软核处理器内部设计分析》一书


      OR1200中实现的加载存储类指令有8条,每条指令的作用与说明如表9.1所示。


bubuko.com,布布扣

      说明一点:在第2章建立的最小系统没有配置使用MMU,所以有效地址等于物理地址。

      加载存储类指令的助记符也很好理解记忆,第一位是’s’表示存储指令,’l’表示加载指令;第二位是’b’表示对字节操作,’h’表示对半字操作,’w’表示对字操作;第三位是’z’表示零扩展,’s’表示符号扩展。据此可以对指令进行简称,如:l.sb指令可以简称为存储字节指令、l.lwz指令可以简称为加载字指令、l.lbs与l.lbz可以简称为加载字节指令。

      OR1200处理器中存储器是按照字节寻址的,并且默认是大端模式,在这种模式下,数据的高位保存在存储器的低地址中,而数据的低位保存在存储器的高地址中。读者可以回忆本书在1.3.2节中对大端模式的介绍。比如:使用指令l.sb在0x50处存储0x81,存储器中实际存储效果如图9.1所示。

bubuko.com,布布扣

      使用指令l.sh在0x54处存储0x8281,存储器中实际存储效果如图9.2所示。


bubuko.com,布布扣

      使用指令l.sw在0x58处存储0x84838281,存储器中实际存储效果如图9.3所示。


bubuko.com,布布扣

      此时使用加载指令会有如下效果:

      (1)使用指令l.lbz从0x58处加载一个字节,读出的字节就是0x84,经零扩展至32位还是0x84

      (2)使用指令l.lbs从0x58处加载一个字节,经符号扩展至32位就是0xffffff84

      (3)使用指令l.lhz从0x58处加载一个半字,读出的半字就是0x8483,经零扩展至32位还是0x8483

      (4)使用指令l.lhs从0x58处加载一个半字,经符号扩展至32位就是0xffff8483

      (5)使用指令l.lwz从0x58处加载一个字,读出的字就是0x84838281

      加载存储类指令执行过程中可能会发生DTLB失靶异常、数据页失效异常、总线(数据)异常、对齐异常,前三种异常与MMU模块关系比较紧密,在分析MMU的时候会有所涉及,本章将只对对齐异常进行介绍。产生对齐异常的情况有如下四种:

  •   使用存储半字指令l.sh,但提供的地址不是2字节对齐
  •   使用加载半字指令l.lhz、l.lhs,但提供的地址不是2字节对齐
  •   使用存储字指令l.sw,但提供的地址不是4字节对齐
  •   使用加载字指令l.lw,但提供的地址不是4字节对齐

      实际上就是要求:加载存储半字的时候,地址要2字节对齐,即地址最低位等于0;加载存储字的时候,地址要4字节对齐,即地址最低两位等于00。如果不满足上述条件,就会引发对齐异常,处理器将转移到对齐异常的处理例程。比如:当使用指令l.lhz从地址0x59处加载半字的时候就会引发对齐异常。在下一节的示例程序中就会有对齐异常的情况发生。



or1200中加载存储类指令说明,布布扣,bubuko.com

or1200中加载存储类指令说明

标签:or1200 openrisc 软核处理   or1200 软核处理器   软核   处理器   开源   

原文地址:http://blog.csdn.net/leishangwen/article/details/25206167

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