第一章 绪论
1.2 计算机的软硬件组成
1.3 层次结构模型
第二章 计算机中的信息表示
2.1 数值型数据的表示
一、原码、补码、反码、移码的定义
原码
- 原码是计算机对数字的最直接的二进制表示。
- 符号位:最高位为符号位,
0表示正数,1表示负数。 - 数值位:剩余位表示数值的绝对值。
- 优点:直观,便于理解。
- 缺点:不便于进行加减运算,尤其是涉及正负数时。
例如:
- +5+5:
00000101(8位) - −5-5:
10000101(8位)
反码
- 正数的反码与原码相同。
- 负数的反码是对原码的数值位逐位取反(符号位不变)。
- 用于解决原码加减法中符号位处理的问题。
例如:
- +5+5:
00000101(反码与原码相同) - −5-5:
11111010(符号位为1,数值位取反)
补码
- 正数的补码与原码相同。
- 负数的补码是在反码的基础上加1。
- 补码广泛用于计算机内部的加减运算,因为它统一了正负数的运算规则。
例如:
- +5+5:
00000101(补码与原码相同) - −5-5:
11111011(反码11111010加1)
移码
- 移码是一种特殊的编码方式,常用于浮点数表示中的指数部分。
- 计算方式:移码 = 真值 + 偏移量(通常为 2n−12^{n-1},nn为位数)。
- 移码的好处是将所有的值都转换为非负数,方便比较大小。
例如:假设8位移码,偏移量为127:
- +5+5:真值
5,移码为127 + 5 = 132,二进制10000100。 - −5-5:真值
-5,移码为127 - 5 = 122,二进制01111010。
二、正数、负数、定点数、浮点数、小数的表示
正数与负数的表示
- 原码:符号位 + 数值位(正数符号位为0,负数符号位为1)。
- 补码:统一正负数,正数直接使用原码,负数需要补码处理。
- 反码:正数直接使用原码,负数需按反码规则处理。
三、例子说明:定点数、浮点数、小数的表示
三、总结
| 编码方式 | 正数表示 | 负数表示 | 特点 |
|---|---|---|---|
| 原码 | 符号位 + 数值位 | 符号位 + 数值位 | 直观,但不适合运算 |
| 反码 | 与原码相同 | 符号位不变,数值位逐位取反 | 改善运算规则,但仍需特殊处理加减运算 |
| 补码 | 与原码相同 | 反码 + 1 | 统一运算规则,便于硬件实现 |
| 移码 | 真值 + 偏移量 | 真值 + 偏移量 | 主要用于浮点数表示,所有值转换为非负数 |
表格对比总结
| 数值 | 表示方式 | 二进制形式 | 说明 |
|---|---|---|---|
| 5.755.75 | 定点数 | 00010111 | 小数点固定在最后 |
| 5.755.75 | 浮点数(IEEE 754) | 0 | 10000001 有错 |
| −0.625-0.625 | 定点数 | 10000010 | 符号位+数值位 |
| −0.625-0.625 | 浮点数(IEEE 754) | 1 | 01111110 有错 |
2.2 字符的表示
ASCII(American Standard Code for Information Interchange)
概念:
ASCII 是一种早期的字符编码标准,用于表示英文字符和控制符号。它为字符分配了数字编号,主要用于简化计算机和设备之间的文本交换。
特点:
- 编码范围:
- 使用 7 位二进制表示,最多表示 27=1282^7 = 128 个字符。
- 后来扩展为 8 位(ASCII 扩展码),可以表示 28=2562^8 = 256 个字符。
- 字符集:
- 包括控制字符(如回车、换行等)和可打印字符(如字母、数字、标点符号)。
- 例如:
- 字母 A:编码为
65,二进制为01000001。 - 空格:编码为
32,二进制为00100000。
- 字母 A:编码为
局限性:
- 仅支持英文和部分特殊符号,不适用于多语言环境。
UNICODE(统一码/万国码)
概念:
Unicode 是一种全球通用的字符编码标准,旨在为每种语言的每个字符分配唯一的编码,以实现多语言文本的统一表示和交换。
特点:
- 编码范围:
- 支持超过 140,000 个字符,覆盖大多数书写系统,包括字母、数字、符号、汉字等。
- 每个字符分配一个唯一的编号(码点),形式为
U++ 十六进制数字。例如:- 大写字母 A:
U+0041。 - 中文“中”:
U+4E2D。
- 大写字母 A:
- 编码形式:
- Unicode 定义了字符,但没有规定存储形式,常见的实现方式包括:
- UTF-8:可变长编码,每个字符用 1 至 4 个字节表示,向后兼容 ASCII。
- UTF-16:每个字符用 2 或 4 个字节表示。
- UTF-32:每个字符固定用 4 个字节表示。
- Unicode 定义了字符,但没有规定存储形式,常见的实现方式包括:
- 兼容性:
- UTF-8 被广泛应用于网络传输和文件存储,因其高效且兼容 ASCII。
汉字编码
背景:
汉字因数量庞大且复杂,需要特殊的编码方式。早期 ASCII 不支持汉字,后来发展出多种编码方案以支持汉字输入、显示和存储。
主要编码方式:
GB2312(1980年,简体中文)
- 编码范围:包含 6,763 个常用汉字和符号。
- 每个汉字占用 2 个字节。
- 适用于简体中文环境。
GBK(1995年,扩展编码)
- 向下兼容 GB2312,并扩展支持繁体字和更多汉字。
- 共支持 21,886 个字符。
GB18030(2000年,国家标准)
- 进一步扩展,覆盖 Unicode 中的所有汉字。
- 向下兼容 GBK 和 GB2312。
- 汉字可用 2 至 4 个字节表示。
Big5(繁体中文)
- 流行于台湾和香港,支持 13,053 个字符。
UTF-8(国际通用)
- Unicode 的实现形式之一,汉字编码为 3 个字节。
- 例如:
- 汉字“中”:Unicode 码点
U+4E2D,UTF-8 编码为E4 B8 AD。
- 汉字“中”:Unicode 码点
总结对比
| 编码方式 | 特点 | 应用范围 |
|---|---|---|
| ASCII | 仅支持英文字符,使用 7 或 8 位编码 | 英文文本 |
| Unicode | 全球字符统一编码,支持多语言,常见 UTF-8、UTF-16 实现 | 全球通用 |
| 汉字编码 | 适应中文的特殊编码方式,如 GB2312、GBK、GB18030、UTF-8 | 简体中文、繁体中文和国际化 |
2.3 指令信息的表示
1. 指令格式
指令格式指的是计算机指令的结构,定义了指令中的各个字段及其位置,通常包括操作码(Opcode)和操作数(Operand)等部分。
常见指令格式包括:
操作码(Opcode):
- 指示计算机应执行的操作类型,如加法、减法、跳转等。
- 例如:加法指令
ADD、存储指令MOV。
操作数(Operand):
- 指令的操作对象,可以是寄存器、内存地址或立即数(常数值)。
- 例如:在
MOV AX, 5指令中,AX和5是操作数。
地址模式字段(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. 指令类型
在计算机架构中,指令类型通常可以根据其功能和作用进行分类。指令类型包括:
数据处理指令(Data Processing Instructions)
- 功能:进行算术、逻辑、位操作等处理。
- 例子:
- 加法:
ADD,SUB(加法、减法) - 位操作:
AND,OR,XOR(与、或、异或)
- 加法:
数据传送指令(Data Transfer Instructions)
- 功能:将数据从一个位置传送到另一个位置。
- 例子:
MOV: 将数据从一个寄存器或内存位置传送到另一个寄存器或内存位置。PUSH,POP: 将数据压入或从栈中弹出。
控制转移指令(Control Transfer Instructions)
- 功能:控制程序的执行流,如跳转、分支。
- 例子:
JMP: 无条件跳转。CALL: 调用子程序。RET: 从子程序返回。
条件分支指令(Conditional Branch Instructions)
- 功能:根据条件执行跳转,通常与标志位相关。
- 例子:
JZ: 如果零标志位为 1,则跳转(Zero Flag)。JNZ: 如果零标志位为 0,则跳转(Non-Zero Flag)。
输入/输出指令(I/O Instructions)
- 功能:处理外部设备的数据输入和输出。
- 例子:
IN: 从端口输入数据。OUT: 输出数据到端口。
中断指令(Interrupt Instructions)
- 功能:控制中断的触发和响应。
- 例子:
INT: 触发中断。IRET: 从中断返回。
寄存器控制指令(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 指令格式举例
Intel x86 指令格式:
- x86 指令格式具有多种变体,通常以操作码为主,并支持多种寻址方式,指令长度不固定。
- 例如,指令
MOV AX, BX(将BX的值复制到AX中),其中MOV是操作码,AX和BX是操作数。
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]]