第一章 绪论

1.2 计算机的软硬件组成

1.3 层次结构模型

第二章 计算机中的信息表示

2.1 数值型数据的表示

一、原码、补码、反码、移码的定义

  1. 原码

    • 原码是计算机对数字的最直接的二进制表示。
    • 符号位:最高位为符号位,0表示正数,1表示负数。
    • 数值位:剩余位表示数值的绝对值。
    • 优点:直观,便于理解。
    • 缺点:不便于进行加减运算,尤其是涉及正负数时。

    例如:

    • +5+5:00000101 (8位)
    • −5-5:10000101 (8位)
  2. 反码

    • 正数的反码与原码相同。
    • 负数的反码是对原码的数值位逐位取反(符号位不变)。
    • 用于解决原码加减法中符号位处理的问题。

    例如:

    • +5+5:00000101 (反码与原码相同)
    • −5-5:11111010 (符号位为1,数值位取反)
  3. 补码

    • 正数的补码与原码相同。
    • 负数的补码是在反码的基础上加1。
    • 补码广泛用于计算机内部的加减运算,因为它统一了正负数的运算规则。

    例如:

    • +5+5:00000101 (补码与原码相同)
    • −5-5:11111011 (反码11111010加1)
  4. 移码

    • 移码是一种特殊的编码方式,常用于浮点数表示中的指数部分。
    • 计算方式:移码 = 真值 + 偏移量(通常为 2n−12^{n-1},nn为位数)。
    • 移码的好处是将所有的值都转换为非负数,方便比较大小。

    例如:假设8位移码,偏移量为127:

    • +5+5:真值5,移码为127 + 5 = 132,二进制10000100。
    • −5-5:真值-5,移码为127 - 5 = 122,二进制01111010。

二、正数、负数、定点数、浮点数、小数的表示

  1. 正数与负数的表示

    • 原码:符号位 + 数值位(正数符号位为0,负数符号位为1)。
    • 补码:统一正负数,正数直接使用原码,负数需要补码处理。
    • 反码:正数直接使用原码,负数需按反码规则处理。

三、例子说明:定点数、浮点数、小数的表示

三、总结

编码方式正数表示负数表示特点
原码符号位 + 数值位符号位 + 数值位直观,但不适合运算
反码与原码相同符号位不变,数值位逐位取反改善运算规则,但仍需特殊处理加减运算
补码与原码相同反码 + 1统一运算规则,便于硬件实现
移码真值 + 偏移量真值 + 偏移量主要用于浮点数表示,所有值转换为非负数

表格对比总结

数值表示方式二进制形式说明
5.755.75定点数00010111小数点固定在最后
5.755.75浮点数(IEEE 754)010000001 有错
−0.625-0.625定点数10000010符号位+数值位
−0.625-0.625浮点数(IEEE 754)101111110 有错

2.2 字符的表示

ASCII(American Standard Code for Information Interchange)

概念:

ASCII 是一种早期的字符编码标准,用于表示英文字符和控制符号。它为字符分配了数字编号,主要用于简化计算机和设备之间的文本交换。

特点:

  1. 编码范围:
    • 使用 7 位二进制表示,最多表示 27=1282^7 = 128 个字符。
    • 后来扩展为 8 位(ASCII 扩展码),可以表示 28=2562^8 = 256 个字符。
  2. 字符集:
    • 包括控制字符(如回车、换行等)和可打印字符(如字母、数字、标点符号)。
    • 例如:
      • 字母 A:编码为 65,二进制为 01000001。
      • 空格:编码为 32,二进制为 00100000。

局限性:

  • 仅支持英文和部分特殊符号,不适用于多语言环境。

UNICODE(统一码/万国码)

概念:

Unicode 是一种全球通用的字符编码标准,旨在为每种语言的每个字符分配唯一的编码,以实现多语言文本的统一表示和交换。

特点:

  1. 编码范围:
    • 支持超过 140,000 个字符,覆盖大多数书写系统,包括字母、数字、符号、汉字等。
    • 每个字符分配一个唯一的编号(码点),形式为 U+ + 十六进制数字。例如:
      • 大写字母 A:U+0041。
      • 中文“中”:U+4E2D。
  2. 编码形式:
    • Unicode 定义了字符,但没有规定存储形式,常见的实现方式包括:
      • UTF-8:可变长编码,每个字符用 1 至 4 个字节表示,向后兼容 ASCII。
      • UTF-16:每个字符用 2 或 4 个字节表示。
      • UTF-32:每个字符固定用 4 个字节表示。
  3. 兼容性:
    • UTF-8 被广泛应用于网络传输和文件存储,因其高效且兼容 ASCII。

汉字编码

背景:

汉字因数量庞大且复杂,需要特殊的编码方式。早期 ASCII 不支持汉字,后来发展出多种编码方案以支持汉字输入、显示和存储。

主要编码方式:

  1. GB2312(1980年,简体中文)

    • 编码范围:包含 6,763 个常用汉字和符号。
    • 每个汉字占用 2 个字节。
    • 适用于简体中文环境。
  2. GBK(1995年,扩展编码)

    • 向下兼容 GB2312,并扩展支持繁体字和更多汉字。
    • 共支持 21,886 个字符。
  3. GB18030(2000年,国家标准)

    • 进一步扩展,覆盖 Unicode 中的所有汉字。
    • 向下兼容 GBK 和 GB2312。
    • 汉字可用 2 至 4 个字节表示。
  4. Big5(繁体中文)

    • 流行于台湾和香港,支持 13,053 个字符。
  5. UTF-8(国际通用)

    • Unicode 的实现形式之一,汉字编码为 3 个字节。
    • 例如:
      • 汉字“中”:Unicode 码点 U+4E2D,UTF-8 编码为 E4 B8 AD。

总结对比

编码方式特点应用范围
ASCII仅支持英文字符,使用 7 或 8 位编码英文文本
Unicode全球字符统一编码,支持多语言,常见 UTF-8、UTF-16 实现全球通用
汉字编码适应中文的特殊编码方式,如 GB2312、GBK、GB18030、UTF-8简体中文、繁体中文和国际化

2.3 指令信息的表示

1. 指令格式

指令格式指的是计算机指令的结构,定义了指令中的各个字段及其位置,通常包括操作码(Opcode)和操作数(Operand)等部分。

常见指令格式包括:

  1. 操作码(Opcode):

    • 指示计算机应执行的操作类型,如加法、减法、跳转等。
    • 例如:加法指令 ADD、存储指令 MOV。
  2. 操作数(Operand):

    • 指令的操作对象,可以是寄存器、内存地址或立即数(常数值)。
    • 例如:在 MOV AX, 5 指令中,AX 和 5 是操作数。
  3. 地址模式字段(Addressing Mode):

    • 指明操作数的获取方式(即如何计算操作数的地址)。

常见的指令格式类型:

  • 单操作数指令:只有一个操作数,例如 NEG AX(取反寄存器 AX 的值)。
  • 双操作数指令:有两个操作数,例如 ADD AX, BX(将寄存器 BX 的值加到 AX 中)。
  • 三操作数指令:例如 MUL AX, BX, CX(将 AX、BX、CX 的值相乘)。

2. 常用寻址方式

寻址方式决定了如何从内存或寄存器中访问操作数。常见的寻址方式包括:

1. 直接寻址(Direct Addressing)

  • 操作数的地址直接在指令中给出。
  • 例子:MOV AX, [1234h],表示从内存地址 1234h 处获取数据并存入寄存器 AX。

2. 间接寻址(Indirect Addressing)

  • 操作数的地址由寄存器中的值提供。
  • 例子:MOV AX, [BX],表示从寄存器 BX 指定的内存地址中获取数据并存入寄存器 AX。

3. 寄存器寻址(Register Addressing)

  • 操作数位于寄存器中,指令中直接指定寄存器。
  • 例子:MOV AX, BX,表示将寄存器 BX 的值传送到寄存器 AX。

4. 立即寻址(Immediate Addressing)

  • 操作数是一个常数,直接在指令中给出。
  • 例子:MOV AX, 5,表示将常数 5 传送到寄存器 AX。

5. 基址寻址(Base Addressing)

  • 操作数的地址由基址寄存器(如 BX)和偏移量(如 1234h)组合得出。
  • 例子:MOV AX, [BX + 1234h],表示从 BX + 1234h 地址处获取数据。

6. 变址寻址(Indexed Addressing)

  • 操作数的地址由变址寄存器(如 SI)和一个常数偏移量组成。
  • 例子:MOV AX, [SI + 5],表示从 SI + 5 地址处获取数据。

7. 相对寻址(Relative Addressing)

  • 地址是当前指令位置加上一个偏移量。
  • 常用于跳转指令(如跳转或分支指令)。
  • 例子:JMP 5,表示跳转到当前位置 + 5 的地方。

8. 堆栈寻址(Stack Addressing)

  • 操作数从栈中获取或存储到栈中,通常与堆栈指针(如 SP)相关。
  • 例子:PUSH AX,将寄存器 AX 的值压入栈中。

总结表

寻址方式描述例子
直接寻址操作数的地址直接给出MOV AX, [1234h]
间接寻址操作数的地址由寄存器中的值提供MOV AX, [BX]
寄存器寻址操作数在寄存器中MOV AX, BX
立即寻址操作数是常数,直接给出MOV AX, 5
基址寻址操作数地址由基址寄存器和偏移量组合得出MOV AX, [BX + 1234h]
变址寻址操作数地址由变址寄存器和偏移量组合得出MOV AX, [SI + 5]
相对寻址地址是当前位置加上偏移量,常用于跳转指令JMP 5
堆栈寻址操作数从栈中取或存储到栈中PUSH AX

3. 指令类型

在计算机架构中,指令类型通常可以根据其功能和作用进行分类。指令类型包括:

  1. 数据处理指令(Data Processing Instructions)

    • 功能:进行算术、逻辑、位操作等处理。
    • 例子:
      • 加法:ADD, SUB(加法、减法)
      • 位操作:AND, OR, XOR(与、或、异或)
  2. 数据传送指令(Data Transfer Instructions)

    • 功能:将数据从一个位置传送到另一个位置。
    • 例子:
      • MOV: 将数据从一个寄存器或内存位置传送到另一个寄存器或内存位置。
      • PUSH, POP: 将数据压入或从栈中弹出。
  3. 控制转移指令(Control Transfer Instructions)

    • 功能:控制程序的执行流,如跳转、分支。
    • 例子:
      • JMP: 无条件跳转。
      • CALL: 调用子程序。
      • RET: 从子程序返回。
  4. 条件分支指令(Conditional Branch Instructions)

    • 功能:根据条件执行跳转,通常与标志位相关。
    • 例子:
      • JZ: 如果零标志位为 1,则跳转(Zero Flag)。
      • JNZ: 如果零标志位为 0,则跳转(Non-Zero Flag)。
  5. 输入/输出指令(I/O Instructions)

    • 功能:处理外部设备的数据输入和输出。
    • 例子:
      • IN: 从端口输入数据。
      • OUT: 输出数据到端口。
  6. 中断指令(Interrupt Instructions)

    • 功能:控制中断的触发和响应。
    • 例子:
      • INT: 触发中断。
      • IRET: 从中断返回。
  7. 寄存器控制指令(Register Control Instructions)

    • 功能:操作寄存器,控制寄存器状态或转移数据。
    • 例子:
      • NOP: 无操作指令,用于时间延迟等。
      • CLC: 清除进位标志。

4. 典型 CPU 指令格式

在典型的CPU中,指令的格式通常由操作码(Opcode)和操作数(Operands)组成。以下是常见的指令格式设计模式:

1. 操作码 + 操作数格式(Most Common)

  • 操作码(Opcode):指定执行的操作,如加法、减法等。
  • 操作数(Operands):指定操作的对象,可以是寄存器、内存地址、常量等。
字段说明位数
操作码执行的操作指令(如加法、减法等)。通常 6-10 位
操作数1第一个操作数(如寄存器或内存地址)。通常 5-10 位
操作数2第二个操作数(如果需要)。可选,通常 5-10 位
寻址方式字段指定如何获取操作数(寄存器、内存等)。可选,通常 5-6 位
标志位(可选)用于处理条件跳转等操作。可选

2. 典型 CPU 指令格式举例

  1. Intel x86 指令格式:

    • x86 指令格式具有多种变体,通常以操作码为主,并支持多种寻址方式,指令长度不固定。
    • 例如,指令 MOV AX, BX(将 BX 的值复制到 AX 中),其中 MOV 是操作码,AX 和 BX 是操作数。
  2. RISC 架构(如 SPARC):

    • RISC 架构采用固定长度的指令格式,通常每条指令的长度为 32 位。
    • 例如,SPARC 使用的是三种主要格式:R 型(寄存器型)、I 型(立即数型)、J 型(跳转型)。

5. Pentium II 架构的指令格式

Pentium II 是基于 x86 架构的微处理器,使用复杂的指令集(CISC)。它的指令格式通常包括以下部分:

  • 操作码(Opcode):指定要执行的操作。
  • 寻址方式(Addressing Mode):确定操作数的地址是直接给出的、寄存器、内存还是立即数。
  • 操作数(Operand):被操作的对象,可以是寄存器、内存地址或常量。
  • 扩展位:Pentium II 还支持一些特殊的指令扩展,如 MMX 和 SSE 指令集。

例如,指令 MOV AX, [BX + 4]:

  • MOV 是操作码。
  • [BX + 4] 是寻址方式,指示从 BX 寄存器加上 4 的内存地址中获取数据。
  • AX 是目标寄存器。

Pentium II 特有的指令扩展:

  • MMX 指令集:专门用于多媒体和图形处理,支持并行处理多数据(SIMD)。
  • SSE 指令集:支持浮点数运算和数据流处理,提供更高效的向量计算能力。

6. SPARC 架构的指令格式

SPARC(Scalable Processor Architecture)是一种基于 RISC 的处理器架构。SPARC 的指令格式相对简单且固定,通常为 32 位,并且具有三种主要格式:R 型(寄存器型)、I 型(立即数型)、J 型(跳转型)。

SPARC 指令格式:

字段描述长度(位)
操作码(Opcode)指定操作类型(如加法、减法等)6
寄存器1第一个操作数寄存器(源操作数)5
寄存器2第二个操作数寄存器(源操作数)5
寄存器3第三个操作数寄存器(目的寄存器)5
立即数如果是立即数寻址模式,提供常量值13

例子:

  • ADD R1, R2, R3:将寄存器 R2 和 R3 的值相加,结果存入寄存器 R1。

    • 操作码:ADD
    • 寄存器1(R1):存储结果的寄存器
    • 寄存器2(R2):第一个源操作数
    • 寄存器3(R3):第二个源操作数
  • LD [R1 + 4], R2:将内存中地址为 R1 + 4 的值加载到寄存器 R2。

    • 操作码:LD
    • 寄存器1(R1):基地址寄存器
    • 寄存器2(R2):目标寄存器(加载数据)

总结

  • 指令类型:根据功能不同,CPU 指令可分为数据处理指令、数据传送指令、控制转移指令等。
  • 典型 CPU 指令格式:包括操作码、操作数、寻址方式等部分,通常具有固定长度或可变长度。
  • Pentium II:基于 x86 架构,支持 CISC 指令,指令格式较复杂,支持扩展指令集(如 MMX、SSE)。
  • SPARC:基于 RISC 架构,指令格式简洁,固定长度,采用寄存器和立即数寻址,指令集简单高效。

第三章 微体系结构层

3.1 CPU的组成和功能(理解)

3.2 ALU和运算方法(掌握)

  • ALU部件
  • 定点运算加减乘除
  • 浮点运算加减
  • 十进制加减运算

1. 定点数的加减法与溢出判断

![[resouces/定点数除法.png]]

2. 定点数的移位

逻辑移位,循环移位,算术移位 逻辑移位、循环移位和算术移位是三种常见的位移操作,它们分别对二进制数据进行不同方式的移动和填充。

  • 逻辑移位(Logical Shift):逻辑移位通过将二进制数的位向左或向右移动,空出的位用零填充。左移时,二进制数的值会变大(相当于乘以 2),右移时,二进制数的值会变小(相当于除以 2)。逻辑移位不考虑符号位,因此适用于无符号整数的操作。

  • 循环移位(Circular Shift):循环移位是指在移位操作中,超出边界的位会回绕到另一端。例如,左循环移位时,移出左边的位会被放到右边的空位中,右循环移位时,移出右边的位会被放到左边的空位中。循环移位常用于加密算法和某些哈希算法中。

  • 算术移位(Arithmetic Shift):算术移位与逻辑移位类似,但它在右移时会保留符号位,即对于负数,右移时,符号位(最高位)会填充到空位,而不是零。这样保证了符号的正确性。左移时,算术移位与逻辑移位相同。算术移位常用于有符号整数的操作,尤其是涉及负数的情形。

总结来说,逻辑移位适用于无符号数,算术移位用于有符号数,循环移位则会将移出的位“回绕”到另一端。

3.3 CPU模型机的组成及数据通路(理解)

3.4 组合逻辑控制器原理(掌握)

3.5 微程序控制器原理(理解)

3.6 精简指令集计算机RISC(理解)

第四章 指令系统层

4.1 8086CPU

4.2 8086 CPU 的寄存器和主存

4.3 8086 CPU 指令系统

寻址方式

![[resouces/Pasted image 20241207145434.png]] ![[resouces/Pasted image 20241207145446.png]] ![[resouces/Pasted image 20241207145500.png]] ![[resouces/Pasted image 20241207145557.png]] ![[resouces/Pasted image 20241207145710.png]] ![[resouces/Pasted image 20241207145721.png]]![[resouces/Pasted image 20241207145740.png]] ![[resouces/Pasted image 20241207145807.png]] ![[resouces/Pasted image 20241207145828.png]] ![[resouces/Pasted image 20241207145844.png]] ![[resouces/Pasted image 20241207145912.png]] ![[resouces/Pasted image 20241207145949.png]] ![[resouces/Pasted image 20241207150001.png]] ![[resouces/Pasted image 20241207145323.png]]

指令的操作类型