前言:去年备研学习计算机组成原理的一些笔记,因为主要为了应付考试,记得比较仓促,仅供参考。
文章目录
指令系统
指令系统概述
程序:由一系列有时间顺序、有逻辑关系的指令构成。
指令:控制计算机硬件完成指定基本操作的命令,是用户使用计算机、计算机本身运行的最小单位。
指令系统、指令集(Instruction Set):能被一台计算机执行的全部指令的集合。
机器指令、助记符指令
设计、评价指令系统需考虑的问题:
- 完备性:指令齐全、编程方便
- 高效性:占主存空间小,运行速度快
- 规整性
- 兼容性:向后兼容
指令系统设计内容:
- 指令的功能:由计算机的功能确定
- 指令的格式:
- 计算机字长
- 存储器容量、存储模式
- 寄存器组织
- 数据类型
- 硬件结构复杂度
- 运算性能
存储模式
数据存储顺序
小端法,最低有效字节(靠右)在最前面的方式
大端法,最高有效字节在(靠左)最前面的方式
例:假设变量x的类型为int, 位于地址 0x100 处, 它的十六进制值为 0x01234567(高位字节的十六进制值为 0x01, 而低位字节值为 0x67。)。地址范围 0x100 ~ 0x103 的字节顺序依赖于机器的类型:
边界对齐
堆栈(Stack)后入先出,Last In First Out
PUSH、POP指令
隐含寻址
管理堆栈:三个地址寄存器
- 堆栈指针(Stack Pointer)
- 堆栈基址(Stack Base)
- 堆栈界限(Stack Limit)
堆栈的典型应用:
- 表达式的解析
- 程序的递归嵌套
- 作为临时存储区域
- CALL指令,保存返回地址
- 调用过程时,传递参数
- 过程内的局部变量
防止堆栈操作错误:
- 堆栈大小要按需求设置得足够大。
- 用户对堆栈的压栈和弹出操作要成对进行,以防止堆栈溢出。
- 最好将系统堆栈和用户堆栈分开,以免用户破坏系统对堆栈的正常使用。
冯·诺依曼结构和哈佛结构
哈佛结构和冯诺依曼结构的主要区别就是处理器能不能实现取指令和取数据的并发进行。
经典的哈佛结构:
- 程序存储器和数据存储器是各自独立的存储器。处理器应该有两套总线,一套是程序存储器的数据和地址总线,一套是数据存储器的数据和地址总线。取指令和取数据能并发进行。
冯诺依曼结构:
- 没有程序存储空间和数据存储空间之分。处理器只有一套总线,取指令和取数据是不能同时进行的。程序进程全部在RAM中,他们之间一般是按照代码的执行顺序依次存储。由于全部在RAM中,运行速度快,所需的RAM多。
哈佛结构的优点:
- 指令存储器只读,设计、控制简单;
- 避免了数据对程序可能造成的破坏;
- 利用n位地址可以获得2个2n大小的地址空间。
寄存器组织
寄存器定义:
- 寄存器功能
- 通用寄存器(计算机字长等于通用寄存器字长)
- 专用寄存器:标志寄存器(Z , S , C , V , P , A , I , T),……
- 寄存器所属层次
- 寄存器规模(数量)
- 寄存器字长:字节的整数倍,根据:
- 运算器处理数据的长度
- 计算机字长
数据类型
数值数据
- 带符号数、无符号数
- 定点整数、定点小数
- 浮点数
- BCD数
非数值数据
- 逻辑数据(布尔值)
- 指针(地址)
- 文字:字符、字符串、汉字编码
- 图像
指令
指令的典型分类:
- 数据传送类
- 算术运算类
- 逻辑运算类
- 数据转换类
- 输入/输出类
- 系统控制类
- 程序控制类
数据传送类
完成源操作数与目的操作数之间的复制。
- 指定源和目的操作数的位置。
- 存储器
根据寻址方式,计算存储器地址:- 如果地址指的是虚拟存储器,则将虚地址转换实际存储器地 址,确定所寻找的项是否在Cache中;
- 如果不是,向存储器模块发存取命令。
- 寄存器
- 堆栈
- 存储器
- 指明将要传送数据的长度;
- 为每个操作数指定相应的寻址方式。
算术运算类
加、减、乘、除
定点有符号整数、浮点数、压缩十进制数
单操作数指令
有符号数的绝对值(Absolute)
求操作数的相反数(Negate)
递增操作数(Increment)
递减操作数(Decrement)
由ALU完成
逻辑运算类
按位运算
移位
- 逻辑右移在左端补k个0, 得到的结果是 [ 0, …, 0, Xw-1, Xw-2, …, Xk ]。
- 算术右移是在左端补k个最高有效位的值(对于有符号数中的负数,最高有效位为1,所以有符号数的正数算数右移和逻辑右移是一样的),得到的结果是[ Xw-1, …, Xw-1, Xw-1, Xw-2, …, Xk ]。这种做法看上去可能有点奇特,但是我们会发现它对有符号整数数据的运算非常有用。
循环运算
数据转换类
完成对数据格式进行转换操作
如:Intel处理器的十进制数据调整指令AAA、AAS、AAD、AAM、DAA、DAS
输入输出类
完成主机与外围设备之间的信息交换
- 输入/输出数据
- 主机向外设发控制命令
- 主机了解外设的工作状态
输入输出的方式
- 存储映射的编程控制I/O方式:统一编址
- MOV 指令
- 分立的编程控制的I/O方式:独立编址
- IN 指令
- OUT 指令
- DMA方式
- I/O处理机方式
- 通道处理机方式
系统控制类
- 通常是特权指令
- 由操作系统或系统软件使用
- 在多用户、多任务计算机系统中,必须设置特权指令
- 主要用于系统资源的分配和管理
- 检测用户的访问权限
- 修改虚拟存储器中的段表、页表
- 改变系统工作模式
- 任务的创建与切换
- ……
程序控制类
-
转移指令
- 无条件转移指令
- 条件转移指令:对设定条件进行测试,仅当条件满足时,进行转移,否则程序继续顺序执行。转移条件:
- 进位标志
- 结果为零标志
- ……
-
循环控制指令
- 可以通过条件转移指令实现循环程序设计
- 有些计算机为了提高指令系统的效率,专门设置了循环控制指令
- 循环控制指令是具有复合功能的指令
-
过程调用和返回指令
- 过程机制涉及的基本指令:
- 由目前位置转移到过程的调用指令
- 由过程返回到调用发生位置的返回指令
- 过程机制涉及的基本指令:
-
程序自中断指令
为了在程序调试中设置断点或实现系统功能调用
指令设计(重点)
指令格式
操作码字段(Opcode) | 地址码字段(Addr) |
---|---|
定长操作码、变长操作码: 扩展操作码 基于哈夫曼编码 基于特定规则 依据地址码数量 | 四地址 三地址 两地址 一地址 零地址 |
地址码设计
源操作数 | 目的操作数 | 下条指令地址 |
---|---|---|
四地址指令:op rd, rs1, rs2, ni |
- rs1 op rs2 → rd;ni 提供顺序或转移地址
三地址指令:op rd, rs1, rs2
- rs1 op rs2 → rd;PC 提供顺序地址
二地址指令:op rd, rs1
- rd op rs1 → rd;PC 提供顺序地址 或
- rs1 op ACC → rd;PC 提供顺序地址
一地址指令:op rd
- rd op ACC → ACC;PC 提供顺序地址 或
- rd 自身操作 → rd;PC 提供顺序地址 或
- 由 rd 提供转移地址
零地址指令:op
- 由操作码指定操作数(隐含寻址) 或
- 无需操作数
操作码设计
定长操作码
指令系统共N条指令,所有指令均用n位编码,
应满足:N≤2n
从2n个编码中选出N个编码,
用来表示N条指令的操作码。
优点:
操作码构造简单,硬件设计简单,译码速度快。
缺点:
操作码占存储空间大;指令规模扩充受限。
变长操作码
编码方式:对不同类型的指令操作码用不固定长度的二进制数进行编码。
原则:短码不能是长码的前缀
设计原则:
- 如果指令字长度固定,则长地址码对应短操作码,操作码长度随地址码长度缩短而增加。
- 如果指令字长度可变,则以指令使用频度作为设计依据,使用频度高的指令用短码,使用频度低的指令用长码 —— 哈夫曼(Huffman)编码原理。
- 设计总是从短操作码开始,并要保证当前使用的操作码与未来要扩展的操作码能够有效区分。
基于哈夫曼编码原理设计变长操作码
【例】某计算机有10条指令,它们的使用频率分别为
0.30、0.20、0.16、0.09、0.08、0.07、0.04、0.03、0.02、0.01。用Huffman树(最优二叉树)对它们的操作码进行编码,并计算平均代码长度。
【解】
Huffman编码不惟一:
0、1对换
合并次序
只要采用全Huffman编码,操作码的平均码长肯定是唯一的。
【例】某计算机中有20条指令的使用频度是80%,80条指令的使用频度是15%,40条指令的使用频度是5%,试设计固定长度和可变长度的编码。
【解】
(1)定长操作码:20+80+40=140 条指令,8位操作码长度。从256种编码中选出140种即可。
(2)扩展操作码:
平均操作码长度 = 5×80%+8×15%+10×5% = 5.7(位)
基于特定规则扩展操作码
-
15-15-15编码方法
(不管多少位只有15种,即除了后四位都不一样,前面所有位都一样) -
8-64-512编码方法
(采用特殊标记位,即每四位的第一位都相同,所以每四位只能表示8种)
根据地址码数量扩展操作码
【例】
【解】
三地址指令: 操作码 32 - 16 - 5 - 5 = 6位, 指令数 n3 ≤ 26-1(要给三地址至少预留一个拓展窗口,要不然前缀一样)
双地址指令: 操作码 32 - 16 - 5 = 11位,指令数 n2 ≤ (26 - n3) · 25 - 1(要给单地址至少预留一个拓展窗口,要不然前缀一样)
单地址指令: 操作码 32 - 16 = 16位,指令数 n1 ≤ ((26 - n3) · 25 - n2) · 25 - 1(要给零地址至少预留一个拓展窗口,要不然前缀一样)
零地址指令: 操作码 32位,指令数 n0 ≤ (((26 - n3) · 25 - n2) · 25 - n1) × 216(不需留扩展窗口)
指令长度设计
一般原则
- 短操作码与多地址码字段配合;长操作码与简单地址码配合。
- 指令长度一般设计为总线宽度的整数倍。
- 指令长度为存储器最小可寻址单位的整数倍。
指令长度与机器字长无固定关系。
常用设计方案
- 定长操作码,变长指令码。8086,8位定长操作码,1~5字节变长指令码。
- 变长操作码,定长指令码。
- 定长操作码,定长指令码。MIPS,6位定长操作码,32位定长指令码。
【例】假设某型号的计算机共有14条指令,各条指令的使用频率分别为:0.01、0.15、0.12、0.03、0.02、0.04、0.02、0.04、0.01、0.13、0.15、0.14、0.11、0.03。试给出定长、只能有两种码长的扩展操作码的两种编码方案,并计算各种方案的平均码长。
【解】
其操作码的平均码长:H=4(位)。
其操作码平均码长为:H= p1 × l1 + p2 × l2 + …… + pn × ln
H = (0.15+0.15+0.14+0.13+0.12+0.11) × 3 + (0.04+0.04+0.03+0.03+0.02+0.02+0.01+0.01) × 5 = 0.8×3 + 0.2×5 = 3.4(位)
基本寻址方式
寻址方式:
- 指令获取操作数的方式。
- 规定如何对地址码字段做出解释以找到所需操作数的方式;或 程序转移时找到转移地址的方式。
寻址方式设计要考虑:
- 能够有效压缩地址码字段的长度;
- 能够支持灵活的程序设计。
寻址方式在指令中的体现:
- 由操作码决定 —— 隐含寻址;
- 指令中设置寻址方式字段 —— 显式寻址。
常用寻址方式:
- 隐含寻址:Intel指令,MUL BL
- 立即寻址:操作数在指令中。
MOV R1, 80H
- 寄存器寻址:操作数在指令指定的寄存器中。
MOV CL, DL
- 直接寻址
MOV AL, [1064H]
- 间接寻址
MOV AX,
- 寄存器间接寻址
MOV AX, [SI]
- 相对寻址: EA = (PC) + A
MOV [SI+10H], AX
- 基址寻址: EA = (基址寄存器)(固定) + A(变量)
MOV [SI+10H], AX
- 变址寻址: EA = (变址寄存器)(变量) + A(固定)
MOV AX, [BX+SI+200H]
- 堆栈寻址
寻址方式示意图
【例】说明下列指令执行后R1的值。R1为16位寄存器。(小端存储)
【解】
MOV R1,#1200H: 1200H(立即寻址)
MOV R1,RB: 0100H(寄存器寻址)
MOV R1,(1200H): 4C2AH(直接寻址,此处1200H为地址)
MOV R1,(RB): 3412H(寄存器间接寻址)
MOV R1,1100H(RB): 4C2AH(累计,1100H + 0100H = 1200H)
MOV R1,(RB)(RI): 7856H(寄存器间接地址累加,0100H + 0002H = 0102H)
MOV R1,1100H(RB)(RI): 65B7H(1100H + 0100H + 0002H = 1202H)
CISC 与 RISC
指令系统结构
复杂指令集计算机结构:Complicated Instruction Set Computer Architecture
精简指令集计算机结构:Reduced Instruction Set Computer Architecture
CISC 与 RISC
CISC:Complex Instruction Set Computer,复杂指令集计算机结构
- 用一条指令代替一串指令
- 增加新的指令
- 增强指令功能,设置功能复杂的指令
- 增加寻址方式
- 增加数据表示方式
RISC:Reduced Instruction Set Computer,精简指令集计算机结构
- 只保留功能简单的指令
- 功能较复杂的指令用软件实现
- 提高流水线效率
RISC的特点:
- 指令系统简单
- 指令条数少、格式少、长度固定、功能简单
- 寻址方式少
- 采用硬布线控制逻辑(不用或少用微程序控制)
- Load/Store结构
- 只有LOAD和STORE指令可以访问存储器
- 寄存器多
- 寄存器窗口技术
- 十分重视提高流水线的执行效率
- 大部分指令可以单周期执行完成
- 延迟转移技术
- 十分强调优化编译技术的作用
指令集 | CICS | RISC |
---|---|---|
概念 | ------------ | ------------ |
特点 | ------------ | ------------ |
【例】某计算机字长16位;主存地址空间为128KB,按字编址;指令为单字长,格式如下,转移指令采用相对寻址方式,相对偏移量用补码表示,寻址方式定义如下:
⑴ 该指令系统最多可有多少条指令?该计算机最多可有多少个通用寄存器?地址寄存器MAR和存储器数据寄存器MDR至少各需多少位?
⑵ 转移指令的目标地址范围是多少?
【解】
⑴ 最多2^6 = 64条指令;最多2^3 = 8个通用寄存器;该计算机内存按字编址(一个内存地址存放两个字节),内存地址空间为128KB÷2B=64K,MAR、MDR各需16位。
⑵ 转移指令的相对偏移量(补码)为 -2^15~2……15-1,即 -32768到+32767;转移指令的目标地址范围是0000H~FFFFH。