CH2 Instruction Systems
指令系统
三种类型的指令系统,CISC,RISC,VLIW:超长指令字
指令系统的设计:格式设计、功能设计、性能评价
数据表示
用数据表示确定哪些数据类型的原则 ? 缩短程序的运行时间 ? 减少CPU与主存储器之间的通信量 ? 该数据表示通用性和利用率
高级数据表示
- 自定义数据表示
数据的属性通过指令中的操作代码来解释。先进语言的适用类型描述了句子指定的数据类型,操作符不反映数据类型。先进语言和机器语言之间的语义差距需要由编译器来弥补
为了缩短先进语言和机器语言之间的语义差距,可以 也就是类似于描述符
[例题] 假设X处理器的数据没有标志符,指令字长和数据字长都是;Y数据字长增加到处理器的数据带标志符,其中三个是标志符,指令字长从32减少到30。。计算这两种不同类型处理器中程序占用的存储空间。
[解答] XY处理程序占用的存储空间总和分别为
32I指令占用的空间,2*32 / R 操作数空间? $B_x = 32I 2*32 / R,B_y = 30I 2*35I / R$ 比值:$B_y / B_x = \frac{15R 35}{16R 32}$ 当?? > 3时,有By / Bx <1.在实际应用中,通常是? > 10。因此,标志符处理器通常占用较小的存储空间。
标识符数据表示方法[优点]:
- 简化指令系统。
- 一致性检查和数据类型转换由硬件实现。
- 简化程序设计,缩小人与计算机的语义差距。
- 简化编译器,大大缩短高级语言和机器语言之间的语义差距。
- 支持数据库系统,一个软件可以适用于各种数据类型,而无需修改。
- 软件调试方便,每个数据都有陷井位。
[缺点]:
- 通过精心设计指令系统,数据和指令长度可能不一致
- 指令[执行速度]减少,但使用标志符设计,程序设计、编译和调试实践将减少
- 硬件复杂度增加
-
数据描述符性相同,对向量、数据、记录等数据采用数据描述符
数据描述符和标志符的区别:标志符只作用于一个数据,而。
-
表示向量和数组数据
增加数组数据表示构成向量机
对于向量A,需要指明
有效长度的起点:基地址 位移量
-
堆栈数据表示
堆栈数据结构在调用很有用
堆栈机的特点:1)由高速寄存器组成的硬件堆栈;2)堆栈操作指令丰富,功能强大;3)支持高级语言编译;4)支持子程序的嵌套和递归调用
-
原则:看系统效率是否提高:时间和存储空间是否减少
是否提高了通用性和利用率
-
浮点数表示
数符 阶符 阶码数值 小数点 尾数 1bit 1bit p位 . m位 最小尾数:1 * r m ? 1 r_m^{-1} rm?1
最大尾数:
寻址技术
编址方式
- 一般:字节编址,字访问
- 部分机器:位编址,字访问
- 辅助存储器:块编址,位访问
字节编址 字访问的问题:
谈字节编址字访问的地址信息浪费问题_TalesOV的博客-CSDN博客
关于地址的浪费:
字编址32位去访问,地址的最低两位都是00.如果32位机器按照半字(两个字节)寻址,那么最后一个二进制位会是0
与访问的最小单位有关系
双字地址最末三个二进制位必须为000,单字地址最末两位必须为00,半字地址最末一位必须为0
0x123456
大端:数据从高字节向低字节排列(从左往右 0x123456)
小端:数据从低字节向高字节排列(0x654321)
•三个零地址空间:通用寄存器、主存储器、输入输出设备独立编址 • 两个零地址空间:主存储器与输入输出设备统一编址 • 一个零地址空间:最低端是通用寄存器,最高端是输入输出设备, 中间为主存储器 • 隐含编址方式:堆栈、Cache等
一个零地址空间,即所有存储设备统一编址,地址低端是通用寄存器,最高端是I/O设备,中间绝大多数给主存。
• 高位交叉编址:主要用来扩大存储器容量。 • 低位交叉编址:主要是提高存储器速度。
模m低位交叉编址:
寻址规则 • 体地址𝑗=𝐴 𝑚𝑜𝑑 𝑚 • 体内地址𝑖 = 𝐴/𝑚
同样还有模M高位交叉编址
一台设备一个地址:仅对输入输出设备本身进行编址,需要通过指 令中的操作码来识别该输入输出设备接口上的有关寄存器 Ø 一台设备两个地址:数据寄存器、状态或控制寄存器。 Ø 多个编址寄存器共用同一个地址的方法: • 依靠地址内部来区分,适用于被编址的寄存器的长度比较短 • “下跟法”隐含编址方式,必须按顺序读写寄存器。 Ø 一台设备多个地址:增加编程的困难
寻址方式
- 立即数寻址
- 面向寄存器寻址
- 面向主存储器寻址
- 直接寻址
- 间接寻址
- 变址寻址
- 面向堆栈寻址
地址转化
程序需要定位的主要原因: • 程序的独立性 • 程序的模块化设计 • 数据结构在程序运行过程中,其大小往往是变化的 • 有些程序本身很大,大于分配给它的主存物理空间
Ø 直接定位方式:在程序装入主存储器之前,程序中的指令和数据的主存物理就已经确定了的称为直接定位方式。 Ø 静态定位:在程序装入主存储器的过程中随即进行地址变换,确定指令和数据的主存物理地址的称为静态定位方式。 Ø 动态定位:在程序执行过程中,当访问到相应的指令或数据时才进行地址变换,确定指令和数据的主存物理地址的称为动态定位方式。
动态定位需要:增加相应的基址寄存器和地址加法器硬件,在程序不做变换直接装入主存的同时,将装入主存的起始地址存入对应该道程序使用的基址寄存器中
程序执行时,通过地址加法器将逻辑地址加上基址寄存器内的程序基址,形成有效的物理地址
可在指令中加入相应的标志位来指明指令地址是否需要加基址
指令系统的优化设计
主要目标:
操作码的优化表示
操作码的三种编码方法:固定长度、Huffman编码、扩展编码
优化操作码编码的目的:节省程序存储空间
Huffman编码
概率高的用最短的位数来处理
操作码的平均长度公式: H = − ∑ p i ∗ l o g 2 p i , p i 是 第 i 种 操 作 码 出 现 的 概 率 H = -\sum pi*log_2p^i,pi是第i种操作码出现的概率 H=−∑pi∗log2pi,pi是第i种操作码出现的概率
固定长编码相对于最优Huffman编码的信息冗余量: R = 1 − − ∑ p i ∗ l o g 2 p i l o g 2 n 分 母 需 要 向 上 取 整 R = 1-\frac{-\sum pi*log_2p_i}{log_2n} 分母需要向上取整 R=1−log2n−∑pi∗log2pi分母需要向上取整
然后算信息冗余量R = 1 - Hopt / H实际 就是冗余量
huffman缺点:
- 操作码长度很不规整,硬件译码困难
- 与地址码共同组成固定长的指令比较困难
扩展编码法
操作码长度不是定长,但是只有
一个是从每次15个 一个是 8/64/512
RISC CISC
- 按CISC方向:增强原有指令的功能以及设置更为复杂的新指令,取代 原先由软件子程序完成的功能,实现软件功能的硬化
- 按RISC方向:通过减少指令种类和简化指令功能来降低硬件设计的复 杂度,提高指令执行速度
RISC 定义以及特点
- 减少指令和寻址方式种类:指令系统只选择高频指令,减少指令数量,一般不超 过100条;减少寻址方式,一般不超过两种
- 固定指令格式:精减指令格式限制在两种以内,并使全部指令都在相同的长度
- 大多数指令在单周期内完成:让所有指令都在一个周期内完成
- 采用LOAD/STORE结构:扩大通用寄存器数量(一般不少于32个),尽量减少访存, 所有指令只有存(STORE)/取(LOAD)指令可以访存,其他指令只对寄存器操作
- 硬布线逻辑:大多数指令采用硬联逻辑,少数指令采用微程序实现,提高指令执 行速度
- 优化编译:通过精减指令和优化设计编译程序,简单有效地支持高级语言实现
延时转移
采用指令延迟转移技术时,指令序列的调整由编译器自动进行,用户不必干预
类似于指令重排
采用延迟转移技术的两个限制条件 • 被移动指令在移动过程中与所经过的指令之间没有数据相关 • 被移动指令不破坏条件码,至少不影响后面的指令使用条件码
Ø如果找不到符合上述条件的指令,必须在条件转移指令后面插入空操作 Ø如果指令的执行过程分为多个流水段,则要插入多条指令 • 插入1条指令成功的概率比较大,插入2条或2条以上指令成功的概率明显下降(找不到啊)
指令取消技术
采用指令延时技术,经常找不到可以用来调整的指令, • 可考虑采用另一种方法:指令取消技术 • 分为两种情况: (1) 向后转移(适用于循环程序) (2) 向前转移(IF THEN )
重叠寄存器窗口技术
原因:在RISC中,子程序比CISC中多,因为传送参数而访问存储器的信息 量很大 Ø实现方法:设置一个数量比较大的寄存器堆,并把它划分成很多个窗口。 在每个过程使用的几个窗口中: • 有一个窗口是与前一个过程共用 • 有个窗口是与下一个过程共用
指令流调整技术
高速缓冲存储器Cache
优化设计编译器
情况: (1) 向后转移(适用于循环程序) (2) 向前转移(IF THEN )
重叠寄存器窗口技术
原因:在RISC中,子程序比CISC中多,因为传送参数而访问存储器的信息 量很大 Ø实现方法:设置一个数量比较大的寄存器堆,并把它划分成很多个窗口。 在每个过程使用的几个窗口中: • 有一个窗口是与前一个过程共用 • 有个窗口是与下一个过程共用
[外链图片转存中…(img-RtfEEKgr-1653990253811)]