计组
概述
CPI:表示执行一条指令所需的时钟周期数。
对于一个程序或一台机器来说,其CPI指该程序或该机器指令集中的所有指令执行所需的平均时钟周期数,此时,CPI是一个平均值。
程序总时钟周期数=程序所含指令条数*CPI。如果有n种不同指令,程序总时钟周期数=
执行时间=时钟周期数*时钟周期=时钟周期数/时钟频率
数据的机器级表示
定点表示
1.定点整数
2.定点小数
浮点数表示
定点数编码表示
定点数编码表示方式:原码、补码、反码和移码。
原码=符号位+数值位
补码可以实现加减运算的统一,即用加法来实现减法运算。
实数的表示(计算机中专门用浮点数来表示实数)
数符(1位)+阶码(1~7)+位数(8~31) 👈IEEE754浮点数标准
阶码:移码/补码
尾数:原码/补码
教材上将指数的移码表示称为阶码。为什么用移码表示指数?因为指数可以是正数,也可以是负数,当进行浮点数加减计算时,必须先对阶(比较两个数的阶的大小并使之相等)。
规格化
为什么要规格化?浮点数尾数的位数决定浮点数的有效位数,有效位数越多,数据精度越高。要尽可能保留有效数字的位数,使有效数字尽量占满尾数数位。
尾数用原码表示,第一位总是1,因而可以忽略第一位的1,称为隐藏位。
隐藏小数点后第一位0 1、1 0
定点数运算
补码加减法
以及判断溢出方法
原码乘法
下图是手算乘法
下图是原码乘法
因为[Y]原=1.10111,所以Y0从低位开取,分别是1,1,1,0,1。(或者说C里面存的原来渐渐被挤掉的[Y]原的低位)
如果Y0=0,不用加[X]原,因为这一位0与[X]原一定等于0,0*任何数=0。
补码乘法
乘数 y 首先在末尾添加一个辅助位 0 ,每次讨论都是取 y 的最后两位,但每次移动仅移动一位。
判断 y 的最后两位是规则如下:
- 00 或者 11 时,直接右移一位;
- 01 时,先加 x 的补,然后右移一位;
- 10 时,先加 -x 的补,然后右移一位。
参考资料
[计算机组成原理] Booth算法 —— 补码一位乘法 - 中年二班 - 博客园 (cnblogs.com)
关于双符号位
1.溢出检测:双符号位能够容易地检查加、减运算中的溢出情况。
2.符号表示:双符号位还用于表示数值的符号。例如,00表示正号,11表示负号。
3.上溢与下溢的判别:上溢发生在两个同符号的数相加(或相异符号数相减)时,运算结果超出所能表示的数据范围。
这里题目[X]原=1.01001,负数从原来的1.变成11.。
数据校验码
概念
数据在计算机内部进行计算、存取和传送过程中,由于元器件故障或噪音干扰等原因会出现差错。
冗余校验思想:除原数据信息外,还增加若干位编码,这些新增的代码称为校验位。
两个合法代码对应位上编码不同的位数称为码距,又称海明距离。
任意两个码字的海明距离的最小值称为该编码集的海明距离。
检查纠错位数 | 码距 |
---|---|
检e位 | d>=e+1 |
纠e位 | d>=2e+1 |
纠e1位、检e2位 | d>=2*e1+e2+1 |
奇偶校验码
通过增加冗余位使得码字中1的个数恒为奇数或偶数的编码方法,是一种检错码。
码距=2
海明校验码
将有效信息按某种规律分成若干组,每组安排一个校验位,做奇偶测试,就能提供多位检错信息,以指出最大可能是哪位出错,从而将其纠正。实质上,海明校验是一种多重校验。
规则:
- 如果故障字各位都是0,无故障。
- 如果故障字有且仅有一位1,校验位有一位错了,不用纠正。
- 如果故障字有多位1,数据位出错,由故障字数值确定出错位,然后取反就可以纠错。
下图为校验位数的确定
下图为分组方式(n=8、k=4)
由表可知,每个数据位至少要参与两组奇偶校验码的生成。如M5与第一组(P1)和第四组(P4)有关。
循环冗余校验码(CRC码)
M(x)为n位二进制数据,将M(x)左移k位,用约定的生成多项式G(x)相除(G(x)是一个k+1位的二进制数),相除得到的k位余数就是校验位。
检验:如果接收到的数据和校验码位用同样的生成多项式G(x)相除,若正好除尽,没有错误;除不尽,有错误。
二进制的计算(补充)
求CRC码
CRC码检错例题
CRC码出错模式
(n=11,k=4为例)余数右加0再除多项式二进制取余数
加法器
笔记
下图为1位全加器逻辑电路图
下图为n位串行进位加法器
下图为并行进位全加器FA1~FA4的逻辑电路图
总结
串行进位加法器
并行进位加法器(两种)
- 组内并行组间串行
- 组内并行组间并行
延迟时间:组内并行组间并行<组内并行组间串行<串行进位加法器
复杂程度:组内并行组间并行>组内并行组间串行>串行进位加法器
原码除法运算
手算除法运算
(以定点小数为例,被除数绝对值必须小于输出绝对值)
恢复余数除法
(若ri<0,部分余数+除数,恢复余数)
补充:例题的符号位由0,1异或得出1
不恢复余数除法
上面两题答案一样
浮点数运算
浮点数加减法运算
浮点数乘法运算
指令系统
指令系统设计
固定长度操作码编码
可变长度操作码编码
寻址方式
操作类型
算术和逻辑运算指令
移位指令
传送指令
串指令
顺序控制指令
CPU控制指令
输入输出指令
指令系统
按照指令格式复杂度来分
MIPS
MIPS指令格式和寻址方式
习题
单周期处理器设计
11条指令
总体结构
ALU(书P155...)和取指令部件
ALU(略写)参考书P155
PC=xxx...x00(30个x+2个0)
PC+4:意味着指向下一个指针
软工
数据流图设计原则
1.父图与子图的平衡原则
2.数据守恒原则
3.守恒加工原则
参考大佬文章 我的软考之路(八)——三大原则学会数据流图-腾讯云开发者社区-腾讯云 (tencent.com)
数据字典
例题:某电话可以拨分机号和外线号码。分机号是从7201至7299。外线号先拨9,然后是市话号码或长话号码。长话号码是以区号和市话号码组成。区号是从100到300中任意的数字串。市话号码是以局号和分局号组成。局号可以是455、466、888、552中任意一个号码。分局号是任意长度为4的数字串。要求:写出在数据字典中,电话号码的数据条目的定义(即组成)。
电话号码=分机号|外线号码
分机号=[7201|7202|7203|…|7297|7298|7299]
外线号=9+[市话号码|长话号码]
长话号码=区号+市话号码
区号=[100|101|102|…|298|299|300]
市话号码=局号+分局号
局号=[455|466|888|552]
分局号=4{数字}4
数字=[0|1|2|3|4|5|6|7|8|9]
成本/效益分析(经济可行性研究)
假设开发某个计算机应用系统的投资额为3000元,该计算机应用系统投入使用后,每年可以节约1000元,5年内能节约5000元。3000元是现在投资的钱,5000元是5年内节省的钱,假定年利率为12%,请计算该系统的纯收入,投资回收期,投资回收率。
数据流图
例
自学考试报名过程中有个“记录报名单”的加工。该加工主要是根据报名表(姓名、性别、身份证号、课程名)和开考课程(课程名、开考时间)、经校核,编号、填写、输出准考证给报名者,同时记录到考生名册中(准考证号、姓名、课程)。请绘制该加工的DFD图,并写出数据词典中的数据流条目。
操作系统
实验
1
利用C语言5个常用库函数和汇编语言的常用5个系统调用分别编写一段程序,使用的函数和系统调用不限,完成的功能也不限。
用gets、strcmp、strcpy、strlen和printf共5个库函数完成3个字符串比较,并求最大的一个字符串长度,输出最大字符串及其长度。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n=3;//自定义字符串个数为3
char str[20];//定义str存最大字符串
char s[n][20];//定义s存3个字符串
int len;
for(int i=0;i<n;i++)
{
gets(s[i]);//输入
}
//初始默认第一个字符串为最大字符串
strcpy(str,s[0]);
//从第二个字符串遍历 若该串比str大 更新str
for(int i=1;i<n;i++)
{
if(strcmp(s[i],str)>0)
strcpy(str,s[i]);
}
len=strlen(str);
printf("最大字符串是%s,它的长度为%d",str,len);
return 0;
}