or1200中载入存储类指令说明
下面内容摘自《步步惊芯——软核处理器内部设计分析》一书
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中载入存储类指令说明的更多相关文章
- or1200处理器的异常处理类指令介绍
		
下面内容摘自<步步惊芯--软核处理器内部设计分析>一书 我们在计算机体系结构的学习中知道:中断实质上包含由外部事件引起的硬中断(又称外中断)和由内部预先安排的特定指令或内部异常引起的软中断 ...
 - Kubernetes (1.6) 中的存储类及其动态供给
		
原文地址:http://blog.fleeto.us/translation/dynamic-provisioning-and-storage-classes-kubernetes-0?utm_sou ...
 - 自己动手写CPU之第九阶段(2)——载入存储指令说明2(lwl、lwr)
		
将陆续上传新书<自己动手写CPU>.今天是第38篇,我尽量每周四篇,可是近期已经非常久没有实现这个目标了.一直都有事,不好意思哈. 开展晒书评送书活动,在q=%E4%BA%9A%E9%A9 ...
 - C Primer Plus之存储类、链接和内存管理
		
存储时期即生存周期——变量在内存中保留的时间 变量的作用域和链接一起表明程序的哪些部分可以通过变量名来使用该变量. 注意:生存期和作用域是两个不同的概念. 作用域 作用域描述了程序中可以访问一个 ...
 - 新手小白入门C语言第五章:C存储类
		
一 .存储类 在理解C的存储类之前,首先要搞懂的概念有:作用域.生存周期.连接属性 C中的存储类说明符实际上是上述属性的不同组合 作用域:一个C变量的作用域可以是 代码块作用域(在函数内部代码块中定义 ...
 - C中存储类、链接和内存管理
		
在C语言中,有5种不同的存储类型,即存储类.在介绍存储类之前,需要首先简单介绍几个术语.如下: 作用域:描述程序中可以访问一个标识符的一个或多个区域.一个C变量的作用域可以是代码块作用域.函数原型作用 ...
 - union 中可以存储的是不带构造函数的类对象
		
union 中可以存储的是不带构造函数的类对象 否则不符合逻辑 为什么不符合逻辑?
 - OR1200中指令Cache的结构
		
下面内容摘自<步步惊芯--软核处理器内部设计分析>一书 12.3 ICache结构 OR1200中实现ICache的文件有or1200_ic_top.v.or1200_ic_fsm.v.o ...
 - 自己动手写CPU之第九阶段(4)——载入存储指令实现思路
		
将陆续上传新书<自己动手写CPU>,今天是第40篇,我尽量每周四篇,可是近期已经非常久没有实现这个目标了,一直都有事,不好意思哈. 开展晒书评送书活动,在q=%E4%BA%9A%E9%A9 ...
 
随机推荐
- VPP电源控制(VPP Power)-- 由DC-DC变换集成电路MC34063组成
			
http://www.willar.com/article/article_view.asp?id=463 由DC-DC变换集成电路MC34063组成,34063 广泛应用于于DC-DC的电源转换电路 ...
 - Linux与Windows比较出的20个优势
			
Linux相信大家并不会陌生,Android(安卓或安致)就是基于Linux平台的开源手机操作系统,在电脑方面有ubuntu(中文名:乌班图)等等也是基于linux. Windows与Linux Li ...
 - hdu 1847 博弈基础题 SG函数 或者规律2种方法
			
Good Luck in CET-4 Everybody! Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
 - 解析本内置Linux目录结构
			
使用声明:1.此版本采用官方原版ISO+俄罗斯HunterTik 的Debian包制作而成2.此IMG包未进行Crack,资源来源于网络,如果你下载的是Crack版,与原作者无关,请自行分辨.“就看人 ...
 - C#编程(九)----------控制台I/O
			
原文链接:http://blog.csdn.net/shanyongxu/article/details/46454985 控制台I/O 可以使用Console.ReadLine()方法从控制台中读取 ...
 - 利用localStorage实现对ueditor编辑内容定时保存为草稿
			
直接看代码吧 1.引入ueditor和ueditor的使用我就不细说了 详情请戳http://blog.csdn.net/wangdianyong/article/details/39780709 2 ...
 - VC6 下 libpng 库的编译与初步使用
			
VC6 下 libpng 库的编译与初步使用 目录 libong 库的介绍 VC6 下 libpng 的编译 下载 libpng 与 zlib 进行编译 得到 .lib 文件 初步使用 对 VC6 ...
 - Selenium2+python自动化33-文件上传(send_keys)
			
前言 文件上传是web页面上很常见的一个功能,自动化成功中操作起来却不是那么简单. 一般分两个场景:一种是input标签,这种可以用selenium提供的send_keys()方法轻松解决: 另外一种 ...
 - eclipse在Windows7 64 位下出现Unhandled event loop exception No more handles
			
1..如果不影响工程正常发布运行,就不要管他了2.工作空间有毛病.把workspace的.metadata删了3.把eclipse重装下.一般第二步能解决大多数问题.
 - Arduino + SmartAirFilter 制作智能感应的 PM 空气净化器
			
先说 SmartAirFilters 知道 SmartAirFilters 源自微博上转发的非常火的那个帖子,和动辄七八千元的商用产品比,几百元的 SmartAirFilters(下面简称电扇) 确实 ...