计算机系统课程 笔记总结 CSAPP第四章 处理器体系结构(4.1-4.3)
- GitHub计算机系统CSAPP课程资源
- 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理(2.1-2.2)
- 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理(2.3-2.4)
- 计算机系统课程 笔记总结 CSAPP第三章 程序的机器级表示(3.2-3.4)
- 计算机系统课程 笔记总结 CSAPP第三章 程序的机器级表示(3.5-3.7)
- 计算机系统课程 笔记总结 CSAPP第三章 程序的机器级表示(3.8-3.10)
- 计算机系统课程 笔记总结 CSAPP第四章 处理器体系结构(4.1-4.3)
- 计算机系统课程 笔记总结 CSAPP第五章 优化程序性能(5.1-5.14)
- 计算机系统课程 笔记总结 CSAPP第六章 存储器层次结构(6.2-6.6)
- 计算机系统课程 笔记总结 CSAPP第七章 链接(7.1-7.13)
- 计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.0-8.1)
- 计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.2-8.4)
- 计算机系统课程 笔记总结 CSAPP第九章 虚拟存储器(9.1-9.5)
- 计算机系统课程 笔记总结 CSAPP第九章 虚拟存储器(9.6-9.10)
目录
4.1 Y86-64指令集体系结构
4.1.1 程序员可见的状态
4.1.2 Y86-64指令
4.1.3 指令编码
加法指令(QPq)
4.1.4 Y86-64异常
4.1.5 Y86-64程序
4.2 逻辑设计和硬件控制语言HCL
4.2.1 逻辑门
4.2.2 组合电路和HCL布尔表达式
4.2.3 字级的组合电路和HCL整数表达式
4.2.4 集合关系
4.2.5 存储器和时钟
4.3 Y86-64的顺序实现
4.3.1 将处理组织成阶段
4.3.2 SEQ硬件结构
4.3.3 SEQ的时序
4.3.4 SEQ阶段的实现
4.1 Y86-64指令集体系结构
定义一个指令集体系结构包括定义:
|
|||||
指令的层次
|
|||||
ISA指令系统的设计原则
- RICS还是CISC?
- 还是Risc+Cisc
- 完备性:ISA的指令足够使用
- 功能齐全:不能没有加法指令,但可以没有inc指令
- 有效性:程序能够高效率运行
- 生成代码小:频率高的操作码、操作数短
- 规整性:对称性、匀齐性、一致性
- push rsp / pop rsp 应保证栈顶恢复
- 兼容性:相同的基本结构、共同的基本指令集
- 灵活性:
- 如操作数的寻址方式:满足基本的数据类型访问
- 可扩充性:操作码字段预留一定的空间
4.1.1 程序员可见的状态
|
|||
4.1.2 Y86-64指令
|
|||
4.1.3 指令编码
寄存器编码:
指令集功能码:
- 高4位:代码code部分
- 低4位:功能function部分(一组相关指令共用一个代码时使用)
加法指令(QPq)
两字节编码:
- 第一字节指出指令类型
- 第二字节指出源和目的寄存器
- e.g. addq %rax,%rsi 编码: 60 06
当寄存器和内存移动是,内存m是rB |
|||||
4.1.4 Y86-64异常
程序员可见的状态码Stat |
|
||
4.1.5 Y86-64程序
- 尽量多用C编译器
- 用 C 编码
- 在 x86-64 中用gcc –Og –S 编译
- 把X86-64的asm直译到 Y86-64 中
- 现代编译器使得这个过程更加复杂
4.2 逻辑设计和硬件控制语言HCL
|
通过返回值的类型分类
|
||
- 计算
- 通过组合逻辑实现
- 计算布尔函数
- 连续地对输入变化响应
- 存储
- 寄存器
- 存储单字
- 当时钟上升时加载
- 随机存取存储器
- 存储多字
- 可能有多个读/写端口
- 输入地址变化 --> 读取字
- 时钟上升 --> 写入字
- 寄存器
4.2.1 逻辑门
4.2.2 组合电路和HCL布尔表达式
- 逻辑门的输入必须连接到下述之一:
- 一个系统输入(主输入)
- 某个存储器单元的输出
- 某个逻辑门的输出
- 两个逻辑门的输出不能连接在一起
- 无环
位相等:bool eq = (a&&b)||(!a&&!b) |
字相等:bool Eq = (A == B) |
||
HCL和C语言区别:
- HCL输入变化后,一定延迟,输出也相应变化;C语言只会在程序执行过程中被遇到时才进行求值
- C的逻辑表达式允许参数是任意整数,逻辑门只对位值0和1进行操作
- C的逻辑表达式可能只被部分求值,若一个and或er操作的结果只用对第一个参数求值就能确定,那就不会对第二个参数求值了;逻辑门只是简单地响应输入地变化
- a&&func()
- 若a为真,则不进入func函数
4.2.3 字级的组合电路和HCL整数表达式
- bool Eq = ( A == B )
- A B为int型
4.2.4 集合关系
4.2.5 存储器和时钟
- 时钟寄存器,简称寄存器
- 存储单个位或字
- 时钟信号控制寄存器加载输入值
- 边缘触发锁存器的集合
- 随机访问存储器,简称内存
- 存储多个字
- 用地址来选择该读或该写哪个字
寄存器:时钟上升沿加载输入
随机存取存储器
- RAM:存储内存中的多个字
- 通过输入的地址来决定读/写哪个字,写由clk控制。
- RF:寄存器文件
- 硬件寄存器:稳态、组合逻辑的屏障,CLK边沿触发。如:PC、CC、Stat 等
- 程序寄存器:存储数据,可按ID读、写的存储单元。汇编级用 %rax, %rsp, %r14等,机器级-寄存器ID标识符作为地址(0000-1110) 15 (0xF) 表示不执行读写
- PORTS:多端口
- 在每个周期可以同时读/写多个字
- 每个端口有单独的地址和数据输入/输出
- 在每个周期可以同时读/写多个字
寄存器文件
- 2个读端口
- 地址输入:srcA, srcB (source)
- 数据输出:valA, val B (value)
- 类似组合逻辑
- 1个写端口
- 地址输入:dstW (destination)
- 数据输入:valW
- 类似寄存器
- 只在时钟上升沿更新
- 多端口随机访问寄存器,允许同时进行多个读和写操作
- 每个端口都有一个地址输入,表明该选择哪个程序寄存器
- 还有一个数据输出或对应该程序寄存器的输入值
4.3 Y86-64的顺序实现
4.3.1 将处理组织成阶段
|
|||
|
|||
SEQ各阶段
- 取指
- icode:ifun <-- M1[PC]
- rA:rB <-- M1[PC+1]
- valP <-- PC+2(mov有D为10,jxx/call有Dest为9,ret/halt/nop为1)
- 译码:需要“读入”用来操作的寄存器里的数
- val <-- R[rA]
- val <-- R[rB]
- 执行
- valE=……
- 访存:有用到内存时(读出/写入)
- valA <--> M[valB]
- 写回:写入寄存器
- R[rB] <-- rA/val
- 更新PC
- PC <-- valP
4.3.2 SEQ硬件结构
4.3.3 SEQ的时序
原则:从不回读
4.3.4 SEQ阶段的实现
# Determine instruction code int icode = [ imem_error: INOP; 1: imem_icode; ]; # Determine instruction function int ifun = [ imem_error: FNONE; 1: imem_ifun; ]; bool need_regids = icode in { IRRMOVQ, IOPQ, IPUSHQ, IPOPQ, IIRMOVQ, IRMMOVQ, IMRMOVQ }; bool instr_valid = icode in { INOP, IHALT, IRRMOVQ, IIRMOVQ, IRMMOVQ, IMRMOVQ, IOPQ, IJXX, ICALL, IRET, IPUSHQ, IPOPQ }; bool need_valC = icode in { IIRMOVQ, IRMMOVQ, IMRMOVQ, IJXX, ICALL }; |
|||
译码/写回逻辑
- 寄存器文件
- 读端口 A, B
- 写端口 E, M
- 地址为寄存器的ID
- 或 15 (0xF) -无法访问
int srcA = [ icode in { IRRMOVQ, IRMMOVQ, IOPQ, IPUSHQ } : rA; icode in { IPOPQ, IRET } : RRSP; 1 : RNONE; # 不需要寄存器 ]; int dstE = [ icode in { IRRMOVQ } && Cnd : rB; icode in { IIRMOVQ, IOPQ} : rB; icode in { IPUSHQ, IPOPQ, ICALL, IRET } : RRSP; 1 : RNONE; # 不写任何寄存器 ]; word srcB = [ icode in { IOPQ, IRMMOVQ, IMRMOVQ } : rB; icode in { IPUSHQ, IPOPQ, ICALL, IRET } : RRSP; 1 : RNONE; # Don't need register ]; int word dstM = [ icode in { IMRMOVQ, IPOPQ } : rA; 1 : RNONE; # Don't write any register ]; |
|||
执行逻辑
- 单元
- ALU
- 实现四种所需的功能
- 生成条件码
- CC
- 包含三个条件码位的寄存器
- cond
- 计算条件转移或跳转标识
- ALU
- 控制逻辑
- Set CC: 是否加载条件码寄存器?
- ALU A: 数据A送ALU
- ALU B: 数据B送ALU
- ALU fun: ALU执行哪个功能?
int aluA = [ icode in { IRRMOVQ, IOPQ } : valA; icode in { IIRMOVQ, IRMMOVQ, IMRMOVQ } : valC; icode in { ICALL, IPUSHQ } : -8; icode in { IRET, IPOPQ } : 8; # 其他指令不需要ALU ]; int alufun = [ icode == IOPQ : ifun; 1 : ALUADD; ]; int aluB = [ icode in { IRMMOVQ, IMRMOVQ, IOPQ, ICALL, IPUSHQ, IRET, IPOPQ } : valB; icode in { IRRMOVQ, IIRMOVQ } : 0; # 其他指令不需要ALU ]; bool set_cc = icode in { IOPQ }; |
|||
访存逻辑
- 访存
- 读写内存里的数据字
- 控制逻辑
- stat: 指令状态是什么?
- Mem. read: 是否读数据字?
- Mem. write: 是否写数据字?
- Mem. addr.: 选择地址
- Mem. data.: 选择数据
## 决定指令状态 int Stat = [ imem_error || dmem_error : SADR; !instr_valid: SINS; icode == IHALT : SHLT; 1 : SAOK; ]; int mem_addr = [ icode in { IRMMOVQ, IPUSHQ, ICALL, IMRMOVQ } : valE; icode in { IPOPQ, IRET } : valA; # 其他指令不需要地址 ]; bool mem_read = icode in {IMRMOVQ,IPOPQ,IRET }; bool mem_write = icode in { IRMMOVQ, IPUSHQ, ICALL }; word mem_data = [ # Value from register icode in { IRMMOVQ, IPUSHQ } : valA; # Return PC icode == ICALL : valP; # Default: Don't write anything]; |
|||
更新PC逻辑
int new_pc = [ icode == ICALL : valC; icode == IJXX && Cnd : valC; icode == IRET : valM; 1 : valP; ]; |
|||
- 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理(2.1-2.2)
- 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理(2.3-2.4)
- 计算机系统课程 笔记总结 CSAPP第三章 程序的机器级表示(3.2-3.4)
- 计算机系统课程 笔记总结 CSAPP第三章 程序的机器级表示(3.5-3.7)
- 计算机系统课程 笔记总结 CSAPP第三章 程序的机器级表示(3.8-3.10)
- 计算机系统课程 笔记总结 CSAPP第四章 处理器体系结构(4.1-4.3)
- 计算机系统课程 笔记总结 CSAPP第五章 优化程序性能(5.1-5.14)
- 计算机系统课程 笔记总结 CSAPP第六章 存储器层次结构(6.2-6.6)
- 计算机系统课程 笔记总结 CSAPP第七章 链接(7.1-7.13)
- 计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.0-8.1)
- 计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.2-8.4)
- 计算机系统课程 笔记总结 CSAPP第九章 虚拟存储器(9.1-9.5)
- 计算机系统课程 笔记总结 CSAPP第九章 虚拟存储器(9.6-9.10)
- GitHub计算机系统CSAPP课程资源
计算机系统课程 笔记总结 CSAPP第四章 处理器体系结构(4.1-4.3)相关推荐
- 深入理解计算机系统(第二版)第四章知识整理
深入理解计算机系统(第二版)笔记 第四章 处理器体系结构 4.1 Y86指令集体系结构 4.1.1 程序员可见的状态 4.1.2 Y86指令 4.1.3 指令编码 4.1.4 Y86异常 4.1.5 ...
- 机器学习(浙大课程b站)第四章
机器学习(浙大课程b站)第四章:深度学习 笔记 测验 笔记 深度学习数据库准备 自编码器 编码器采用的是分层初始化的思想 首先训练一个小网络输入是X,输出也是X 通过这个网络使中间的三维数据浓缩了原有 ...
- 李弘毅机器学习笔记:第十四章—Why deep?
李弘毅机器学习笔记:第十四章-Why deep? 问题1:越深越好? 问题2:矮胖结构 v.s. 高瘦结构 引入模块化 深度学习 使用语音识别举例 语音辨识: 传统的实现方法:HMM-GMM 深度学习 ...
- 【软件体系结构】考点总结 第四章 软件体系结构描述 XJU
软件体系结构 第四章 软件体系结构描述 前言 本文为XJU本科期间博主根据 <软件体系结构原理.方法与实践>第二版所作的期末考点总结,因为是课堂重点总结,所以有些重要知识点没有涵盖还请 ...
- 第四章 指令集体系结构——广度和深度
第四章 指令集体系结构--广度和深度 4.1 数据存储和栈 从一些与数据存储.过程和参数传递有关的背景问题开始. 高级语言程序员用 变量 代表 抽象数据单元 的数据元素,这些数据单元是抽象的, 它可以 ...
- 《网络安全工程师笔记》 第十四章:渗透简单测试流程
注:本笔记来自温晓飞老师的网络安全课程 第十四章:渗透简单测试流程 第一章:虚拟化架构与系统部署 第二章:IP地址详解 第三章:进制转换 第四章:DOS基本命令与批处理 第五章:用户与组管理 第六章: ...
- 【Java基础学习笔记】- Day11 - 第四章 引用类型用法总结
Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 4.1 class作为成员变量 4.2 interface作为成 ...
- sql语言管理中计算机系统,00051管理系统中计算机应用第四章数据库系统考纲
第四章数据库系统考纲 一.数据库系统概述 识记: 1.数据模型:对现实世界事物特征的模拟和抽象就是这个事物的模型.在数据库中数据模 型是抽象的表示和处理现实世界中数据的工具. 首先按人们的认识观点将现 ...
- C语言数据结构(大话数据结构——笔记2)第四章:栈与队列
文章目录 第四章:栈与队列(115) 栈顶与栈底,空栈,后进先出 Last in first out(LIFO结构)(117) 进栈.压栈.入栈:栈的插入操作:出栈.弹栈:栈的删除操作(118) pu ...
- 系统架构师学习笔记_第十四章_连载
第十四章 基于ODP的架构师实践 14.1 基于ODP的架构开发过程 系统架构 反映了功能在系统系统构件中的 分布.基础设施相关技术.架构设计模式 等,它包含了架构的 原则 和 方法.构件关系 与 ...
最新文章
- 黯然微信小程序杂记(三):微信小程序实现倒计时功能 附讲解教学 附源码
- PAT, PMT in MPEG2 Stream :筆記
- RabbitMQ启动参数具体含义
- [Jsoi2016]最佳团体 BZOJ4753 01分数规划+树形背包/dfs序
- 从Activity中返回数据
- 大数据开发者必走的学习路线
- java提示框easyui风格_EasyUI 标签框风格(TagBox Style)_Vue EasyUI Demo
- mysql中的rman备份与恢复_使用RMAN备份与恢复数据库
- java毕业生设计超市自助结账系统的设计与实现计算机源码+系统+mysql+调试部署+lw
- java基础案例7-4升级日记本
- codebook实现源码
- 设计的银行账户管理系统,增加一个VIP账户的管理
- 一则两年前的可怕预言:2013年中国经济危机将爆发!
- 两个月面试30+公司,我得到了这些经验教训
- 让机器认知中文实体 — 复旦大学知识工场发布中文实体识别与链接服务
- 【CAN通信】CAN协议详解
- 各保险公司所使用的业务系统
- 工具分享 | linemap-快速绘制山峦地图的R可视化包介绍
- 对于 C 源文件,IntelliSenseMode 已根据编译器参数和查询 compilerPath 从“windo
- 机器学习基础:word2vec详解
热门文章
- 女程序员未来的职场出路在哪里?
- 公认最好的鸿蒙系统,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可
!【手机吧】_百度贴吧...
- 你适合当leader吗?今晚,我们一起找答案
- 超干货!彻底搞懂Golang内存管理和垃圾回收
- 2016总结——在路上,我走到哪儿了?
- html实现银行卡中间四位显示为*号,银行卡和手机号中隐藏的数字用*号代替,不能和文字垂直居中,有什么解决方案吗?...
- 用accelstepper库控制28BYJ-48步进电机(快慢运动切换)
- 作为程序员,应该更关注代码质量还是只需要完成功能就好了?
- 中国有史以来最缠绵词章大盘点
- html心情日志页面,增加日志页面