博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
系统设计基础第六周学习总结
阅读量:5149 次
发布时间:2019-06-13

本文共 2265 字,大约阅读时间需要 7 分钟。

第四章 处理器体系结构

第一节 Y86指令集体系结构

一、程序员可见的状态

存储器

Y86程序用虚拟地址来引用存储器位置,硬件和操作系统软件联合起来将虚拟地址翻译成实际或物理地址

状态码stat

它表明程序执行的总体状态,会指示是正常运行还是出现了某种异常。

二、Y86指令

Movl类指令

irmovl,rrmovl,mrmovl,rmmovl

前面的两个字母是在显式的指定源操作数和目的操作数的格式,第一位是源操作数,第二位是目的操作数。

四个整数操作指令

addl 加subl andl xorl 异或

并且它们只对寄存器数据进行操作,会设置三个条件码ZF\SF\OF

七个跳转指令——分支控制

jmp 直接跳转jle(SF^OF|ZF 有符号数jl SF^OF 有符号<je ZF 相等/jne ~ZF 不相等/非零jge ~(SF^OF) 有符号jg ~(SF^OF)&~ZF 有符号>

六个条件传送指令

Cmovle  、cmovl  、cmove   、cmovne    、cmovge    、cmovg

halt指令

halt指令停止指令的执行,执行此指令会导致处理器停止,并将状态码设置为HLT

三、指令的字节级编码

字节编码必须有唯一的解释

每条指令需要1-6个字节不等,每条指令的第一个字节表明指令的类型。

第一个字节

整数操作里代码部分均为6,功能部分区分addlsublandlxorl

分支指令里代码部分均为7

传送指令里代码部分均为2

当需要指明不应访问任何寄存器时,用ID0xF表示

额外需要的字节

1)附加的寄存器指示符字节

指定一个或两个寄存器,例如rA或者rB

  • 没有寄存器操作数的指令,例如分支指令和call指令,就没有寄存器指示符字节。
  • 只需要一个寄存器操作数的指令(irmovlpushlpopl)将另一个寄存器指示符设为0xF
2)附加的4字节常数可包括:

1.irmovl的立即数数据2.rmmolmrmovl的地址指示符的偏移量3.分支指令和调用指令的目的地址

四、Y86异常

状态码Stat的可能取值

Stat描述程序执行的总体状态

1. AOK 正常操作2. HLT 处理器执行halt指令3. ADR 遇到非法地址4. INS 遇到非法指令

第二节 逻辑设计和硬件控制语言HCL

一、逻辑门

1.符号表示:AND &&OR ||NOT !

2.逻辑门只对单个位的数进行操作,而不是整个字。

二、组合电路

限制:

  • 两个或多个逻辑门的输出不能连接在一起
  • 必须无环

三、集合关系

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

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

iexpr等都是整数表达式。

四、存储器和时钟

1.时序电路的两类存储器设备:

1)时钟寄存器(简称寄存器):储存单个位或字。

2)随机访问储存器(简称储存器):储存多个字,用地址选择该读/写哪个字。

2.Y86处理器

它会用时钟寄存器保存程序计数器PC,条件代码CC和程序状态Stat

第三节 Y86的顺序实现

一、将处理组织成阶段

具体框架分为四类:

1.针对OPl(整数和逻辑运算),rrmovl(寄存器-寄存器传送)和irmovl(立即数-寄存器传送)

 

2.针对rmmovlmrmovl

 

3.针对pushlpopl

 

4.针对跳转,callret

 

二、SEQ硬件结构

SEQ抽象视图的画法:

  • 程序计数器放在寄存器中,位于左下角PC
  • 信息随着线流动,方向是先向上再向右
  • 反馈先祖在右边向下
  • 所有硬件单元的处理都在一个时钟周期内完成。
  • 浅灰色方块表示硬件单元
  • 控制逻辑块是用灰色圆角矩形表示的
  • 线路的名字在白色椭圆中说明
  • 宽度为字长或更窄的数据连接用细线
  • 单个位的连接用虚线

三、SEQ的时序

SEQ的实现包括组合逻辑和两种存储器设备:

1.时钟寄存器——程序计数器和条件码寄存器2.随机访问存储器——寄存器文件、指令存储器和数据存储器

对于上面提到的五个硬件单元,可以分成两类:

1.组合逻辑——指令存储器2.时序

条件码寄存器——只在执行整数运算指令时装载数据存储器——只在执行rmmovlpushlcall时写入寄存器文件——两个写端口允许每个时钟周期更新两个程序寄存器。特殊寄存器?0xF表示此端口不应执行写操作。

四、SEQ阶段的实现

1.取指阶段

PC为第一个字节,读6个字节。

两个逻辑块(从第一个字节中分出,各四位)

icode-指令代码ifun-指令功能

三个一位的信号(根据icode值计算)

instr_valid-发现不合法的指令need_regids-包含寄存器指示符字节吗need_valC-包括常数字吗

后五个字节是寄存器指示符字节和常数字的组合编码。

2.译码和写回阶段

3.执行阶段

1)包括算术/逻辑单元ALU,输出的是valE

ALU常被用作加法器

2)包括条件码寄存器

零,符号,溢出,产生信号set_cc

4.访存阶段

根据icode,imem_error,instr_valid,dmem_error,从指令执行的结果计算状态码Stat

5.更新PC阶段

 参考资料:

http://www.cnblogs.com/20135202yjx/p/4888820.html

 

实验五:

Y86编写得程序文件

 

转载于:https://www.cnblogs.com/20135302wei/p/4890165.html

你可能感兴趣的文章
百度智能手环方案开源(含源码,原理图,APP,通信协议等)
查看>>
设计模式(三十一)------23种设计模式(23):简单工厂模式
查看>>
9.12日学习笔记
查看>>
spring-data-neo4j 4.2.4release文档概要
查看>>
0049-学校的上网费
查看>>
31、求整数范围中1的个数
查看>>
算法第二章上机实践报告
查看>>
.net
查看>>
Zend studio 常用快捷键与技巧
查看>>
iOS基础知识之类别
查看>>
测试人员关注点
查看>>
spring mvc 自定义转换器
查看>>
解决 IE8 不支持console
查看>>
求和最大的子数组
查看>>
数据库小组第N次小组会议
查看>>
Python常见数据类型及操作
查看>>
Win7下安装 Oracle Virtual Box
查看>>
C# listview展示表格格式
查看>>
20165310 java_blog_week3
查看>>
android杀进程方法
查看>>