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

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVpc2hhbmd3ZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

说明一点:在第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所看到的。

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

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

此时使用载入指令会有例如以下效果:

(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中载入存储类指令说明的更多相关文章

  1. or1200处理器的异常处理类指令介绍

    下面内容摘自<步步惊芯--软核处理器内部设计分析>一书 我们在计算机体系结构的学习中知道:中断实质上包含由外部事件引起的硬中断(又称外中断)和由内部预先安排的特定指令或内部异常引起的软中断 ...

  2. Kubernetes (1.6) 中的存储类及其动态供给

    原文地址:http://blog.fleeto.us/translation/dynamic-provisioning-and-storage-classes-kubernetes-0?utm_sou ...

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

    将陆续上传新书<自己动手写CPU>.今天是第38篇,我尽量每周四篇,可是近期已经非常久没有实现这个目标了.一直都有事,不好意思哈. 开展晒书评送书活动,在q=%E4%BA%9A%E9%A9 ...

  4. C Primer Plus之存储类、链接和内存管理

    存储时期即生存周期——变量在内存中保留的时间 变量的作用域和链接一起表明程序的哪些部分可以通过变量名来使用该变量. 注意:生存期和作用域是两个不同的概念. 作用域    作用域描述了程序中可以访问一个 ...

  5. 新手小白入门C语言第五章:C存储类

    一 .存储类 在理解C的存储类之前,首先要搞懂的概念有:作用域.生存周期.连接属性 C中的存储类说明符实际上是上述属性的不同组合 作用域:一个C变量的作用域可以是 代码块作用域(在函数内部代码块中定义 ...

  6. C中存储类、链接和内存管理

    在C语言中,有5种不同的存储类型,即存储类.在介绍存储类之前,需要首先简单介绍几个术语.如下: 作用域:描述程序中可以访问一个标识符的一个或多个区域.一个C变量的作用域可以是代码块作用域.函数原型作用 ...

  7. union 中可以存储的是不带构造函数的类对象

    union 中可以存储的是不带构造函数的类对象 否则不符合逻辑 为什么不符合逻辑?

  8. OR1200中指令Cache的结构

    下面内容摘自<步步惊芯--软核处理器内部设计分析>一书 12.3 ICache结构 OR1200中实现ICache的文件有or1200_ic_top.v.or1200_ic_fsm.v.o ...

  9. 自己动手写CPU之第九阶段(4)——载入存储指令实现思路

    将陆续上传新书<自己动手写CPU>,今天是第40篇,我尽量每周四篇,可是近期已经非常久没有实现这个目标了,一直都有事,不好意思哈. 开展晒书评送书活动,在q=%E4%BA%9A%E9%A9 ...

随机推荐

  1. Oracle中NVARCHAR2与VARCHAR2的相互转换

    将NVARCHAR2转换为VARCHAR2: declare v_username   varchar2(12)   ; v_nm_login   nvarchar2(12); begin selec ...

  2. IOS学习笔记41--图片的缩放(一)

    图片的缩放 一:Pinch手势对图片进行缩放.即用两根手指往不同方向拖拉照片,照片会被缩小或放大. 我理解的原理:等比缩放 先看如下关键代码: 1.初始化参数 - (void)viewDidLoad ...

  3. 淘宝API得到单个商品的信息,用了淘宝的SDK...

    淘宝api获取到的数据.返回结果可以选择json格式和xml格式的啊.每个api下面都有sdk调用示例哦. 详细:http://wenwen.soso.com/z/q335640192.htm 淘宝开 ...

  4. Android 官方文档:(一)动画和图像 —— 1.5 画布和画图

    The Android framework APIs provides a set 2D drawing APIs that allow you to render your owncustom gr ...

  5. jQuery碎语(3) 动画特效

    5.动画特效 ● 自制折叠内容块 内容块如下 <div class="module"> <div class="caption"> &l ...

  6. XFire Web Service

    Web Service 创建HelloWorldService项目 首先要启动Web Service Project 向导.该向导由三个页面组成,第一页设置Web项目配置的详细信息:第二页设置XFir ...

  7. hadoop安装入门

    1.jdk安装和配置 1.1下载最新jdk文件 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-18802 ...

  8. linux内核编译指定工具连

    make modules CROSS_COMPILE=arm-linux-

  9. 《SEO深度解析——全面挖掘搜索引擎优化的核心秘密》

    <SEO深度解析——全面挖掘搜索引擎优化的核心秘密> 基本信息 作者: 痞子瑞 出版社:电子工业出版社 ISBN:9787121224041 上架时间:2014-2-28 出版日期:201 ...

  10. sql递归查询子级

    WITH T(emp_no, name, dept_no, the_level, path,path1,manager_id) AS( SELECT emp_no, name, dept_no ,1 ...