笔记 2024/10/9

计组

概述

CPI:表示执行一条指令所需的时钟周期数

对于一个程序或一台机器来说,其CPI指该程序或该机器指令集中的所有指令执行所需的平均时钟周期数,此时,CPI是一个平均值

程序总时钟周期数=程序所含指令条数*CPI。如果有n种不同指令,程序总时钟周期数=\sum_{i=1}^{n}(CPIi*Ci)

执行时间=时钟周期数*时钟周期=时钟周期数/时钟频率

数据的机器级表示

定点表示

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

海明校验码

将有效信息按某种规律分成若干组,每组安排一个校验位,做奇偶测试,就能提供多位检错信息,以指出最大可能是哪位出错,从而将其纠正。实质上,海明校验是一种多重校验。

规则:

  1. 如果故障字各位都是0,无故障。
  2. 如果故障字有且仅有一位1,校验位有一位错了,不用纠正。
  3. 如果故障字有多位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的逻辑电路图

总结

串行进位加法器

并行进位加法器(两种)

  1. ​ 组内并行组间串行
  2. ​ 组内并行组间并行

延迟时间:组内并行组间并行<组内并行组间串行<串行进位加法器

复杂程度:组内并行组间并行>组内并行组间串行>串行进位加法器

原码除法运算

手算除法运算

(以定点小数为例,被除数绝对值必须小于输出绝对值)

恢复余数除法

(若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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值