-
计算机硬件组成
- CPU
- 运算器
- ACC (累加器) 存放 被加/减数,乘积高位,被除数运算结果
- x (操作数寄存器) 存放 加/减数 被乘数 除数
- MQ (乘商寄存器) 存放 乘数 商
- ALU (算术逻辑单元) 计算
【这个存放 结合运算那一章能更好记忆】
- 控制部分
-
IR(指令寄存器) 存放指令
-
PC(程序计数器) 存放下一条指令的地址,每次执行完自动+1
-
CU(控制单元) 通过指令给出控制信号
-
- 运算器
- 主储存器
- MDR(数据寄存器) 存放数据
- MAR(地址寄存器) 存放地址
- 储存体 由储存单元构成
- 步骤------完成a*b+c的操作(只写区别)
- pc把指令地址传到mar,+1,mar将地址传到存储体,给出指令存放到mdr,mdr将指令传到ir,ir将指令传到cu,cu分析是 取数指令 【之后这个操作以…代替】
- ir将指令的地址送到mar,mar->存储体->mdr,mdr将数传到acc
- … 乘
- acc 中的被乘数放到x ,mdr的乘数放到mq,alu运算后将结果放到acc
- … 加
- mdr中的加数放到x,alu运算后将结果放到acc
- … 停机
- 中断
- CPU
-
解释程序和编译程序
- 解释程序java python 每次执行都要解释一次(执行一次解释一次)
- 编译程序 c 第一次执行会生成一个.exe 之后每次执行只需要运行程序就可以(编译一次)
- 指令
- 微指令 -> 机器指令(二进制码) -> 汇编指令(人性化的机器指令[一一对应]) -> 高级语言
-
计算机性能
- 执行指令
- CPU主频 1s能执行多少个时钟周期
- CPI 一个指令需要多少个时钟周期
- IPS 一秒可执行的指令数量
- 执行一条指令的时间 = 时钟周期 * CPI
- 容量
- mdr的位数 * mar 的位数
- 一些细节
- 频率,速度 的 K M 底数为10[3] 大小 容量 K M 底数是2[10]
- 1B = 8b
- 执行指令
-
计算机表示
- 十进制 转 二进制 [先取的是靠近0 的那一位]
- 大于0 除基
- 小于0 乘基
- 八进制 十六进制 和 二进制的转换 二进制用3位 4位 来代表一位
- 十六进制 …H 0x…
- 二进制 …B
- 十进制 转 二进制 [先取的是靠近0 的那一位]
BCD
- 作用 机器运算规律是二进制 人熟悉十进制 BCD让两者的转换更快
- 8421码
- 四个二进制 0000-1001对应 0-9
- 超出加6(以14(1110)为例)
- 1110+ 0110 = 0001 0100 = 1 4
校验码
- 码字 多个码位构成
- 码距 两个码字差别的位数
- 10 11 码距为1 100 111 码距为
- 码距为1一无是处 码距为2 具有检错能力 码距>=3可能具有具有纠错能力
奇偶校验(统计1的个数)
- 在原码字的基础上加上一位校验码,使得1的个数为偶(偶校验)或者为奇(奇校验)
- 检验的时候使用异或 如果全部异或结果等于0 那么偶校验正确
汉明码(1位纠错)
假设码字为10111110
- 确定校验码的数目 k = 4
- 设置多位校验码,设校验码的数量是k,码字的位数为n,2k < k+n+1
- 为什么 : 一位错,错误状态为k+n个,再加上一种正确的状态
- 校验码的位置 1 2 3 4
- 1248…2n
- 分组(设校验码位P,信息位为D)
- 组数 = 校验码的个数
- 第一个组为校验位是P1 信息位为编号(从1开始)为1111 0011 0111 0101
- 每个分组中信息位的编号
- 校验位编号的二进制的1的位置是m
- 那么这个分组中包含的信息位 编号 的 二进制位 的 第m个位置 需要是 1
- 确定校验位 0101
- 对一个组中的各位做异或,使得结果为0(偶校验)来确定校验位是什么
- 检验
- 如果一个位置出错,那么这个位置所存在的组也会出错,这些组中的校验位相加正是这个位置的编号
- 图中顺序是反过来的
- 补充 海明码的两位检错需要加一个全校验位
- 循环冗余校验码(一般用来纠错)
- 方式 通过信息位对除数做模2除
- 步骤
- 首先约定一个多项式(常数不能为0)【不理解为什么非要多项式,直接将除数传过去不是更好吗】
- 根据多项式得到除数 x3+1 --> 1 * x 3 + 0 * x2+ 0 * x1 + 1 * x0–> 1001
- 将信息位除除数得到余数,把余数添到信息位后面
- 接受方得到信息后对除数做除法,如果余数不为0,则传输出现错误
- 模2除
- 最高位1 商1 最高位0 商0 然后两者做异或
- 总结
- 以后操作系统和这个还是一起学吧,忘的太快
- 上标^^ 下标~~