跳至正文
wyaaaattwhoAI RESEARCH & ENGINEERING
← 返回首页

计算机系统与二进制编码

计算机系统概述

计算架构分为通用计算架构(RISC-V)以及专用计算架构,我们着重讲解通用计算架构

冯·诺依曼结构计算机

💡
冯诺依曼结构思想:存储程序(Stored- program)工作方式,即任何工作都先按照程序(指令序列)的形式存放起来,计算机启动后自动读取依次执行。
最经典的IAS计算机(1951)就采用的冯诺依曼结构
notion image
💡
有一个主存(M),有一个读取指令的部件(PC),有运算单元(AC),有将数据输入的部分(PCU),有输入输出(IO)

冯诺依曼计算机模型结构与信息流

notion image
💡
冯诺依曼结构思想总结:
  1. 计算器由运算器,控制器,存储器,输入和输出组成
    1. 存储器存储指令和数据,根据具体场景判定类别(指令集)
    2. 控制器能够读取指令来执行
    3. 运算器能进行基本的四则运算以及逻辑运算(完备性)
  1. 内部以二进制表示指令与数据
    1. 指令:操作码(OP)+地址码(addr)。前者说明类型,后者指明操作数地址
  1. 采用“存储程序”工作方式

现代计算机系统

💡
重要‼️
notion image
CU:control unit 控制器
PC:program counter 程序计数器 :保存了要执行的下一条指令的地址。因此,PC指向存放了下一条指令的存储单元。
IR:instruction register 指令寄存器:存放最近从存储器中读出的指令,也就是当前正在执行的指令。
ALU:arithmetic and logic unit 算术逻辑单元
GPRs:general purpose register set 通用寄存器组——存储数据与结果
FLAG:EFLAGS register 状态标志寄存器——存储,返回输出异常给控制器
MM:main memory 主存
MAR:memory address register 存储器地址寄存器:保存了读或者写操作正在访问的存储单元的地址,MAR的位数与地址线相同
MDR:memory data register 存储器数据寄存器——port for data transition:保存了刚从存储器中读出的数据,或将写人存储器的数据,MDR与数据线的地址相同

程序表示与执行过程

  • 程序在执行前 数据和指令事先存放在存储器中,每条指令和每个数据都有地址,指令按序存放,指令由OP、addr字段组成,程序起始地址在PC(原材料和菜谱都放在厨房外的架子上,每个架子有编号。从第5个架上指定菜谱开始做)
  • 开始执行程序 第一步:根据PC取指令(从5号架上取菜谱)
    • 第二步:指令译码——读取OP与addr(看菜谱)
      第三步:取操作数——根据addr,由CU控制经MDR读取(从架上或盘中取原材料)
      第四步:指令执行——ALU执行(洗、切、炒等具体操作)
      第五步:回写结果(装盘或直接送桌)
      第六步:修改PC的值——自加(算出下一菜谱所在架子号6=5+1)
      继续执行下一条指令(继续做下一道菜)
  • 过程举例
    • 💡
      假设八位定长指令字,4个GPR,16个主存单元
      指令格式有两种:R型与M型
      格式
      4位
      2位
      2位
      功能说明
      R型
      OP
      rt
      rs
      R[rt]←R[rt] OP R[rs] 或者R[rt]←R[rs]
      M型
      OP
      addr
      addr
      R[0]←M[addr] 或者 M[addr]←R[0]
      rs和rt为通用寄存器编号;addr为主存单元地址(rs表示register source,rt为register target) R型:Op=0000,寄存器间传送(mov);Op=0001,加(add),两个寄存器相加并送入结果所在内存单元 M型:Op=1110,取数(load ),从主存取到GPR;Op=1111,存数(store),从GPR写入主存
      notion image
      notion image
      notion image
      notion image
      notion image
      notion image
      Q&A
      Q:ADD指令只能在GPRs上使用吗
      A:ADD指令通常是用于在计算机体系结构中执行加法操作的指令。在许多指令集体系结构(Instruction Set Architectures, ISA)中,ADD指令可以用于通用寄存器(General Purpose Registers, GPRs)之间的操作,但并非总是如此。
      不同的计算机体系结构有不同的指令集设计,其中一些可能限制ADD指令的操作数为通用寄存器,而另一些可能允许在其他寄存器或内存位置上执行加法操作。因此,并非所有的ADD指令都仅限于GPRs。
      Q:M型指令为什么只能对M[0]操作(load)
      A:在某些RISC架构中,可能存在一种特定类型的指令,称为"Load"(加载)或"M型指令",专门用于从内存中加载数据到寄存器中。
      在某些RISC体系结构中,"M型指令"可能被设计成只能操作内存中的特定地址,例如M[0]。这种设计的目的可能是简化硬件实现,提高指令执行的效率,或者符合特定的应用场景。
      💡
      总结
      • 程序启动前,指令和数据都存放在存储器中,形式上没有差别,都是0/1序列
      • 采用”存储程序“工作方式:
        • 程序电指令组成,程序被启动后,计算机能自动取出一条一条指令执行,在执行过程中无需人的干预。
      • 指令执行过程中,指令和数据被从存储器取到CPU,存放在CPU内的寄存器中,指令在IR中,数据在GPR中。
      指令中需给出的信息:
      操作性质(操作码)
      源操作数1或/和 源操作数2(立即数、寄存器编号、存储地址)

指令集体系结构

  • ISA指 Instruction Set Architecture
  • ISA是一种规约(Specification),它规定了如何使用硬件
    • 可执行的指令的集合,包括指令格式、操作种类以及每种操作对应的操作数的相应规定;
    • 指令可以接受的操作数的类型;
    • 操作数所能存放的寄存器组的结构,包括每个寄存器的名称、编号、长度和用途;
    • 操作数所能存放的存储空间的大小和编址方式;
    • 操作数在存储空间存放时按照大端还是小端方式存放;
    • 指令获取操作数的方式,即寻址方式;
    • 指令执行过程的控制方式,包括程序计数器,条件码定义等;
  • ISA是一个不可缺少的抽象层
    • 没有的话软件无法使用硬件
    • 通用计算机必有指令集

计算机系统中的软件

  • System software(系统软件)-简化编程,并使硬件资源被有效利用
    • 操作系统(Operating System):硬件资源管理,用户接口
    • 语言处理系统:翻译程序+Linker, Debug, etc..
    • 翻译程序(Translator)有三类:
      • 汇编程序(Assembler):汇编语言源程序一机器目标程序
        编译程序(Complier):高级语言源程序一汇编/机器目标程序
        解释程序(Interpreter):将高级语言语句逐条翻译成机器指令并立即执行,不生成目标文件。
    • 其他实用程序
  • Application software(应用软件)-解决具体应用问题/完成具体应用

机器级语言与高级编程语言

翻译程序

汇编将汇:编翻译为机器语言,编译:将高级语言翻译为汇编或机器,解释:将原语言程序按顺序逐条翻译成机器指令并立即执行

计算机系统抽象层

硬件与软件的接口:指令系统
notion image

二进制数的表示

计算机的数据

数据的抽象层次转化

notion image
notion image
💡
整数:定点运算指令
浮点数:浮点运算类型
二进制编码的十进制数:BCD运算指令

信息的二进制编码

  • 计算机内部所有信息都用二进制(即:0和1)进行编码
  • 机器级数据分两大类:
    • 数值数据:无符号整数、带符号整数、浮点数(实数)、十进制数
    • 非数值数据:逻辑数(包括位串)、西文字符和汉字
  • 真值和机器数
    • 机器数:用0和1编码的计算机内部的0/1序列
    • 真值:机器数真正的值,即:现实中带正负号的数
  • 用二进制编码的原因:
    • 制造二个稳定态的物理器件容易
    • 二进制编码、计数、运算规则简单
    • 正好与逻辑命题对应,便于逻辑运算,并可方便地用逻辑电路实现算术运算

不同进制

notion image
notion image
八进制和十六进制与二进制的转换更加简单
我们尝试用以下方法实现进制的转化 实际上可以这样:
notion image
notion image

数值数据的编码表示

数值数据的表示方法

  • 数值数据表示的三要素
    • 规制:进位计数制
    • 规格:定、浮点表示
    • 编码:如何用二进制编码
    • 即:要确定一个数值数据的值必须先确定这三个要素。
      例如,机器数 01011001的值是多少?答案是:不知道!
  • 定点数表示法
    • 指定有效数字序列中的某两位之间是小数点位如1234.56
    • 指定在有效数字最右边表示整数,定点整数
    • 指定在有效数字最左边表示小数,定点小数
    • 定点表示法的编码(定点数编码)
      • 增加符号位,解决有符号数表示问题
  • 浮点数表示法
    • 不固定小数点位,数值采用科学计数法表示:f*re 1.23456 *103
    • 浮点表示法
      • r是进位计数制的基,缺省
      • f和e都可以用定点表示法记录
具体应用:
整数:定点表示法,定点整数(整型类:int, long, unsigned)
实数(浮点数):定点整数 定点小数(浮点类:float, double)
  • 定点数的编码
    • 定点整数编码
      • 原码
      • 补码
      • 反码
      • 移码
    • 定点小数编码
      • 原码
  • 真值与机器数
    • 机器数:用0和1编码的计算机内部的0/1序列(编码)
    • 真值:机器数真正的值,即:现实中带正负号的数(数值)
  • 原码表示法
    • notion image
  • 补码表示法
    • 有符号位后面跟真值的模补码构成
    • 定义为 X补码 = + X
    • 从五十年代开始,整数一律采用补码,浮点数的尾码采用原码定点小数
      notion image
      表示范围是
      📌
      变形补码
      双符号位表示,左边是真正的符号位,右边判断是否溢出,又称为“模-4补码”
      满足
      缺陷:与真值关系不直接
      💡
      补码特性——模运算
      notion image
      等于可以省去减法器,只需要加法器
      notion image
      notion image
      notion image
      真值与补码的转化
      notion image
      notion image
      notion image
  • 移码表示法:便于浮点数加减时候的对阶操作
    • notion image
    • 总结
      • notion image

整数的编码表示

  • 无符号整数
    • 机器中字的位排列顺序有两种方式:(例:32位字:0..010112)
      • 高到低位从左到右:0000 0000 0000 0000 0000 0000 0000 1011←此为LSB
      • 高到低位从右到左:1101 0000 0000 0000 0000 0000 0000 0000←此为MSB
      • Leftmost和rightmost这两个词有歧义,故用LSB(Least Significant Bit)来表示最低有效位,用MSB来表示最高有效位
      • 高位到低位多采用从左往右排列
    • 一般在全部是正数运算具不出现负值结果的场合下,可使用无符号数表示。例如,地址运算,编号表示,等等
    • 无符号数的编码中没有符号位
    • 能表示的最大值大于位数相同的带符号整数的最大值(Why?)
      • 例如,8位无符号整数最大是255(1111 1111) 而8位带符号整数最大为127(0111 1111)
    • 总是整数,所以很多时候就简称为“无符号数”
  • 带符号整数
    • 计算机必须能处理正数(positive) 和负数(negative),MSB表示数符
    • 有三种定点编码方式
      • Signed magnitude(原码)现用来表示浮点(实)数的尾数
      • One's complement(反码)现已不用于表示数值数据
      • Two' s complement(补码)50年代以来,所有计算机都用补码来表示定点整数
    • 为什么用补码表示带符号整数?
      • 补码运算系统是模运算系统,加、减运算统一
      • 数0的表示唯一,方便使用
      • 比原码和反码多表示一个最小负数
      • 与移码相比,其符号位和真值的符号对应关系清楚
  • C语言中的整数
    • 无符号数:unsigned int(short / long);带符号整数:int(short / long)
    • 常在一个数的后面加一个“u”或“U”表示无符号数
    • 若同时有无符号和带符号整数,则C编译器将带符号整数强制转换为无符号数
      • 不按真值转换,只是转换机器编码(理解方式)
    • 假定以下关系表达式在32位用补码表示的机器上执行,结果是什么?
    • notion image

浮点数的编码表示

  • 科学计数法与浮点数
    • notion image
  • 浮点数的表示范围
    • notion image
  • 浮点数表示多样化
    • notion image
      📌
      规格化数:尾数的最高数位不为0而为1
  • IEEE 754 Standard
    • notion image
      例题
      notion image
      notion image
    • 0的表示
      • notion image
    • 无穷的表示
      • notion image
    • 非数的表示
      • notion image
    • 非规格化数
      • notion image
        notion image
    • 关于IEEE 754的问题
      • What's the range of representable values? The largest number for single: How about double?
      • What about following type converting:
        • How about FP add associative(加法结合律)? FALSE!
          • notion image
      • 例题
        • notion image
          double可以涵盖int和float,但int与float又无法互相覆盖的部分
      • 浮点数的舍入
        • notion image
    💡
    总结
    notion image

    BCD编码表示十进制

    • 编码思想:每个十进数位至少需要4位二进制表示。而4位二进制位可组合成16种编码,去掉10种编码后还有6种冗余编码
    • 编码方案: 1. 十进制有权码:每个十进制数字的4个二进制位(称为基2码)都有确定的权。8421码是最常用的十进制有权码。也称自然BCD(NBCD)码
      • 💡
        举例
        假设我们要表示十进制数字7254。首先,我们将每个十进制数字转换为其对应的4位二进制数,然后将它们连接在一起。
        1. 将7转换为NBCD码:7的二进制表示是0111,所以NBCD码为0111。
        1. 将2转换为NBCD码:2的二进制表示是0010,所以NBCD码为0010。
        1. 将5转换为NBCD码:5的二进制表示是0101,所以NBCD码为0101。
        1. 将4转换为NBCD码:4的二进制表示是0100,所以NBCD码为0100。
        最后,将它们连接在一起,得到7254的NBCD码为:0111 0010 0101 0100。
        2. 十进制无权码:每个十进制数位的4个基2码没有确定的权。用的较多的是余3码和格雷码
      • 余3码方案:由8421码加上0011形成。当两个十进制数字之和是10时,其二进制编码的值正好是16,而且0和9,1和8,⋯5和4的余3码互为反码。
      • 格雷码(Gray Code) 方案:任意两个相邻的编码只有一位二进位不同。 格雷码有多种编码形式。
    • 3.其他编码方案(5中取2码.独热码等)
    📌
    关于溢出
    判断方法:
    1. 人工数值计算
    1. 人工补码计算:同符号数运算变符号则溢出
    1. 变形补码(模4补码)计算
    1. 若符号位进位与最高数值位进位不相同,则溢出

    非数值数据的储存与排列

    非数值数据的表示

    逻辑数据

    • 表示
      • 用一位表示。例如,真:1/假:0
      • N位二进制数可表示N个逻辑数据,或一个位串
    • 运算
      • 按位进行
      • 如:按位与/按位或/逻辑左移丿逻辑右移 等
    • 识别
      • 逻辑数据和数值数据在形式上并无差别,也是一串0/1序列,机器靠指令来认定。
    • 位串
      • 用来表示若干个状态位或控制位(OS中使用较多)
    例如,x86的标志寄存器含义如下:
    notion image

    西文的储存

    采用的字符集,有一套完整的编码方式

    中文的储存

    • 特点:{字符集,编码方案,字形}
      • 汉字是表意文字,一个字就是一个方块图形。
      • 盜写婺優「交字离豁更精鍋主產線予产集支精盐穴部的表示、汉字的传
    • 编码形式,有以下几种汉字代码:
      • 输入码:对汉字用相应按键进行编码表示,用于输入
      • 内码:用于在系统中进行存储、查找、传送等处理
      • 字模点阵码或轮廓描述:描述汉字字模的点阵或轮廓,用于输出
    问题:西文字符有没有输入码?有没有内码?有没有字模点阵或轮廓描述?
    A:西文没有输入码,因为字母可以放在键盘上

    数据的储存排列

    数据的宽度

    • 比特(bit):是计算机中处理、存储、传输信息的最小单位
    • 字节(byte):8个二进位,基本存储单位,也称“位组“
      • 现代计算机中,存储器按字节编址
      • 字节是最小可寻址单位(addressable unit)
      • 如果以字节为一个排列单位,则LSB表示最低有效字节,MSB表示最高有效字节
    • 字(word):基本的信息处理单元 IA-32中的“字” 有多少位?字长多少位呢? DWORD:32位 QWORD:64位
    • “字”和“字长”的概念不同
      • “字长”指定点运算数据通路的宽度 (数据通路指CPU内部数据流经的路径以及路径上的部件,主要是CPU内部进行数据运算、存储和传送的部件,这些部件的宽度基本上要一致,才能相互匹配。因此,”字长”等于CPU内部定点运算部件的位数、通用寄存器的宽度等。)
      • “字”表示被处理信息的单位,用来度量数据类型的宽度
      • 字和字长的宽度可以一样,也可不同。 例如,x86体系结构定义“字”的宽度为16位,但从386开始字长就是32位了。

    数据度量单位

    notion image
    程序中的数据宽度:
    notion image

    数据的储存与排列顺序

    • 80年代开始,几乎所有通用机器都用字节编址
    • ISA设计时要考虑的两个问题:
      • 如何根据一个地址取到一个32位的字?-字的存放问题
      • 一个字能否存放在任何地址边界?-字的边界对齐问题
      • 例如,若inti =-65535,存放在内存100号单元(即占100#~103#),则用“取数”指令访问 100号单元取出i时,必须清楚i的4个字节是如何存放的。
      • 注
        notion image
        notion image
        💡
        大小端
        大端方式(Big Endian):MSB所在的地址是数的地址。e.g.IBM 360/370, Motorola 68k, MIPS, Sparc, HP PA 小端方式(Little Endian):LSB所在的地址是数的地址。e.g. Intel 80x86, DEC VAX 有些机器两种方式都支持,可通过特定控制位来设定采用哪种方式。
        由此引出字节传递的问题
        notion image

        总结

        notion image