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: 总线接口单元**
2424BIU发送地址, 从内存中获取指令, 并对端口和内存进行读写操作
@@ -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
60608086 有 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
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
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
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
8088088087 是一种 ** 数学协处理器** , 也被称为 ** 浮点处理器** 或 ** 数字数据处理器 (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
8228228087 还自带了一个栈, 栈当中每个元素都是 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
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
941941P型硅掺入硼, 空穴导电
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
945945N型硅掺入磷, 电子导电
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由以下几部分组成:
106910691 . ** 第 1 个周期** :发送地址。
107010702 . ** 第 2-3 个周期** :等待内存响应和数据传输。
107110713 . ** 第 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