5233杨光--第六周实验报告

第四章 处理器体系结构

指令体系结构:一个处理器支持的指令和指令的字节级编码

4.1Y86指令集体系结构

Y86:包括定义各种状态元素、指令集和它们的编码、一组编程规范和异常事件处理。

4.1.1 程序员可见状态

Y86程序中的每条指令都会读取或修改处理器状态的某些部分。
Y86具体包括:8个程序寄存器、3个条件码ZF\SF\OF、程序计数器(PC) 
Y86用虚拟地址引用存储器位置。 程序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态。

4.1.2 Y86指令

4.1.4 Y86异常

对于Y86,当遇到这些异常的时候,我们就简单的让处理器停业执行指令。

在更完整的设计中,处理器通常会调用一个异常处理程序,这个过程被指定用来处理遇到的某种类型的异常。

Y86指令集基本上是IA32指令集的一个子集。它只包括四字节整数操作、寻址方式比较少、操作也较少。因为只有四字节数据,所以称之为“字”不会有任何歧义。

左边是指令的汇编码表示,右边是字节编码。汇编码格式类似于IA32的ATT格式。

4.1.5 Y86程序

Y86指令和IA32代码的主要区别在于,它可能需要多条指令来执行一条IA32指令能完成的所有功能。 
Y86没有伸缩寻址模式。 
以“.”开头的词是汇编器命令,命令.pos0告诉汇编器应该从地址0处开始产生代码。 
创建Y86代码的唯一工具是汇编器。
YIS:指令集模拟器

4.1.6 一些Y86指令的详情

pushl指令会把栈指针减4,并且将一个寄存器值写入存储器中。 
因为要入栈的寄存器会被同一条指令修改,通常有两种约定:(1)压入%esp的原始值 (2)压入减去4的%esp的值。

4.2逻辑设计和硬件控制语言HCL

4.2.1 逻辑门

逻辑门是数字电路的基本计算元素,它们的输出,等于它们输入位值的某个布尔函数。
布尔函数AND、OR、NOT的标准符号。

4.2.2 组合电路和HCL布尔表达式

组合电路:讲很多的逻辑门组成一个网,就能构成计算块。

构建这些网有两条限制:①两个或多个逻辑门的输出不能连接在一起,否则他们可能会使线上的信号矛盾,可能会导致一个不合法的电压或电器故障。

②这个网必须是无环的。

4.2.3 字级的组合电路和HCL整数表达式

执行字级计算的组合电力根据输入字的各个为,用逻辑门来计算输出字的各个位。 
用中等粗度的线来表示携带字的每个位的线路,用虚线来表示布尔信号结果。
在HCL中,多路复用函数用情况表达式来描述。 
算术/逻辑单元是一种很重要的组合电路。

4.2.4 集合关系

判断集合关系的通用格式是:

iexpr in {iexpr1,iexpr2,……,iexprk}

4.2.5 存储器和时钟

组合电路从本质上将,不存储任何信息。 
存储设备都是由同一个时钟控制,两类存储器设备包括:

时钟寄存器(寄存器):存储单个位或字,时钟信号控制寄存器加载输入值 
随机访问存储器(存储器):存储多个字,用地址来选择该读或该写哪个字

随机访问存储器的例子包括:(1)处理器的虚拟存储器系统(2)寄存器文件

“寄存器”在硬件和机器级编程中的区别:

在硬件中,寄存器直接将它的输入和输出线连接到电路的其他部分; 
在机器级编程中,寄存器代表的是CPU中为数不多的可寻址的字,这里的地址是寄存器ID。 Y86处理器会用时钟寄存器保存程序计数器(PC)、条件代码(CC)、程序状态(Stat)。

如果同时读和写同一个寄存器会发生什么?

如果更新一个寄存器,同时在读端口上用同一个寄存器ID,我们会看到一个从旧值到新值的变化,当我们把这个寄存器文件加入到处理器设计中,我们保证会考虑到这个属性的。

边界检查纯粹就是地址输入的函数,不涉及保存任何状态。 
只读存储器:用来读指令。这两个存储器被合并为一个具有双端口的存储器:一个用来读指令,另一个用来读或者写数据。

4.3 Y86的顺序实现

4.3.1 将处理组织成阶段

下面是关于各个阶段以及各阶段内执行操作的简略描述:

  • 取指:取指阶段从存储器读取指令字节,地址为程序计数器(PC)的值。
  • 译码:译码阶段从寄存器文件读入最多两个操作数,得到val A/val B.
  • 执行:执行阶段,算术/逻辑单元要么执行指令明确的操作(根据ifun的值),计算存储器引用的有效地址,要么增加或减少栈指针。得到的值称为valE
  • 访存:访存阶段可将数据写入存储器或从存储器读出数据
  • 写回:最多可写两个结果到存储器。
  • 更新PC:将PC设置成下一指令的地址。

4.3.2 SEQ硬件结构

SEQ线路图的画图惯例:

浅灰色方框表示硬件单元
控制逻辑块是用灰色圆角矩形表示的
线路的名字在白色椭圆中说明
宽度为字长的数据连接用中等粗度的线表示
宽度为字节或者更窄的数据连接用细线表示
单个位的连接用虚线表示

4.3.3 SEQ的时序

SEQ的实现包括组合逻辑和两种存储器设备:时钟寄存器(程序计数器和条件码寄存器),随机访问存储器(寄存器文件、指令存储器和数据存储器)。 
每个时钟周期,程序计数器都会装在新的指令地址;只有在执行整数运算指令时,才会装载条件码寄存器;只有在执行rmmovl、pushl或call指令时,才会写数据存储器;寄存器文件的两个写端口允许每个时钟周期更新两个程序寄存器。

处理器的原则:处理器从来不需要为了完成一条指令的执行而去读由该指令更新了的状态。

4.3.4 SEQ阶段的实现

作业:

参考文献

1、《深入理解计算机系统》课本第三章

2、实验楼实验指导书:https://www.shiyanlou.com/courses/413 实验五

3、每周重点:http://group.cnblogs.com/topic/73069.html

时间: 2024-10-08 21:22:26

5233杨光--第六周实验报告的相关文章

5233杨光--第七周实验报告

学习时间:5小时 学习任务:<深入理解计算机系统>第六章——存储技术及高速缓存部分 (一)存储技术 ***存储器系统是一个具有不同容量.成本和访问时间的存储设备的层次结构.CPU寄存器保存着最常用的数据. ***小而快的高速缓存寄存器靠近CPU,下层存储设备慢而大.便宜. ***基本存储技术 SRAM存储器 DRAM存储器 ROM存储器 旋转和固态的硬盘 ***随机访问存贮器 分为静态(SRAM)和动态(DRAM)两类,SRAM更快更贵,用来作为高速缓存存储器.DRAM用来作为主存以及图形系统

5233杨光--第三周实验报告

信息的表示和处理 一.数字表示 1. 无符号数:编码基于传统的二进制表示法表示大于或等于零的数字. 2. 补码:编码是表示有符号整数的最常见方法,可以是正或者是负的数字. 3. 浮点数:编码是表示实数的科学计数法的以二位基数的版本.  ***当结果太大不能表示时会溢出,大量安全漏洞都是由于算数运算引发的*** 二.信息存储 1.最小的可寻址存储器单位:字节 2.虚拟存储器:每个字节都由唯一的数字标识,称为地址 3.虚拟地址空间:所有可能地址的集合 4.每个程序对象可视为字节块,程序本身是一个字节

第六周实验报告四

一.实验目的 (1)掌握类的继承方法 (2)变量的继承和覆盖,方法的继承,重载和覆盖实现 二.实验内容 一.实验目的 (1)掌握类的继承 (2)变量的继承和覆盖,方法的继承,重载和覆盖的实现: 二.实验的内容 (1)根据下面的要求实现圆类Circle. 1.圆类Circle的成员变量:radius表示圆的半径. 2.圆类Circle的方法成员: Circle():构造方法,将半径置0 Circle(double r):构造方法,创建Circle对象时将半径初始化为r double getRadi

信息安全系统设计第六周实验报告

第六章.储存器层次结构 存储器系统:具有不同容量.成本和访问时间的存储器设备的层次结构.计算机程序的基本属性:局部性.具有良好局部性的程序倾向于一次又一次访问相同的或者邻近的数据项集合,倾向于从存储器层次结构中较高层次处访问数据项,因此运行的更快. 一.存储技术 (1)随机访问存储器(RAM) 静态RAM:用来作为高速缓存存储器,每个位存储在一个双稳态的存储器单元里. 动态RAM:用来作为主存以及图形系统的帧缓冲区. 传统的DRAM: 1.信息通过称为引脚的外部连接器流入/流出芯片,每个引脚携带

第六周实验报告和总结

一.实验目的 (1)掌握类的继承 (2)变量的继承和覆盖,方法的继承,重载和覆盖的实现: 二.实验的内容 (1)根据下面的要求实现圆类Circle. 1.圆类Circle的成员变量:radius表示圆的半径. 2.圆类Circle的方法成员: Circle():构造方法,将半径置0 Circle(double r):构造方法,创建Circle对象时将半径初始化为r double getRadius():获得圆的半径值 double getPerimeter():获得圆的周长 void disp(

第六周实验报告4

一.实验目的 (1)掌握类的继承 (2)变量的继承和覆盖,方法的继承,重载和覆盖的实现 二.实验的内容 (1)根据下面的要求实现圆类Circle. 1.圆类Circle的成员变量:radius表示圆的半径. 2.圆类Circle的方法成员: Circle():构造方法,将半径置0 Circle(double r):构造方法,创建Circle对象时将半径初始化为r double getRadius():获得圆的半径值 double getPerimeter():获得圆的周长 void disp()

20182310 第一周实验报告

20182310 <数据结构与面向对象程序设计>第一周实验报告 课程:<数据结构与面向对象程序设计> 班级:1823 姓名:周烔 学号:20182310 实验老师:王志强 实验日期:2019/9/9 选修/必修:必修 1.实验内容: 1.基于命令行和IDE Intellj IDEA 简易教程进行简单的Java程序编辑.编译.运行和调试.(https://www.cnblogs.com/rocedu/p/4421202.html) 2.练习Linux基本命令: 3.学习Java程序的

第六章 实验报告(函数与宏定义)2

C程序设计实验报告 实验项目:函数和宏定义实验 姓名:罗子健 实验地点:物联网实验室 实验时间:2019年5月16日 一.实验目的与要求 (1)掌握函数定义方法和调用规则. (2)掌握在C语言程序中主调函数和被调用函数之间进行数据传递的规则. (3)了解函数的返回值及其类型,并正确使用它. (4)了解局部变量和全局变量的作用域及它们与储存分类的关系,理解变量的存在性和可变性的概念. (5)练习递归函数的使用. (6)理解宏的概念,掌握定义无参宏和带参宏的方法.了解文件包含的概念,掌握其用法. (

2019JAVA第六次实验报告

Java实验报告 班级 计科二班 学号 20188442 姓名 吴怡君 完成时间 2019.10.18 评分等级 实验四 类的继承 实验目的 理解异常的基本概念: 掌握异常处理方法及熟悉常见异常的捕获方法. 实验要求 练习捕获异常.声明异常.抛出异常的方法.熟悉try和catch子句的使用. 掌握自定义异常类的方法. 实验内容 1.编写一个类,在其main()方法中创建一个一维数组,在try字句中访问数组元素,使其产生ArrayIndexOutOfBoundsException异常.在catch