计算机组成原理 笔记 第一章 运算

本文概述了计算机系统的关键组成部分,包括运算器、存储器、指令系统、中央处理器、I/O设备等,介绍了冯诺依曼结构,详细讲解了运算过程、数据存储、进制转换、字符编码和浮点数运算等技术。同时,还讨论了计算机性能指标和数据存储的边界对齐等概念。
摘要由CSDN通过智能技术生成

机组笔记 第一章 运算-CSDN博客

第二章、存储器-CSDN博客

第三章、Cache高速缓冲存储器-CSDN博客

第四章:指令系统-CSDN博客

第五章上:中央处理器CPU-CSDN博客

第五章下:微程序与微指令-CSDN博客

第六章 总线-CSDN博客

第七章:I/O设备-CSDN博客

第八章:IO控制方式-CSDN博客

计算机系统:硬件+软件

硬件的发展:第一代:电子管;第二代:晶体管;第三代:中小规模集成电路;第四代:(超)大规模集成电路

冯诺依曼结构:

由五部分组成:输入输出设备(I/O设备),存储器,运算器,控制器

指令和数据以同等地位存于存储器,可按地址访问,用二进制表示

指令有操作码(加减乘除等指令)和地址码(需要操作的数据的地址)组成

以运算器为中心

此处存储器即后面的主存储器

 

存储器组成:

存储体中存储数据(0,1)

当cpu调用数据时:将地址写入MAR,MAR在存储体 找到对应数据写入MDR,CPU从MDR取走数据

写入数据:数据写入MDR,存放地址写入MAR……

 

MDR位数=存储字长

运算器组成:

控制器组成:

计算机工作过程:

(PC)->指将PC存储的值写入MAR

M(MAR)指存储器中MAR的地址对应的值

 

可见:取指令的步骤(从(pc)->MAR到OP(IR)->CU)都是相同的;不同指令的执行步骤各不相同

计算机层次结构:

如上面所说:一条二进制指令需要硬件执行多条微指令来实现(如取a至ACC进行了#1~#9九条微指令)

机器只能识别二进制指令(机器语言),汇编语言或高级语言都需要编译或解释为二进制后才能被机器识别,因此使用汇编语言以及更高级语言的机器称为虚拟机器

    虚拟计算机即是由软件实现的机器

高级语言变为机器语言有两种方式:

1、编译程序(如C,C++):先将高级语言编译为汇编语言,再用汇编程序汇编成机器语言。或者高级语言直接编译为机器语言

2、解释程序(如JS,python,shell):高级语言通过解释程序解释为机器语言

计算机性能指标:

影响CPI的因素很多,一般考虑平均CPI

主频高的CPU一定比主频低的好吗?

不一定,二者平均CPI可能不同。即使二者CPI相同也不能确定,因为二者指令系统可能不同,如A支持乘法指令;B不支持,只能通过累加实现乘法

进位进数制:

任意进制转十进制:

二进制转八/十六:三位/四位一组转换

十进制转任意进制(有的小数无法用二进制精确表示):整数:除,取余,由低到高;小数:乘,取整,由高到低

十进制转二进制:拼凑法:记住二进制每一位的权重,拼凑

分数转换

真值:只有值得二进制数   机器数:真值+符号位

BCD码:用二进制编写的十进制,用四个二进制位表示十进制

8421码:四个二进制位权值依次为8421。0~9表示为0000~1001

手动做题的策略: 先算十进制,然后用8421表示

计算机计算方法: 加0110记住就行

字符与字符串在计算机中表示:

中文的表示方式:

      区位码:将存储空间分为94个区,每个区94个位置(理解成94行94列)。如“啊”对应(16,01),十六进制表示为(10H,01H)H表示十六进制

   国标码:为了防止汉字编码与ASCII码中的控制字符冲突,每个字符加20H

   汉字机内码:为了将汉字编码与英文编码不冲突,每个字符在国标码上再加80H

   输入编码:如拼音,五笔输入法

   汉字字形码,用01将汉字用图像在16*16的区域内表示出来

字符串的存储:从高地址到底地址依次存放,最后用0000 0000(\0)作为结束标志

   多字节数据在存储时,按照各字节的排列顺序不同,分为大端模式和小端模式

奇偶校验码:

偶校验的机器实现:将二进制信息进行异或运算,得到的即为偶校验位。检验时在进行异或运算,结果为1则出错

海明校验码:看网原

信息位n位,校验位k位。

为了区分是一位错还是两位错,需添加“全校验位”对整体进行偶校验。

若一位错,改正即可。若两位错,需要重传

循环冗余校验码:看网原

定点数(小数点的位置不变,与浮点数对应)的表示:

n位无符号数的表示范围是0~(2^n)-1

    原码

                 

小数的原码:用小数点前的第一位表示正负

    补码

原码和反码的整数0有两种(+0,-0)但补码只有一种,-0会溢出。   小数0也同理

下面的两个补码没有对应的原码

负数补码转原码的一个快速方法:

从后往前0照抄,直到出现1,这个1之后的全部取反(符号位不变)

移码

将补码的符号位取反

数的真值增大,对应的移码也增大(移码全0真值最小、全1真值最大),用于比较两个数的大小

补码的作用:将减运算转变为加运算,降低硬件成本

以时钟为例:x-3=x+9,-3和9为互补关系(二者绝对值相加被除数整除)。计算机一般存储空间为8bit,一个二进制数x的补码与之就是互补关系(二者相加为1,0000,0000)。计算机会舍弃第九位的1,相当于自动进行模2^8操作。

所以-X=+[X]补

定点数的移位运算:

算术移位

反码:符号位是啥就补啥

-20x7=(-20)+(-20左移1位)+(-20左移2位)

逻辑移位

全部补0,移出全部舍弃

循环部位

左移,移出的位补到右边。右移同理

加减运算

原码:

补码:

加法直接加不管正负,减法转为加法

溢出判断:

设机器字长8位,那么只能表示-128~127。若正数+正数=负数则上溢;负数+负数=正数则下溢

符号扩展:int->long   8bit->16bit

定点数原码一位乘法:

  符号位单独处理,异或处理

  数值位取绝对值

浮点数的表示:(浮点数中的二进制位补码)

浮点数阶码的底通常为2(与科学计数法对应,十进制中以十为底,二进制以二为底)

阶码反应表示范围和小数点的实际位置

尾数的数值部分的位数反应浮点数的精度

阶码的数值部分相当于将尾数小数点向左/向右移动多少位

浮点数尾数的规格化—防止溢出(还是类比科学记数法):

若用原码:尾数的数值最高位不能是0;补码则不能是1

注意:深绿色的那个是符号位,不是数值位

上述问题中,应该将尾数算数左移一位(小数点右移一位),阶码减1。称为“左规”

右规:

浮点数标准:IEEE745标准

移码只能表示整数。阶码可以用移码表示

移码是补码符号位倒置,但移码的定义其实是“真值+偏置值(128D)”

而IEEE745标准中(float):偏置值=127D;阶码全1和全0两种情况为特殊情况

最后一步计算移码:可以直接二进制算,也可以换成十进制算,然后再转二进制

浮点数加减运算:

舍入:

C语言强制类型转换:

C语言中数值用补码表示

有符号数转无符号数:将符号位视作数值位

长整数转短整数:高位截断,保留低位

数据的存储和排列:

大端方式适合人类阅读

小端方式适合机器处理

运算器:

  

            注意:MQ中,最左边的0是符号位,不参与运算

最后将ACC最左边补的0(符号位)替换成开始的异或运算的结果

因为每次计算被乘数的一位,所以叫一位运算

定点数补码一位乘法:

原码除法运算

法一:恢复余数法:

   

  逻辑左移

 

法二:加减交替法(不恢复余数法):

开始直接减去除数发现结果是负的,所以第一位商应该是0,不恢复,直接左移。左移后减除数,是正的,说明余数大于除数,第二位是1。重复此过程。直到最后一步,若余数为0,则加回余数,商改为0。

原码补码运算:

边界对齐:

因为:每次访存只能读写一个字

所以:可见:边界对齐是一种空间换时间

 的策略,虽然浪费了一些存

        储空间,但提高了访存效率

算术逻辑单元ALU:

M=0:算术运算;M=1:逻辑运算

AB是两个四位输入

F是4位输出

异或运算天然等同于偶校验:有偶数个1,则异或结果是0

一位全加器:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值