Skip to content

Commit a986763

Browse files
committed
Update CS253 Architectures II.md
1 parent 88e25bc commit a986763

File tree

1 file changed

+120
-34
lines changed

1 file changed

+120
-34
lines changed

backup/CS253 Architectures II.md

Lines changed: 120 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@
1010

1111
**冯诺伊曼架构****Harvard架构**
1212

13-
![image-20250113150019146](https://s2.loli.net/2025/01/13/sJDwESPr8o4dnvm.png)
13+
![img](https://s2.loli.net/2025/01/13/sJDwESPr8o4dnvm.png)
1414

1515
冯诺依曼结构的处理器使用**同一个存储器, 经由同一个总线传输**
1616

1717
> 现代高性能CPU芯片在设计上包含了哈佛和冯诺依曼结构的特点。特别是, “拆分缓存”这种改进型的哈佛架构版本是很常见的。 CPU的缓存分为指令缓存和数据缓存。CPU访问缓存时使用哈佛体系结构。然而当高速缓存未命中时, 数据从主存储器中检索, 却并不分为独立的指令和数据部分, 虽然它有独立的内存控制器用于访问RAM, ROM和 (NOR )闪存。 因此, 在一些情况下可以看到冯诺依曼架构, 比如当数据和代码通过相同的内存控制器时, 这种硬件通过哈佛架构在缓存访问或至少主内存访问方面提高了执行效率。 此外, 在写非缓存区之后, CPU经常拥有写缓存使CPU可以继续执行。当指令被CPU当作数据写入, 且软件必须确保在试图执行这些刚写入的指令之前, 高速缓存 (指令和数据 )和写缓存是同步的, 这时冯诺依曼结构的内存特点就出现了。
1818
1919
#### 8086的硬件组成
2020

21-
![image-20250113154827835](https://s2.loli.net/2025/01/13/m2kdoTtbw8MYcWz.png)
21+
![img](https://s2.loli.net/2025/01/13/m2kdoTtbw8MYcWz.png)
2222

2323
**BIU: 总线接口单元**
2424
BIU发送地址, 从内存中获取指令, 并对端口和内存进行读写操作
@@ -43,11 +43,11 @@ EU包含ALU和控制电路
4343
- **complement**: 取反
4444
- **shift 16-bit binary numbers**: 移位 (16位二进制数 )
4545

46-
![image-20250113155637195](https://s2.loli.net/2025/01/13/jqoGxpcAhRwQDuS.png)
46+
![img](https://s2.loli.net/2025/01/13/jqoGxpcAhRwQDuS.png)
4747

4848
左移右移的实现方法:
4949

50-
![image-20250113160040331](https://s2.loli.net/2025/01/13/jq8DOK7XleVby6m.png)
50+
![img](https://s2.loli.net/2025/01/13/jq8DOK7XleVby6m.png)
5151

5252
---
5353

@@ -59,7 +59,7 @@ EU包含ALU和控制电路
5959

6060
8086 有 8 个通用寄存器, 可以将它们视为 8 个变量, 某些指令可以成对使用 registers, 从而提供 16 位操作, 当用作寄存器对时, 它们被赋予集体名称 AX、BX、CX、DX
6161

62-
![image-20250113160807554](https://s2.loli.net/2025/01/13/6XusCizPvyElda5.png)
62+
![img](https://s2.loli.net/2025/01/13/6XusCizPvyElda5.png)
6363

6464
**标志位寄存器**
6565

@@ -76,13 +76,13 @@ EU包含ALU和控制电路
7676
- **PF: Parity flag (奇偶校验标志)**
7777
- **CF: Carry flag (进位标志)**
7878

79-
![image-20250113164111767](https://s2.loli.net/2025/01/13/gKDLaGo7bkx8ApV.png)
79+
![img](https://s2.loli.net/2025/01/13/gKDLaGo7bkx8ApV.png)
8080

8181
#### 8086的分段内存模型
8282

8383
因为8086的寄存器只有16位, 为了让它能访问20位的地址, 需要使用CS 寄存器给出代码段地址, IP 寄存器给出偏移距离, 然后计算出指令的内存地址位置
8484

85-
![image-20250113165505161](https://s2.loli.net/2025/01/13/jVTmYHvgo5yWqn4.png)
85+
![img](https://s2.loli.net/2025/01/13/jVTmYHvgo5yWqn4.png)
8686

8787
类似的, 这些段寄存器也都是为了使用8086的分段内存模型
8888

@@ -116,15 +116,15 @@ EU包含ALU和控制电路
116116

117117
**程序结构**
118118

119-
![image-20250113174933390](https://s2.loli.net/2025/01/13/upM8tPTJZV7G6Ys.png)
119+
![img](https://s2.loli.net/2025/01/13/upM8tPTJZV7G6Ys.png)
120120

121121
**编译过程**
122122

123-
![image-20250113175235627](https://s2.loli.net/2025/01/13/KgnFof1tA2mGOVy.png)
123+
![img](https://s2.loli.net/2025/01/13/KgnFof1tA2mGOVy.png)
124124

125125
**运算符和操作数**
126126

127-
![image-20250113175349702](https://s2.loli.net/2025/01/13/xihBSNqcRGupv5V.png)
127+
![img](https://s2.loli.net/2025/01/13/xihBSNqcRGupv5V.png)
128128

129129
这里的Operand也可以称作`立即数`
130130

@@ -209,7 +209,7 @@ END
209209

210210
#### 8086 指令格式
211211

212-
![image-20250113220000605](https://s2.loli.net/2025/01/13/ENAvqQBwh7eMtfO.png)
212+
![img](https://s2.loli.net/2025/01/13/ENAvqQBwh7eMtfO.png)
213213

214214
**Byte 1: **
215215

@@ -231,7 +231,7 @@ END
231231

232232
#### 8086寻址模式
233233

234-
![image-20250113221258650](https://s2.loli.net/2025/01/13/cSqZUoIT2Of1tY4.png)
234+
![img](https://s2.loli.net/2025/01/13/cSqZUoIT2Of1tY4.png)
235235

236236
**Mod=00**: **没有偏移量**, 或者仅仅是使用寄存器进行内存间接寻址
237237

@@ -282,7 +282,7 @@ END
282282

283283
了解即可, 看不懂, 去死吧![介绍](https://goo.su/Q3MVxu)
284284

285-
![image-20250114140014523](https://s2.loli.net/2025/01/14/gFcZlVukbrEM7zt.png)
285+
![img](https://s2.loli.net/2025/01/14/gFcZlVukbrEM7zt.png)
286286

287287
**AAA (加法后的ASCII调整)**
288288
```assembly
@@ -336,7 +336,7 @@ das ; 调整AL为88h (88的压缩BCD格式)
336336

337337
#### 逻辑指令
338338

339-
![image-20250114192610412](https://s2.loli.net/2025/01/14/21jtb5mxlWLsIKk.png)
339+
![img](https://s2.loli.net/2025/01/14/21jtb5mxlWLsIKk.png)
340340

341341
| 指令 | 示例 | 含义 |
342342
| ----- | ------------------ | ------------------------------- |
@@ -352,7 +352,7 @@ das ; 调整AL为88h (88的压缩BCD格式)
352352

353353
#### 逻辑偏移
354354

355-
![image-20250114194130264](https://s2.loli.net/2025/01/17/SVDghbI2UTnLW8J.png)
355+
![img](https://s2.loli.net/2025/01/17/SVDghbI2UTnLW8J.png)
356356

357357
| 指令 | 示例 | 含义 |
358358
|------|------|------|
@@ -807,23 +807,23 @@ $\text{Value} = 0.00000000000000000000001_2 \times 2^{-126} \approx 1.4 \times 1
807807
808808
8087 是一种 **数学协处理器**, 也被称为 **浮点处理器****数字数据处理器 (Numeric Data Processor, NDP)**。 它不是一个独立的中央处理器 (CPU), 而是被设计用来与 Intel 的 8086、8088 等 CPU 一起工作, 以加速浮点运算。
809809

810-
![image-20250117下午40544444](https://s2.loli.net/2025/01/17/Nqe5dL6AnGW4b9l.png)
810+
![img](https://s2.loli.net/2025/01/17/Nqe5dL6AnGW4b9l.png)
811811

812812
**状态字组**
813813

814-
![image-20250117下午40632589](https://s2.loli.net/2025/01/17/9kFJtIMY6uq3oA7.png)
814+
![img](https://s2.loli.net/2025/01/17/9kFJtIMY6uq3oA7.png)
815815

816816
**控制字组**
817817

818-
![image-20250117下午40754970](https://s2.loli.net/2025/01/17/Morvu9qm1d6ZICk.png)
818+
![img](https://s2.loli.net/2025/01/17/Morvu9qm1d6ZICk.png)
819819

820820
****
821821

822822
8087 还自带了一个栈, 栈当中每个元素都是 10 字节, 栈始终有 8 个位置。
823823
每次压入新数据到栈当中, 栈底数据被覆盖, 就和移位运算差不多
824824
在 MASM 汇编代码当中, `ST(0)` 始终表示栈顶, `ST(1~7)` 表示栈中其他元素。
825825

826-
![image-20250117下午41054852](https://s2.loli.net/2025/01/17/cXJCY3xZ6r4gRNV.png)
826+
![img](https://s2.loli.net/2025/01/17/cXJCY3xZ6r4gRNV.png)
827827

828828
**8087 指令**
829829

@@ -912,7 +912,7 @@ END
912912

913913
`HY`在内存中的排列:
914914

915-
![image-20250118下午104917314](https://s2.loli.net/2025/01/18/UHmLhaO6S5Bqesb.png)
915+
![img](https://s2.loli.net/2025/01/18/UHmLhaO6S5Bqesb.png)
916916

917917
> 汇编的内容终于结束了 ~\(≧▽≦)/~
918918
@@ -924,13 +924,13 @@ END
924924

925925
原子和固体能级的区别:
926926

927-
![image-20250119上午111043766](https://s2.loli.net/2025/01/19/m3t47LFRE5oKbPX.png)
927+
![img](https://s2.loli.net/2025/01/19/m3t47LFRE5oKbPX.png)
928928

929929
> 在原子中, 电子围绕着原子核运动, 并占据着一定的能级。原子的能级结构则直接决定了原子的化学性质和物理性质。原子的能级结构又与能带的性质密切相关, 因此能带和原子能级是密切相关的。
930930
>
931931
> 能带是固体物质中电子能量的区间。在一个固体中, 电子不再局限于单个原子, 而是能够在整个固体中自由移动, 因此它们的能量是连续的, 可以形成一段能量区间。能带的性质则取决于原子间的相互作用、晶体结构等因素。
932932
933-
![image-20250119上午111324837](https://s2.loli.net/2025/01/19/JuPEMSqH18OAnl6.png)
933+
![img](https://s2.loli.net/2025/01/19/JuPEMSqH18OAnl6.png)
934934

935935
- 绝缘体需要大量的能量才能使电子进入导带
936936
- 导体需要很少的能量
@@ -940,33 +940,33 @@ END
940940

941941
P型硅掺入硼, 空穴导电
942942

943-
![image-20250119上午112530151](https://s2.loli.net/2025/01/19/p4xkj8gN6bMmHPV.png)
943+
![img](https://s2.loli.net/2025/01/19/p4xkj8gN6bMmHPV.png)
944944

945945
N型硅掺入磷, 电子导电
946946

947-
![image-20250119上午112610308](https://s2.loli.net/2025/01/19/JgZ4YMKTH6GRmku.png)
947+
![img](https://s2.loli.net/2025/01/19/JgZ4YMKTH6GRmku.png)
948948

949-
![image-20250119上午112837782](https://s2.loli.net/2025/01/19/2mHBKhcOuLRwJ8U.png)
949+
![img](https://s2.loli.net/2025/01/19/2mHBKhcOuLRwJ8U.png)
950950

951951
#### 二极管
952952

953953
在 P-type Silicon, N-type Silicon 硅的交汇处, 电子和空穴穿过结部移动并结合。这会产生一个称为耗尽区的非导电区域, 于是就会形成 PN 结
954954

955-
![image-20250119下午120821727](https://s2.loli.net/2025/01/19/pmWTBIUyuhcnfQE.png)
955+
![img](https://s2.loli.net/2025/01/19/pmWTBIUyuhcnfQE.png)
956956

957957
正向偏置 PN 结二极管: 正极排斥空穴, 负极吸引电子, **耗尽区消失, 电流流过电路**
958958

959-
![image-20250119下午121125800](https://s2.loli.net/2025/01/19/zNbQdSlADr8f5FW.png)
959+
![img](https://s2.loli.net/2025/01/19/zNbQdSlADr8f5FW.png)
960960

961961
反向偏置 PN 结二极管: 正极端子吸引空穴, 负极端子排斥电子, **耗尽区变大, 没有电流流过电路**
962962

963-
![image-20250119下午121943458](https://s2.loli.net/2025/01/19/KnLS6QTxwrVA4ED.png)
963+
![img](https://s2.loli.net/2025/01/19/KnLS6QTxwrVA4ED.png)
964964

965965
故电子的流动方向是 **N-type Silicon -> P-type Silicon**, 导电方向是 **P -> N**
966966

967967
**二极管的伏安曲线**
968968

969-
![image-20250119下午122254927](https://s2.loli.net/2025/01/19/A1KgNmDIkcO52WG.png)
969+
![img](https://s2.loli.net/2025/01/19/A1KgNmDIkcO52WG.png)
970970

971971
**二极管的用途**
972972

@@ -983,7 +983,7 @@ N型硅掺入磷, 电子导电
983983
- **输入**:一个小电流 (基极电流, I<sub>B</sub>)
984984
- **输出**:一个大电流(集电极电流, I<sub>C</sub>)
985985

986-
![image-20250119下午124320963](https://s2.loli.net/2025/01/19/xFAEpb9w8lIi2jU.png)
986+
![img](https://s2.loli.net/2025/01/19/xFAEpb9w8lIi2jU.png)
987987

988988
**电流增益**
989989

@@ -1013,7 +1013,7 @@ $I_C=\beta\times I_B=100\times1\text{ mA}=100\text{ mA}$
10131013

10141014
当且仅当 I<sub>A</sub> = I<sub>B</sub> = 0 时, 此时三极管相当于一个大电阻。于是电流只能流向 Output, 若 I<sub>A</sub> + I<sub>B</sub> ≠ 0, 此时输出线被短路, 电流全部流向 I<sub>E</sub>
10151015

1016-
![image-20250119下午10438068](https://s2.loli.net/2025/01/19/ZjXD8wz2sflk1mQ.png)
1016+
![img](https://s2.loli.net/2025/01/19/ZjXD8wz2sflk1mQ.png)
10171017

10181018
#### MOSFET
10191019

@@ -1024,13 +1024,13 @@ MOS FET由以下几部分组成:
10241024
- **漏极(Drain, D) **:电流的出口。
10251025
- **衬底(Body, B) **:通常是硅材料, 与源极或漏极连接。
10261026

1027-
![image-20250119下午11846623](https://s2.loli.net/2025/01/19/CvHbphekSDg5JRy.png)
1027+
![img](https://s2.loli.net/2025/01/19/CvHbphekSDg5JRy.png)
10281028

10291029
更好的例子:
10301030

10311031
如图, 以下是一个**NMOS**, 这时候我们给这个结构通电. 就会有大量的电子被吸引到这片区域, 在填充空穴的同时还会多出很多自由电子, 达成平衡后, 在这片区域的下方也会因为扩散作用产生新的耗尽层, 这个区域叫做**N沟道**, 电路就被导通了, 这个时候我们就得到了一个电压控制的开关
10321032

1033-
![image-20250119下午14846425](https://s2.loli.net/2025/01/19/H4j15LMIwV6UeWT.png)
1033+
![img](https://s2.loli.net/2025/01/19/H4j15LMIwV6UeWT.png)
10341034

10351035
这部分比较抽象了, 建议看这个[视频](https://www.bilibili.com/video/BV1nL411x7jH/)
10361036

@@ -1039,7 +1039,7 @@ MOS FET由以下几部分组成:
10391039
- 输入高电平时, NMOS 导通, PMOS 截止, 输出低电平
10401040
- 输入低电平时, PMOS 导通, NMOS 截止, 输出高电平
10411041

1042-
![image-20250119下午15738975](https://s2.loli.net/2025/01/19/xBEcbQXG4RDseWP.png)
1042+
![img](https://s2.loli.net/2025/01/19/xBEcbQXG4RDseWP.png)
10431043

10441044
#### 硅的制造
10451045

@@ -1069,3 +1069,89 @@ MOS FET由以下几部分组成:
10691069
1. **第 1 个周期**:发送地址。
10701070
2. **第 2-3 个周期**:等待内存响应和数据传输。
10711071
3. **第 4 个周期**:结束周期。
1072+
1073+
#### Z80A CPU 架构
1074+
1075+
相比 8086,Z80A 的数据总线和地址总线是分开的
1076+
1077+
![img](https://s2.loli.net/2025/01/19/PXrtv54x8d3UAD2.png)
1078+
1079+
一个 **AND 门** 作为地址解码器,当 16 个输入与设备地址匹配时输出 ****,否则输出 ****。两根控制线(绿色、紫色)指示是否对该设备进行操作
1080+
1081+
![img](https://s2.loli.net/2025/01/19/oKC2ryEbsckfAG1.jpg)
1082+
1083+
三个值(地址匹配结果和两根控制线)通过 **AND 门** 组合成一个控制信号,传递给 **三态缓冲器** (具有三种输出状态:高电平(1), 低电平(0), 高阻态(High-Z) , 三态缓冲器根据控制信号决定将输入直接传输到输出,还是切换断开连接
1084+
1085+
![img](https://s2.loli.net/2023/05/23/QC4m9yvVDl1XNYr.png)
1086+
1087+
对于输出型号,就是三态缓冲器换成了 D 触发器
1088+
1089+
![img](https://s2.loli.net/2025/01/19/5QW1Opjd7wDyT6U.jpg)
1090+
1091+
#### 汇编的 I/O
1092+
1093+
**OUT 指令**
1094+
1095+
**OUT** 指令用于将数据从 CPU 的寄存器(通常是累加器,如 `AL``AX``EAX`)写入指定的 I/O 端口。
1096+
1097+
```assembly
1098+
OUT port, acc
1099+
```
1100+
1101+
- **port**:I/O 端口地址。
1102+
- **acc**:累加器(`AL``AX``EAX`),存储要写入的数据。
1103+
1104+
**两种模式**
1105+
1106+
- **立即数模式**
1107+
端口地址直接指定为立即数(0-255),只能访问 256 个端口。
1108+
1109+
```assembly
1110+
OUT AL, 30h ; 将 AL 中的数据写入端口 30h
1111+
```
1112+
1113+
- **DX 寄存器模式**
1114+
端口地址存储在 `DX` 寄存器中,可以访问 64K 个端口(0-65535)。
1115+
1116+
```assembly
1117+
OUT DX, AX ; 将 AX 中的数据写入 DX 指定的端口
1118+
```
1119+
1120+
**IN 指令**
1121+
1122+
**IN** 指令用于从指定的 I/O 端口读取数据到 CPU 的寄存器(通常是累加器,如 `AL``AX``EAX`)。
1123+
1124+
```assembly
1125+
IN acc, port
1126+
```
1127+
1128+
- **acc**:累加器(`AL``AX``EAX`),用于存储从端口读取的数据。
1129+
- **port**:I/O 端口地址。
1130+
1131+
**两种模式**
1132+
1133+
- **立即数模式**
1134+
端口地址直接指定为立即数(0-255),只能访问 256 个端口。
1135+
1136+
```assembly
1137+
IN AL, 30h ; 从端口 30h 读取 8 位数据到 AL
1138+
```
1139+
1140+
- **DX 寄存器模式**
1141+
端口地址存储在 `DX` 寄存器中,可以访问 64K 个端口(0-65535)。
1142+
1143+
```assembly
1144+
IN AX, DX ; 从 DX 指定的端口读取 16 位数据到 AX
1145+
```
1146+
1147+
> [!NOTE]
1148+
>
1149+
> **IOPL**(I/O Privilege Level,I/O 特权级)是 x86 架构中用于控制 **I/O 端口访问权限** 的机制。它存储在 **EFLAGS 寄存器** 的第 12 和 13 位,定义了执行 I/O 指令(如 `IN``OUT`)所需的最低特权级。
1150+
>
1151+
> IOPL 是一个 2 位的值,取值范围为 0 到 3:
1152+
>
1153+
> - **当 CPL ≤ IOPL 时**:程序可以直接执行 I/O 指令(如 `IN``OUT`)。
1154+
> - **当 CPL > IOPL 时**:程序无法直接执行 I/O 指令。如果尝试执行,会触发 **一般保护异常**(General Protection Fault, #GP)。
1155+
1156+
#### 中断
1157+

0 commit comments

Comments
 (0)