<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Principles of Computer Composition on farmer3-c Blog</title><link>https://farmer3-c.github.io/tags/principles-of-computer-composition/</link><description>Recent content in Principles of Computer Composition on farmer3-c Blog</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Wed, 03 Sep 2025 18:17:48 +0800</lastBuildDate><atom:link href="https://farmer3-c.github.io/tags/principles-of-computer-composition/index.xml" rel="self" type="application/rss+xml"/><item><title>总线系统</title><link>https://farmer3-c.github.io/posts/principles-of-computer-composition/bus/</link><pubDate>Wed, 03 Sep 2025 18:17:48 +0800</pubDate><guid>https://farmer3-c.github.io/posts/principles-of-computer-composition/bus/</guid><description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;总线的概念和结构形态&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=""&gt;总线的基本概念&lt;/a&gt;&lt;br&gt;
总线是一组公共的传输线，用于连接计算机的各个部件（CPU、内存、I/O设备），实现信息共享和交换。总线由数据总线（传输数据）、地址总线（传输地址）和控制总线（传输控制信号）三部分组成。总线按时序可分为同步总线（有时钟信号）和异步总线（握手信号）。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;总线的连接方式&lt;/a&gt;&lt;br&gt;
常见连接方式：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;单总线结构&lt;/strong&gt;：所有部件都连接到同一总线，简单但可能成为瓶颈（如早期IBM PC）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;双总线结构&lt;/strong&gt;：CPU与主存之间有一条高速内存总线，其他设备通过I/O总线与CPU通信（如南北桥架构）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多总线结构&lt;/strong&gt;：现代计算机使用多层次总线（如PCIe、DMI、QPI等）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;总线的内部结构&lt;/a&gt;&lt;br&gt;
总线内部包括：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;数据线&lt;/strong&gt;：宽度决定一次传输的位数（如32位、64位）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;地址线&lt;/strong&gt;：宽度决定可寻址空间。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;控制线&lt;/strong&gt;：包括读写信号、中断请求、总线请求/允许、时钟等。
此外还有电源线和地线。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;总线结构实例&lt;/a&gt;&lt;br&gt;
经典PC总线结构：CPU通过前端总线（FSB）连接北桥（内存控制器、AGP/PCIe），北桥连接南桥（PCI、ISA、USB、IDE等）。现代CPU集成内存控制器和PCIe控制器，芯片组简化为单芯片（PCH）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;总线接口&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=""&gt;信息传送方式&lt;/a&gt;&lt;br&gt;
信息传送方式包括：并行（多位同时传输）和串行（逐位传输）。串行总线（如USB、PCIe）使用差分信号，距离长、速率高、引脚少。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;总线接口的基本概念&lt;/a&gt;&lt;br&gt;
总线接口（或称适配器、控制器）是连接设备与总线的逻辑电路。它负责数据缓冲、协议转换、电平转换、中断处理等。接口必须满足总线规定的电气和时序规范。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;总线仲裁&lt;/a&gt;&lt;br&gt;
当多个设备请求使用总线时，仲裁器决定哪个设备获得总线控制权。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=""&gt;集中式仲裁&lt;/a&gt;&lt;br&gt;
一个中央总线仲裁器（常位于CPU或北桥）负责判决。常见方式：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;链式查询&lt;/strong&gt;：通过一条总线请求线，优先级由物理位置决定（离仲裁器越近优先级越高）。简单但速度慢，且优先级固定。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;计数器定时查询&lt;/strong&gt;：仲裁器发计数值，设备匹配地址则获得总线。优先级可改变。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;独立请求方式&lt;/strong&gt;：每个设备有独立的请求线和允许线，仲裁器并行处理。速度快，但连线多（如PCI）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;分布式仲裁&lt;/a&gt;&lt;br&gt;
没有中央仲裁器，每个设备都有仲裁逻辑，通过共享的仲裁总线竞争。例如，SCSI总线使用分布式仲裁。优点是无单点故障。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;总线的定时和数据传送模式&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=""&gt;总线的定时&lt;/a&gt;&lt;br&gt;
定时决定什么时候发送地址和数据：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;同步定时&lt;/strong&gt;：使用统一时钟，所有操作在时钟边沿发生。简单但所有设备需以相同频率工作。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;异步定时&lt;/strong&gt;：基于握手信号（请求、应答）。允许不同速度的设备共存，但控制稍复杂。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;总线数据传送模式&lt;/a&gt;&lt;br&gt;
常见传送模式：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;读/写周期&lt;/strong&gt;：主设备发送地址和控制信号，从设备返回数据或接收数据。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;突发传送&lt;/strong&gt;：一次地址后连续传送多个数据（如SDRAM突发模式），提高吞吐量。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;块传送&lt;/strong&gt;：类似于突发。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分裂传送&lt;/strong&gt;：主设备请求后释放总线，从设备准备好后再重新申请，提高了总线利用率。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;PCI总线和PCIe总线&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=""&gt;多总线结构&lt;/a&gt;&lt;br&gt;
PCI（外设组件互连）是一种并行总线，工作频率33/66MHz，32/64位宽度，带宽最高约533MB/s。PCIe（PCI Express）是高速串行总线，采用点对点连接和交换结构，替代了PCI和AGP。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;PCI总线信号&lt;/a&gt;&lt;br&gt;
PCI总线信号包括：地址/数据复用线（AD[31:0]）、控制信号（FRAME#, IRDY#, TRDY#）、仲裁信号（REQ#, GNT#）、错误报告（PERR#, SERR#）、中断信号等。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;PCI总线周期类型&lt;/a&gt;&lt;br&gt;
总线周期包括：配置周期（读写配置空间）、I/O周期、内存周期、特殊周期等。配置周期用于系统初始化时枚举设备。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;PCI总线周期操作&lt;/a&gt;&lt;br&gt;
一次PCI传输包含地址阶段（FRAME#有效，AD线上放地址）和数据阶段（IRDY#和TRDY#握手续传数据）。突发传输时地址只发一次，后续数据连续传送。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;PCI总线仲裁&lt;/a&gt;&lt;br&gt;
PCI总线使用集中式仲裁，每个主设备有独立的REQ#和GNT#线，仲裁器位于北桥或南桥。仲裁算法可以是轮询、优先级等。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;PCIe总线&lt;/a&gt;&lt;br&gt;
PCIe（PCI Express）采用高速串行差分信号（LANE），每个LANE发送速率从2.5GT/s（Gen1）到32GT/s（Gen5）及以上。支持x1、x2、x4、x8、x16、x32链路宽度。采用点对点交换结构，每个设备独享带宽。事务层使用数据包（TLP，事务层包）传递请求和完成。支持热插拔、电源管理、虚拟化等先进特性。PCIe已成为现代计算机的主流扩展总线，用于显卡、SSD、网卡等。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><content:encoded><![CDATA[<ul>
<li>
<p><a href="">总线的概念和结构形态</a></p>
<ul>
<li><a href="">总线的基本概念</a><br>
总线是一组公共的传输线，用于连接计算机的各个部件（CPU、内存、I/O设备），实现信息共享和交换。总线由数据总线（传输数据）、地址总线（传输地址）和控制总线（传输控制信号）三部分组成。总线按时序可分为同步总线（有时钟信号）和异步总线（握手信号）。</li>
<li><a href="">总线的连接方式</a><br>
常见连接方式：
<ul>
<li><strong>单总线结构</strong>：所有部件都连接到同一总线，简单但可能成为瓶颈（如早期IBM PC）。</li>
<li><strong>双总线结构</strong>：CPU与主存之间有一条高速内存总线，其他设备通过I/O总线与CPU通信（如南北桥架构）。</li>
<li><strong>多总线结构</strong>：现代计算机使用多层次总线（如PCIe、DMI、QPI等）。</li>
</ul>
</li>
<li><a href="">总线的内部结构</a><br>
总线内部包括：
<ul>
<li><strong>数据线</strong>：宽度决定一次传输的位数（如32位、64位）。</li>
<li><strong>地址线</strong>：宽度决定可寻址空间。</li>
<li><strong>控制线</strong>：包括读写信号、中断请求、总线请求/允许、时钟等。
此外还有电源线和地线。</li>
</ul>
</li>
<li><a href="">总线结构实例</a><br>
经典PC总线结构：CPU通过前端总线（FSB）连接北桥（内存控制器、AGP/PCIe），北桥连接南桥（PCI、ISA、USB、IDE等）。现代CPU集成内存控制器和PCIe控制器，芯片组简化为单芯片（PCH）。</li>
</ul>
</li>
<li>
<p><a href="">总线接口</a></p>
<ul>
<li><a href="">信息传送方式</a><br>
信息传送方式包括：并行（多位同时传输）和串行（逐位传输）。串行总线（如USB、PCIe）使用差分信号，距离长、速率高、引脚少。</li>
<li><a href="">总线接口的基本概念</a><br>
总线接口（或称适配器、控制器）是连接设备与总线的逻辑电路。它负责数据缓冲、协议转换、电平转换、中断处理等。接口必须满足总线规定的电气和时序规范。</li>
</ul>
</li>
<li>
<p><a href="">总线仲裁</a><br>
当多个设备请求使用总线时，仲裁器决定哪个设备获得总线控制权。</p>
<ul>
<li><a href="">集中式仲裁</a><br>
一个中央总线仲裁器（常位于CPU或北桥）负责判决。常见方式：
<ul>
<li><strong>链式查询</strong>：通过一条总线请求线，优先级由物理位置决定（离仲裁器越近优先级越高）。简单但速度慢，且优先级固定。</li>
<li><strong>计数器定时查询</strong>：仲裁器发计数值，设备匹配地址则获得总线。优先级可改变。</li>
<li><strong>独立请求方式</strong>：每个设备有独立的请求线和允许线，仲裁器并行处理。速度快，但连线多（如PCI）。</li>
</ul>
</li>
<li><a href="">分布式仲裁</a><br>
没有中央仲裁器，每个设备都有仲裁逻辑，通过共享的仲裁总线竞争。例如，SCSI总线使用分布式仲裁。优点是无单点故障。</li>
</ul>
</li>
<li>
<p><a href="">总线的定时和数据传送模式</a></p>
<ul>
<li><a href="">总线的定时</a><br>
定时决定什么时候发送地址和数据：
<ul>
<li><strong>同步定时</strong>：使用统一时钟，所有操作在时钟边沿发生。简单但所有设备需以相同频率工作。</li>
<li><strong>异步定时</strong>：基于握手信号（请求、应答）。允许不同速度的设备共存，但控制稍复杂。</li>
</ul>
</li>
<li><a href="">总线数据传送模式</a><br>
常见传送模式：
<ul>
<li><strong>读/写周期</strong>：主设备发送地址和控制信号，从设备返回数据或接收数据。</li>
<li><strong>突发传送</strong>：一次地址后连续传送多个数据（如SDRAM突发模式），提高吞吐量。</li>
<li><strong>块传送</strong>：类似于突发。</li>
<li><strong>分裂传送</strong>：主设备请求后释放总线，从设备准备好后再重新申请，提高了总线利用率。</li>
</ul>
</li>
</ul>
</li>
<li>
<p><a href="">PCI总线和PCIe总线</a></p>
<ul>
<li><a href="">多总线结构</a><br>
PCI（外设组件互连）是一种并行总线，工作频率33/66MHz，32/64位宽度，带宽最高约533MB/s。PCIe（PCI Express）是高速串行总线，采用点对点连接和交换结构，替代了PCI和AGP。</li>
<li><a href="">PCI总线信号</a><br>
PCI总线信号包括：地址/数据复用线（AD[31:0]）、控制信号（FRAME#, IRDY#, TRDY#）、仲裁信号（REQ#, GNT#）、错误报告（PERR#, SERR#）、中断信号等。</li>
<li><a href="">PCI总线周期类型</a><br>
总线周期包括：配置周期（读写配置空间）、I/O周期、内存周期、特殊周期等。配置周期用于系统初始化时枚举设备。</li>
<li><a href="">PCI总线周期操作</a><br>
一次PCI传输包含地址阶段（FRAME#有效，AD线上放地址）和数据阶段（IRDY#和TRDY#握手续传数据）。突发传输时地址只发一次，后续数据连续传送。</li>
<li><a href="">PCI总线仲裁</a><br>
PCI总线使用集中式仲裁，每个主设备有独立的REQ#和GNT#线，仲裁器位于北桥或南桥。仲裁算法可以是轮询、优先级等。</li>
<li><a href="">PCIe总线</a><br>
PCIe（PCI Express）采用高速串行差分信号（LANE），每个LANE发送速率从2.5GT/s（Gen1）到32GT/s（Gen5）及以上。支持x1、x2、x4、x8、x16、x32链路宽度。采用点对点交换结构，每个设备独享带宽。事务层使用数据包（TLP，事务层包）传递请求和完成。支持热插拔、电源管理、虚拟化等先进特性。PCIe已成为现代计算机的主流扩展总线，用于显卡、SSD、网卡等。</li>
</ul>
</li>
</ul>
]]></content:encoded></item><item><title>中央处理器</title><link>https://farmer3-c.github.io/posts/principles-of-computer-composition/cpu/</link><pubDate>Wed, 03 Sep 2025 18:17:38 +0800</pubDate><guid>https://farmer3-c.github.io/posts/principles-of-computer-composition/cpu/</guid><description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;CPU的功能和组成&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=""&gt;CPU的功能&lt;/a&gt;&lt;br&gt;
CPU是计算机的核心部件，其基本功能包括：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;指令控制&lt;/strong&gt;：从存储器取出指令，译码并执行。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;操作控制&lt;/strong&gt;：产生微操作信号，驱动各部件执行指令。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;时间控制&lt;/strong&gt;：为每条指令提供时序节拍。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据加工&lt;/strong&gt;：通过ALU对数据进行算术/逻辑运算。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;中断处理&lt;/strong&gt;：响应外部/内部中断，切换进程。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;CPU的基本组成&lt;/a&gt;&lt;br&gt;
CPU主要由运算器、控制器、寄存器组和内部总线组成。控制器包括程序计数器（PC）、指令寄存器（IR）、指令译码器、时序产生器和控制逻辑（微程序或硬布线）。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;CPU中的主要寄存器&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;程序计数器（PC）&lt;/strong&gt;：存放下一条指令的地址。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;指令寄存器（IR）&lt;/strong&gt;：存放当前正在执行的指令。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;累加器（ACC）&lt;/strong&gt;：存放中间运算结果。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;状态寄存器（PSW/Flag）&lt;/strong&gt;：存放条件标志（C、Z、N、V）和中断允许等状态。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;通用寄存器（R0-Rn）&lt;/strong&gt;：存放操作数和地址。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;堆栈指针（SP）&lt;/strong&gt;：指向栈顶地址。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;基址/变址寄存器&lt;/strong&gt;：支持多种寻址方式。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;操作控制器与时序产生器&lt;/a&gt;&lt;br&gt;
操作控制器产生微操作命令序列，分为微程序控制器（存储微指令）和硬布线控制器（组合逻辑）。时序产生器提供时钟信号和节拍信号，控制指令的执行步骤。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;指令周期&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=""&gt;指令周期的基本概念&lt;/a&gt;&lt;br&gt;
指令周期是指CPU从取指令、译码到执行完一条指令所花的时间。一个指令周期通常包含取指周期（取指令）、间址周期（若需取操作数地址）、执行周期、中断周期（若响应中断）。每个周期又由若干时钟周期（T周期）组成。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;MOV指令的指令周期&lt;/a&gt;&lt;br&gt;
MOV指令（寄存器间或立即数传送）的指令周期：取指→译码→执行（传送数据）。执行周期只需一个时钟周期（寄存器间）。若MOV涉及内存，则需内存读/写周期。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;LAD指令的指令周期&lt;/a&gt;&lt;br&gt;
LAD（LOAD）从内存读数据到寄存器：取指→译码→计算地址→读内存→写寄存器。执行周期包括地址计算和内存访问，通常需多个时钟周期。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;ADD指令的指令周期&lt;/a&gt;&lt;br&gt;
ADD加法指令（寄存器-寄存器）：取指→译码→ALU计算→写回结果。执行周期为1个时钟周期。若为内存操作数，则需额外访存周期。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;STO指令的指令周期&lt;/a&gt;&lt;br&gt;
STO（STORE）将寄存器内容写回内存：取指→译码→计算地址→写内存。写内存通常需要1个周期（假设内存写操作）。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;JMP指令的指令周期&lt;/a&gt;&lt;br&gt;
JMP无条件跳转：取指→译码→计算目标地址→将目标地址写入PC。执行周期短。条件跳转还需根据标志位决定是否修改PC。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;用方框图语言表示指令周期&lt;/a&gt;&lt;br&gt;
方框图语言以矩形框表示操作（如“取指令”）、菱形框表示判断（如“是否需要间址”），描述指令周期流程。可以清晰展示微操作序列和时序关系。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;时序产生器和控制方式&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=""&gt;时序信号的作用和体制&lt;/a&gt;&lt;br&gt;
时序信号为CPU各部件提供同步节拍。常见体制：单节拍（所有操作在一个时钟周期完成，限于低速）、多节拍（每条指令分多个时钟周期）、异步（无统一时钟，应答方式）。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;时序信号产生器&lt;/a&gt;&lt;br&gt;
时序产生器由晶体振荡器（产生主频时钟）、分频器、节拍发生器（环形计数器或分频逻辑）组成。产生时钟周期（T1, T2&amp;hellip;）、机器周期（M周期）、指令周期等信号。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;控制方式&lt;/a&gt;&lt;br&gt;
控制方式指CPU如何发出微操作命令：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;同步控制&lt;/strong&gt;：所有指令使用固定长度的时钟周期。简单但效率低。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;异步控制&lt;/strong&gt;：每条指令或微操作采用应答方式，速度较快但控制复杂。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;联合控制&lt;/strong&gt;：大部分指令同步，少数复杂指令异步扩展。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;微程序控制器&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=""&gt;微程序控制原理&lt;/a&gt;&lt;br&gt;
微程序控制将机器指令（宏指令）解释为一串微指令序列。控制存储器（ROM或RAM）存放微程序。执行指令时，微地址生成器根据指令操作码产生微地址，逐条读取微指令，每个微指令产生一组微操作控制信号。微指令格式分为水平型（一个时钟周期执行多个微操作）和垂直型（类似于机器指令的微指令）。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;微程序设计技术&lt;/a&gt;&lt;br&gt;
微程序设计技术包括：微指令编码（直接编码、字段直接编码、字段间接编码）、微地址形成（增量、多路转移、下址字段）、微程序顺序控制、微程序设计语言等。现代CPU的微程序常采用加标签的控制存储和分支逻辑。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;硬布线控制器&lt;/a&gt;&lt;br&gt;
硬布线控制器由组合逻辑电路（门电路、触发器）构成，直接根据指令操作码、时序节拍和状态条件产生控制信号。速度比微程序控制器快，但指令集复杂时逻辑设计极为复杂，不易修改。RISC处理器多采用硬布线控制（也有少数RISC使用微程序）。CISC的早期如8086使用微程序，后来逐步混合。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;流水CPU&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=""&gt;并行处理技术&lt;/a&gt;&lt;br&gt;
并行处理技术包括：指令流水线（时间并行）、多发射（超标量）、多核（空间并行）。流水线将指令执行分解为若干阶段（取指、译码、执行、访存、写回），多个指令重叠执行。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;流水CPU的结构&lt;/a&gt;&lt;br&gt;
经典五级流水线：IF（取指令）、ID（指令译码/读寄存器）、EX（执行/地址计算）、MEM（访存）、WB（写回）。流水线寄存器（IF/ID、ID/EX、EX/MEM、MEM/WB）用于传递数据和控制信号。流水线需要处理结构冒险、数据冒险和控制冒险。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;流水线中的主要问题&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;结构冒险&lt;/strong&gt;：资源冲突，如指令和数据共用同一存储器。解决：哈佛结构（指令/数据分离）、增加资源。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据冒险&lt;/strong&gt;：后一条指令依赖前一条指令的结果。解决：转发（旁路）、插入气泡（停顿）、编译优化。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;控制冒险&lt;/strong&gt;：分支指令改变PC，导致流水线冲刷。解决：分支预测（静态/动态）、延迟槽（早期RISC）。
现代流水线深度可达10-20级（如Intel Core）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;RISC CPU&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=""&gt;RISC机器的特点&lt;/a&gt;&lt;br&gt;
前面已述。RISC通常采用流水线、单周期指令、LOAD/STORE结构、大量寄存器。典型RISC处理器有ARM、MIPS、RISC-V、PowerPC（早期）等。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;RISC CPU实例&lt;/a&gt;&lt;br&gt;
ARM Cortex-A系列：多级流水线（通常13级或更少），支持超标量、乱序执行。RISC-V是一个开源指令集，设计简洁，适合教育和嵌入式。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;动态流水线调度&lt;/a&gt;&lt;br&gt;
动态调度由硬件（如Tomasulo算法）在运行时重排指令顺序，减少数据冒险造成的停顿。需要保留站、重排序缓冲（ROB）和寄存器重命名技术。常见于高性能处理器（Intel Core、AMD Zen）。与之相对的是静态调度（编译器优化）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><content:encoded><![CDATA[<ul>
<li>
<p><a href="">CPU的功能和组成</a></p>
<ul>
<li><a href="">CPU的功能</a><br>
CPU是计算机的核心部件，其基本功能包括：
<ul>
<li><strong>指令控制</strong>：从存储器取出指令，译码并执行。</li>
<li><strong>操作控制</strong>：产生微操作信号，驱动各部件执行指令。</li>
<li><strong>时间控制</strong>：为每条指令提供时序节拍。</li>
<li><strong>数据加工</strong>：通过ALU对数据进行算术/逻辑运算。</li>
<li><strong>中断处理</strong>：响应外部/内部中断，切换进程。</li>
</ul>
</li>
<li><a href="">CPU的基本组成</a><br>
CPU主要由运算器、控制器、寄存器组和内部总线组成。控制器包括程序计数器（PC）、指令寄存器（IR）、指令译码器、时序产生器和控制逻辑（微程序或硬布线）。</li>
<li><a href="">CPU中的主要寄存器</a>
<ul>
<li><strong>程序计数器（PC）</strong>：存放下一条指令的地址。</li>
<li><strong>指令寄存器（IR）</strong>：存放当前正在执行的指令。</li>
<li><strong>累加器（ACC）</strong>：存放中间运算结果。</li>
<li><strong>状态寄存器（PSW/Flag）</strong>：存放条件标志（C、Z、N、V）和中断允许等状态。</li>
<li><strong>通用寄存器（R0-Rn）</strong>：存放操作数和地址。</li>
<li><strong>堆栈指针（SP）</strong>：指向栈顶地址。</li>
<li><strong>基址/变址寄存器</strong>：支持多种寻址方式。</li>
</ul>
</li>
<li><a href="">操作控制器与时序产生器</a><br>
操作控制器产生微操作命令序列，分为微程序控制器（存储微指令）和硬布线控制器（组合逻辑）。时序产生器提供时钟信号和节拍信号，控制指令的执行步骤。</li>
</ul>
</li>
<li>
<p><a href="">指令周期</a></p>
<ul>
<li><a href="">指令周期的基本概念</a><br>
指令周期是指CPU从取指令、译码到执行完一条指令所花的时间。一个指令周期通常包含取指周期（取指令）、间址周期（若需取操作数地址）、执行周期、中断周期（若响应中断）。每个周期又由若干时钟周期（T周期）组成。</li>
<li><a href="">MOV指令的指令周期</a><br>
MOV指令（寄存器间或立即数传送）的指令周期：取指→译码→执行（传送数据）。执行周期只需一个时钟周期（寄存器间）。若MOV涉及内存，则需内存读/写周期。</li>
<li><a href="">LAD指令的指令周期</a><br>
LAD（LOAD）从内存读数据到寄存器：取指→译码→计算地址→读内存→写寄存器。执行周期包括地址计算和内存访问，通常需多个时钟周期。</li>
<li><a href="">ADD指令的指令周期</a><br>
ADD加法指令（寄存器-寄存器）：取指→译码→ALU计算→写回结果。执行周期为1个时钟周期。若为内存操作数，则需额外访存周期。</li>
<li><a href="">STO指令的指令周期</a><br>
STO（STORE）将寄存器内容写回内存：取指→译码→计算地址→写内存。写内存通常需要1个周期（假设内存写操作）。</li>
<li><a href="">JMP指令的指令周期</a><br>
JMP无条件跳转：取指→译码→计算目标地址→将目标地址写入PC。执行周期短。条件跳转还需根据标志位决定是否修改PC。</li>
<li><a href="">用方框图语言表示指令周期</a><br>
方框图语言以矩形框表示操作（如“取指令”）、菱形框表示判断（如“是否需要间址”），描述指令周期流程。可以清晰展示微操作序列和时序关系。</li>
</ul>
</li>
<li>
<p><a href="">时序产生器和控制方式</a></p>
<ul>
<li><a href="">时序信号的作用和体制</a><br>
时序信号为CPU各部件提供同步节拍。常见体制：单节拍（所有操作在一个时钟周期完成，限于低速）、多节拍（每条指令分多个时钟周期）、异步（无统一时钟，应答方式）。</li>
<li><a href="">时序信号产生器</a><br>
时序产生器由晶体振荡器（产生主频时钟）、分频器、节拍发生器（环形计数器或分频逻辑）组成。产生时钟周期（T1, T2&hellip;）、机器周期（M周期）、指令周期等信号。</li>
<li><a href="">控制方式</a><br>
控制方式指CPU如何发出微操作命令：
<ul>
<li><strong>同步控制</strong>：所有指令使用固定长度的时钟周期。简单但效率低。</li>
<li><strong>异步控制</strong>：每条指令或微操作采用应答方式，速度较快但控制复杂。</li>
<li><strong>联合控制</strong>：大部分指令同步，少数复杂指令异步扩展。</li>
</ul>
</li>
</ul>
</li>
<li>
<p><a href="">微程序控制器</a></p>
<ul>
<li><a href="">微程序控制原理</a><br>
微程序控制将机器指令（宏指令）解释为一串微指令序列。控制存储器（ROM或RAM）存放微程序。执行指令时，微地址生成器根据指令操作码产生微地址，逐条读取微指令，每个微指令产生一组微操作控制信号。微指令格式分为水平型（一个时钟周期执行多个微操作）和垂直型（类似于机器指令的微指令）。</li>
<li><a href="">微程序设计技术</a><br>
微程序设计技术包括：微指令编码（直接编码、字段直接编码、字段间接编码）、微地址形成（增量、多路转移、下址字段）、微程序顺序控制、微程序设计语言等。现代CPU的微程序常采用加标签的控制存储和分支逻辑。</li>
</ul>
</li>
<li>
<p><a href="">硬布线控制器</a><br>
硬布线控制器由组合逻辑电路（门电路、触发器）构成，直接根据指令操作码、时序节拍和状态条件产生控制信号。速度比微程序控制器快，但指令集复杂时逻辑设计极为复杂，不易修改。RISC处理器多采用硬布线控制（也有少数RISC使用微程序）。CISC的早期如8086使用微程序，后来逐步混合。</p>
</li>
<li>
<p><a href="">流水CPU</a></p>
<ul>
<li><a href="">并行处理技术</a><br>
并行处理技术包括：指令流水线（时间并行）、多发射（超标量）、多核（空间并行）。流水线将指令执行分解为若干阶段（取指、译码、执行、访存、写回），多个指令重叠执行。</li>
<li><a href="">流水CPU的结构</a><br>
经典五级流水线：IF（取指令）、ID（指令译码/读寄存器）、EX（执行/地址计算）、MEM（访存）、WB（写回）。流水线寄存器（IF/ID、ID/EX、EX/MEM、MEM/WB）用于传递数据和控制信号。流水线需要处理结构冒险、数据冒险和控制冒险。</li>
<li><a href="">流水线中的主要问题</a>
<ul>
<li><strong>结构冒险</strong>：资源冲突，如指令和数据共用同一存储器。解决：哈佛结构（指令/数据分离）、增加资源。</li>
<li><strong>数据冒险</strong>：后一条指令依赖前一条指令的结果。解决：转发（旁路）、插入气泡（停顿）、编译优化。</li>
<li><strong>控制冒险</strong>：分支指令改变PC，导致流水线冲刷。解决：分支预测（静态/动态）、延迟槽（早期RISC）。
现代流水线深度可达10-20级（如Intel Core）。</li>
</ul>
</li>
</ul>
</li>
<li>
<p><a href="">RISC CPU</a></p>
<ul>
<li><a href="">RISC机器的特点</a><br>
前面已述。RISC通常采用流水线、单周期指令、LOAD/STORE结构、大量寄存器。典型RISC处理器有ARM、MIPS、RISC-V、PowerPC（早期）等。</li>
<li><a href="">RISC CPU实例</a><br>
ARM Cortex-A系列：多级流水线（通常13级或更少），支持超标量、乱序执行。RISC-V是一个开源指令集，设计简洁，适合教育和嵌入式。</li>
<li><a href="">动态流水线调度</a><br>
动态调度由硬件（如Tomasulo算法）在运行时重排指令顺序，减少数据冒险造成的停顿。需要保留站、重排序缓冲（ROB）和寄存器重命名技术。常见于高性能处理器（Intel Core、AMD Zen）。与之相对的是静态调度（编译器优化）。</li>
</ul>
</li>
</ul>
]]></content:encoded></item><item><title>指令系统</title><link>https://farmer3-c.github.io/posts/principles-of-computer-composition/instruction-set/</link><pubDate>Wed, 03 Sep 2025 18:17:20 +0800</pubDate><guid>https://farmer3-c.github.io/posts/principles-of-computer-composition/instruction-set/</guid><description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;指令系统的发展与性能要求&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=""&gt;指令系统的发展&lt;/a&gt;&lt;br&gt;
早期计算机指令非常简单（如单地址、零地址指令）。随着硬件发展和应用需求，指令系统从基本算术逻辑扩展至浮点运算、字符串处理、多媒体（SIMD指令）、加密等。出现了复杂指令集计算机（CISC）和精简指令集计算机（RISC）两种设计哲学。CISC（如x86）指令丰富，便于编程但实现复杂；RISC（如ARM、MIPS）指令精简、规整，易于流水线和高频实现。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;指令系统的性能要求&lt;/a&gt;&lt;br&gt;
指令系统应满足：完整性（覆盖所有必要操作）、规整性（指令格式简单，寻址方式一致）、高效性（常用指令执行快）、兼容性（软件向前兼容）、可扩展性（便于增加新指令）。此外，还需要支持高级语言、操作系统和并发编程。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;低级语言与硬件结构的关系&lt;/a&gt;&lt;br&gt;
机器语言（二进制）和汇编语言（助记符）直接对应机器指令，与硬件结构（寄存器、ALU、总线等）紧密相关。程序员通过低级语言可以直接控制硬件资源，但编程效率低。高级语言通过编译或解释转换为目标机器指令，抽象层次更高。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;指令格式&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=""&gt;操作码&lt;/a&gt;&lt;br&gt;
操作码（Opcode）指定指令要执行的操作（如ADD、MOV）。操作码长度可以是定长（便于译码，如RISC通常32位固定长度）或变长（如x86，1-15字节，节省空间但译码复杂）。操作码设计常采用扩展操作码技术，通过预留码点扩展指令数量。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;地址码&lt;/a&gt;&lt;br&gt;
地址码字段指明操作数的来源和结果的去向。根据地址码数量，指令可分为三地址、二地址、一地址、零地址（如堆栈机）。例如：ADD R1, R2, R3 （R1←R2+R3）为三地址；ADD R1, R2 （R1←R1+R2）为二地址；ADD R1 （ACC←ACC+R1）为一地址。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;指令字长度&lt;/a&gt;&lt;br&gt;
指令字长度可以是定长（如ARM的32位）或变长（如x86的1-15字节）。定长指令便于取指和译码，适合流水线；变长指令代码密度高，节省内存。现代处理器常采用混合方式：主流RISC为定长32位，CISC使用变长，但在内部转换为类似RISC的微操作。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;指令助记符&lt;/a&gt;&lt;br&gt;
助记符（Mnemonic）是汇编语言中表示操作码的英文缩写，如ADD、SUB、MOV、JMP。便于记忆和编写。操作数通常使用寄存器符号（如EAX）或立即数、内存地址表达式。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;指令格式举例&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ARM 32位指令&lt;/strong&gt;：例如 &lt;code&gt;ADD r0, r1, r2&lt;/code&gt;（机器码：&lt;code&gt;E0810002&lt;/code&gt;，其中[31:28]条件码，[27:25]为00，[24:21]操作为0100，[20]为S位等）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;x86指令&lt;/strong&gt;：变长，例如 &lt;code&gt;89 C8&lt;/code&gt; 表示 &lt;code&gt;MOV eax, ecx&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;操作数类型&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=""&gt;一般的数据类型&lt;/a&gt;&lt;br&gt;
常见操作数类型：整数（字节、半字、字、双字）、浮点数（单精度/双精度）、字符（ASCII/Unicode）、逻辑数（布尔值）、指针（地址）。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;Pentium数据类型&lt;/a&gt;&lt;br&gt;
英特尔x86支持：字节（8位）、字（16位）、双字（32位）、四字（64位）、双四字（128位，用于SSE）、10字节扩展浮点数（80位）。也支持BCD（二进制编码十进制）和打包的SIMD数据。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;Power PC数据类型&lt;/a&gt;&lt;br&gt;
PowerPC（RISC）支持：字节、半字（16位）、字（32位）、双字（64位）。浮点类型为单精度和双精度。支持对齐访问。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;指令和数据的寻址方式&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=""&gt;指令的寻址方式&lt;/a&gt;&lt;br&gt;
指令的寻址即确定下一条指令的地址。顺序执行时，指令地址由程序计数器（PC）自动递增；跳转指令通过偏移量（相对寻址）或绝对地址改变PC值。&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;操作数基本寻址方式&lt;/a&gt;&lt;br&gt;
常见寻址方式：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;立即寻址&lt;/strong&gt;：操作数直接包含在指令中（如 &lt;code&gt;ADD R1, #5&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;寄存器寻址&lt;/strong&gt;：操作数存放在寄存器中（如 &lt;code&gt;ADD R1, R2&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;直接寻址&lt;/strong&gt;：指令给出内存地址（如 &lt;code&gt;ADD R1, [1000]&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;间接寻址&lt;/strong&gt;：指令给出存放地址的寄存器或内存单元（如 &lt;code&gt;ADD R1, [R2]&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;变址寻址&lt;/strong&gt;：基址寄存器+偏移量（如 &lt;code&gt;ADD R1, [R2 + 10]&lt;/code&gt;），适于数组访问。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;相对寻址&lt;/strong&gt;：PC+偏移量，用于转移指令。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;基址寻址&lt;/strong&gt;：基址寄存器+偏移量，常用于重定位。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;堆栈寻址&lt;/strong&gt;：隐含使用堆栈指针（SP）访问栈顶。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;寻址方式举例&lt;/a&gt;&lt;br&gt;
以ARM为例：&lt;code&gt;LDR R1, [R2, #8]&lt;/code&gt;（变址）、&lt;code&gt;LDR R1, [R2, R3]&lt;/code&gt;（寄存器偏移）、&lt;code&gt;LDR R1, label&lt;/code&gt;（PC相对寻址）。x86的 &lt;code&gt;MOV eax, [ebx+ecx*4+8]&lt;/code&gt; 复杂变址。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;典型指令&lt;/a&gt;&lt;/p&gt;</description><content:encoded><![CDATA[<ul>
<li>
<p><a href="">指令系统的发展与性能要求</a></p>
<ul>
<li><a href="">指令系统的发展</a><br>
早期计算机指令非常简单（如单地址、零地址指令）。随着硬件发展和应用需求，指令系统从基本算术逻辑扩展至浮点运算、字符串处理、多媒体（SIMD指令）、加密等。出现了复杂指令集计算机（CISC）和精简指令集计算机（RISC）两种设计哲学。CISC（如x86）指令丰富，便于编程但实现复杂；RISC（如ARM、MIPS）指令精简、规整，易于流水线和高频实现。</li>
<li><a href="">指令系统的性能要求</a><br>
指令系统应满足：完整性（覆盖所有必要操作）、规整性（指令格式简单，寻址方式一致）、高效性（常用指令执行快）、兼容性（软件向前兼容）、可扩展性（便于增加新指令）。此外，还需要支持高级语言、操作系统和并发编程。</li>
<li><a href="">低级语言与硬件结构的关系</a><br>
机器语言（二进制）和汇编语言（助记符）直接对应机器指令，与硬件结构（寄存器、ALU、总线等）紧密相关。程序员通过低级语言可以直接控制硬件资源，但编程效率低。高级语言通过编译或解释转换为目标机器指令，抽象层次更高。</li>
</ul>
</li>
<li>
<p><a href="">指令格式</a></p>
<ul>
<li><a href="">操作码</a><br>
操作码（Opcode）指定指令要执行的操作（如ADD、MOV）。操作码长度可以是定长（便于译码，如RISC通常32位固定长度）或变长（如x86，1-15字节，节省空间但译码复杂）。操作码设计常采用扩展操作码技术，通过预留码点扩展指令数量。</li>
<li><a href="">地址码</a><br>
地址码字段指明操作数的来源和结果的去向。根据地址码数量，指令可分为三地址、二地址、一地址、零地址（如堆栈机）。例如：ADD R1, R2, R3 （R1←R2+R3）为三地址；ADD R1, R2 （R1←R1+R2）为二地址；ADD R1 （ACC←ACC+R1）为一地址。</li>
<li><a href="">指令字长度</a><br>
指令字长度可以是定长（如ARM的32位）或变长（如x86的1-15字节）。定长指令便于取指和译码，适合流水线；变长指令代码密度高，节省内存。现代处理器常采用混合方式：主流RISC为定长32位，CISC使用变长，但在内部转换为类似RISC的微操作。</li>
<li><a href="">指令助记符</a><br>
助记符（Mnemonic）是汇编语言中表示操作码的英文缩写，如ADD、SUB、MOV、JMP。便于记忆和编写。操作数通常使用寄存器符号（如EAX）或立即数、内存地址表达式。</li>
<li><a href="">指令格式举例</a>
<ul>
<li><strong>ARM 32位指令</strong>：例如 <code>ADD r0, r1, r2</code>（机器码：<code>E0810002</code>，其中[31:28]条件码，[27:25]为00，[24:21]操作为0100，[20]为S位等）。</li>
<li><strong>x86指令</strong>：变长，例如 <code>89 C8</code> 表示 <code>MOV eax, ecx</code>。</li>
</ul>
</li>
</ul>
</li>
<li>
<p><a href="">操作数类型</a></p>
<ul>
<li><a href="">一般的数据类型</a><br>
常见操作数类型：整数（字节、半字、字、双字）、浮点数（单精度/双精度）、字符（ASCII/Unicode）、逻辑数（布尔值）、指针（地址）。</li>
<li><a href="">Pentium数据类型</a><br>
英特尔x86支持：字节（8位）、字（16位）、双字（32位）、四字（64位）、双四字（128位，用于SSE）、10字节扩展浮点数（80位）。也支持BCD（二进制编码十进制）和打包的SIMD数据。</li>
<li><a href="">Power PC数据类型</a><br>
PowerPC（RISC）支持：字节、半字（16位）、字（32位）、双字（64位）。浮点类型为单精度和双精度。支持对齐访问。</li>
</ul>
</li>
<li>
<p><a href="">指令和数据的寻址方式</a></p>
<ul>
<li><a href="">指令的寻址方式</a><br>
指令的寻址即确定下一条指令的地址。顺序执行时，指令地址由程序计数器（PC）自动递增；跳转指令通过偏移量（相对寻址）或绝对地址改变PC值。</li>
<li><a href="">操作数基本寻址方式</a><br>
常见寻址方式：
<ul>
<li><strong>立即寻址</strong>：操作数直接包含在指令中（如 <code>ADD R1, #5</code>）。</li>
<li><strong>寄存器寻址</strong>：操作数存放在寄存器中（如 <code>ADD R1, R2</code>）。</li>
<li><strong>直接寻址</strong>：指令给出内存地址（如 <code>ADD R1, [1000]</code>）。</li>
<li><strong>间接寻址</strong>：指令给出存放地址的寄存器或内存单元（如 <code>ADD R1, [R2]</code>）。</li>
<li><strong>变址寻址</strong>：基址寄存器+偏移量（如 <code>ADD R1, [R2 + 10]</code>），适于数组访问。</li>
<li><strong>相对寻址</strong>：PC+偏移量，用于转移指令。</li>
<li><strong>基址寻址</strong>：基址寄存器+偏移量，常用于重定位。</li>
<li><strong>堆栈寻址</strong>：隐含使用堆栈指针（SP）访问栈顶。</li>
</ul>
</li>
<li><a href="">寻址方式举例</a><br>
以ARM为例：<code>LDR R1, [R2, #8]</code>（变址）、<code>LDR R1, [R2, R3]</code>（寄存器偏移）、<code>LDR R1, label</code>（PC相对寻址）。x86的 <code>MOV eax, [ebx+ecx*4+8]</code> 复杂变址。</li>
</ul>
</li>
<li>
<p><a href="">典型指令</a></p>
<ul>
<li><a href="">指令的分类</a><br>
指令通常分为：
<ul>
<li><strong>数据传送指令</strong>（MOV，LOAD，STORE）</li>
<li><strong>算术运算指令</strong>（ADD，SUB，MUL，DIV）</li>
<li><strong>逻辑运算指令</strong>（AND，OR，XOR，NOT，移位）</li>
<li><strong>控制转移指令</strong>（JMP，BCC（条件分支），CALL，RET）</li>
<li><strong>输入输出指令</strong>（IN，OUT）</li>
<li><strong>系统控制指令</strong>（NOP，HLT，特权指令）</li>
<li><strong>浮点指令</strong>（FADD，FMUL等）</li>
<li><strong>SIMD指令</strong>（MMX，SSE，AVX，NEON）</li>
</ul>
</li>
<li><a href="">基本指令系统的操作</a><br>
基本指令包括：算术/逻辑、存储器读写、分支、子程序调用/返回、堆栈操作等。例如，一个简单RISC指令集通常包含20-40种指令。</li>
<li><a href="">RISC指令系统</a><br>
RISC（精简指令集计算机）的特点：
<ul>
<li>指令数量少，每条指令功能简单，执行时间固定（通常单周期）。</li>
<li>指令长度固定，格式规整。</li>
<li>只有LOAD/STORE指令访问内存，其他指令操作数均来自寄存器。</li>
<li>大量通用寄存器（32个或更多）。</li>
<li>硬件实现简单，利于流水线和超标量。
典型RISC：ARM、MIPS、RISC-V。</li>
</ul>
</li>
</ul>
</li>
<li>
<p><a href="">ARM汇编语言</a><br>
ARM汇编语言基于ARM指令集（32位/64位）。常见指令：<code>MOV</code>（传送）、<code>ADD</code>/<code>SUB</code>（加减）、<code>LDR</code>/<code>STR</code>（内存读写）、<code>B</code>/<code>BL</code>（分支/带返回分支）、<code>CMP</code>（比较）、条件执行（如<code>ADDEQ</code>）。寄存器：R0-R12通用，R13（SP），R14（LR），R15（PC）。示例程序：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-armasm" data-lang="armasm"><span class="line"><span class="cl">    AREA <span class="err">Example</span>, <span class="err">CODE</span>, <span class="err">READONLY</span>
</span></span><span class="line"><span class="cl">    ENTRY
</span></span><span class="line"><span class="cl">    MOV <span class="err">R0</span>, #<span class="mi">5</span>
</span></span><span class="line"><span class="cl">    MOV <span class="err">R1</span>, #<span class="mi">3</span>
</span></span><span class="line"><span class="cl">    ADD <span class="err">R2</span>, <span class="err">R0</span>, <span class="err">R1</span>   <span class="c1">; R2 = 8
</span></span></span><span class="line"><span class="cl">    END
</span></span></code></pre></td></tr></table>
</div>
</div></li>
</ul>
<hr>
<p><a href="/pdf/%E8%AE%A1%E7%BB%84%E7%AC%AC4%E7%AB%A0.pdf">4</a></p>
]]></content:encoded></item><item><title>存储系统</title><link>https://farmer3-c.github.io/posts/principles-of-computer-composition/storage/</link><pubDate>Wed, 03 Sep 2025 18:17:02 +0800</pubDate><guid>https://farmer3-c.github.io/posts/principles-of-computer-composition/storage/</guid><description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;存储系统概述&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;存储系统的层次结构&lt;/a&gt;&lt;br&gt;
&lt;img alt="alt text" loading="lazy" src="https://farmer3-c.github.io/img/in-post/pocc1.png"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;为了解决存储容量、存取速度和价格之间的矛盾，计算机中通常采用多级存储器体系结构，即使用高速缓冲存储器、主存储器和外存储器。CPU能直接访问的存储器称为&lt;strong&gt;内存储器&lt;/strong&gt;，包括高速缓冲存储器和主存储器。CPU不能直接访问&lt;strong&gt;外存储器&lt;/strong&gt;，外存储器的信息必须调入内存储器才能被CPU处理。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;高速缓冲存储器－主存 层次：CPU的处理速度比主存的存取速度快。为弥补主存速度的不足，在主存和CPU之间增加一级&lt;strong&gt;高速缓冲存储器&lt;/strong&gt;(&lt;strong&gt;Cache&lt;/strong&gt;)。其特点是速度高而容量小。它所存放的是主存中部分内容的复制，是当前最有可能被CPU访问的信息。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从整体看，Cache－主存层次的存取速度接近于Cache的速度，而容量接近于主存的容量。Cache存储器全部由硬件调度，对程序员是透明的。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;从整体看，主存－辅存层次具有接近于主存的速度和接近于辅存的容量。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;存储器的分类&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;按存储介质分
• 半导体存储器：主要有MOS型存储器和双极型存储器两大类。
• 磁表面存储器：在金属或塑料基体上，涂覆一层磁性材料，用磁层存储信息，常见的有磁盘、磁带等。
• 光存储器：采用激光技术访问的存储器。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;按存取方式分
• 随机存储器：任何存储单元的内容都能被&lt;strong&gt;随机存取&lt;/strong&gt;，且存取时间和存储单元的物理位置无关。如半导体存储器。
• 顺序存储器：只能按某种&lt;strong&gt;顺序来存取&lt;/strong&gt;，存取时间和存储单元的物理位置有关。如磁带存储器。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;磁盘存储器既不像随机存储器那样能随机地访问任一个存储单元，也不像顺序存储器那样完全按顺序存取，而是介于两者之间。存取信息时，第一步指向整个存储器中的某个小区域（磁盘上的磁道）；第二步在小区域内顺序检索，直至找到目的地后再进行读/写操作。其存取时间和信息的物理位置有一定关系。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;按存储器的读写功能分
• 只读存储器(ROM)：存储的内容固定不变，只能读出而不能写入。
• 随机读写存储器(RAM)：既能读出又能写入。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;按信息的可保存性分&lt;br&gt;
• 易失性存储器：断电后信息即消失的存储器。
• 非易失性存储器：断电后仍能保存信息的存储器。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;按在计算机系统中的作用分&lt;br&gt;
• 根据存储器在计算机系统中所起的作用，可分为主存储器、辅助存储器、高速缓冲存储器、控制存储器（用于存放微程序，由ROM构成）。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;存储器的编址和端模式&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;存储器的技术指标&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;存储容量：存储器所包含的存储单元的总数称为存储容量。存储容量用字数或字节数表示。一个字节定义为8个二进制位，一个字包括2个或4个字节。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;存取时间：从启动一次存储器操作到完成该操作所经历的时间。例如：读出时间是指从CPU向主存发出有效地址和读命令开始，直到将被选单元的内容读出为止所用的时间；写入时间是指从CPU向主存发出有效地址和写命令开始，直到信息写入被选中单元为止所用的时间。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;存取周期：连续两次访问存储器操作之间所需要的最短时间。一般情况下，存取周期大于存取时间。这是因为对于任何一种存储器，在读写操作之后，总要有一段恢复内部状态的复原时间。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;存储器带宽：又称数据传输率，指单位时间内存储器可读写的数据量，用位/秒或字节/秒度量。由存取周期和字长决定。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;可靠性：用平均无故障时间来衡量。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;其它参数：功耗、价格等。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=""&gt;静态随机存取存储器&lt;/a&gt;&lt;br&gt;
目前广泛使用的半导体存储器是MOS型半导体存储器，可以分为静态MOS型存储器（Static RAM）和动态MOS型存储器（Dynamic RAM）&lt;/p&gt;
&lt;div align="center"&gt;
&lt;img src="https://farmer3-c.github.io/img/in-post/pocc2.png" alt="六管SRAM存储元的电路图"&gt;
&lt;br&gt;
&lt;em&gt;六管SRAM存储元的电路图&lt;/em&gt;
&lt;/div&gt;
&lt;p&gt;$T_3、T_4$相当于负载电阻，$T_1、T_2$构成双稳态触发器。若$T_1$截止，A为高电平，使$T_2$导通，B为低电平，而B的低电平又使$T_1$更加截止；反之，若B为高电平，则A为低电平。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;可见该电路有两个稳定状态，且A和B两点电位总是互反的。如果用A点高电平代表 “1”，A点低电平代表 “ 0”，该电路可存储一位二进制数。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;$T_5、T_6、T_7和T_8$为控制管。如果某存储元被选中，X、Y地址译码线均处于高电平，使$T_5～T_8$导通，输入输出电路I/O和$\overline{I/O}$分别与A点和B点相连，A点和B点的电平状态就能输出到I/O和$\overline{I/O}$上，完成&lt;strong&gt;读操作&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;写操作时，如果要写入“1”，在I/O线上输入高电位，在$\overline{I/O}$线上输入低电位，开启$T_5～T_8$四个MOS管把高、低电位分别加在A、B点，使$T_1$管截止，使$T_2$管导通，将“1”写入存储元。如果要写入“0”，在I/O线上输入低电位，在$\overline{I/O}$线上输入高电位，打开$T_5～T_8$，把低、高电位分别加在A、B点，使$T_1$管导通，$T_2$管截止，将“0” 写入存储元。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=""&gt;基本的静态存储元阵列&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div align="center"&gt;
&lt;img src="https://farmer3-c.github.io/img/in-post/pocc3.png" alt="图"&gt;
&lt;br&gt;
&lt;em&gt;本例&lt;/em&gt;
&lt;/div&gt;
&lt;p&gt;任何一个 SRAM，都有三组信号线与外部打交道：
①地址线，本例中有 6 条，即 $A_0、A_1、 A_2、 A_3、 A_4、 A_5$，它指定了存储器的容量是 $2^6$=64 个存储单元。
②数据线，本例中有4 条，即 $I/O_0、 I/O_1、 I/O_2 、 I/O_3$，说明存储器的字长是 4 位，因此存储位元的总数是 64×4=256。
③控制线， 本例中 $R/\overline{W}$ 控制线， 它指定了对存储器进行读( $R/\overline{W}$ 高电平)， 还是进行写( $R/\overline{W}$低电平)。注意，读写操作不会同时发生。&lt;/p&gt;</description><content:encoded><![CDATA[<ul>
<li>
<p><a href="">存储系统概述</a></p>
<ul>
<li>
<p><a href="">存储系统的层次结构</a><br>
<img alt="alt text" loading="lazy" src="/img/in-post/pocc1.png"></p>
<ul>
<li>
<p>为了解决存储容量、存取速度和价格之间的矛盾，计算机中通常采用多级存储器体系结构，即使用高速缓冲存储器、主存储器和外存储器。CPU能直接访问的存储器称为<strong>内存储器</strong>，包括高速缓冲存储器和主存储器。CPU不能直接访问<strong>外存储器</strong>，外存储器的信息必须调入内存储器才能被CPU处理。</p>
</li>
<li>
<p>高速缓冲存储器－主存 层次：CPU的处理速度比主存的存取速度快。为弥补主存速度的不足，在主存和CPU之间增加一级<strong>高速缓冲存储器</strong>(<strong>Cache</strong>)。其特点是速度高而容量小。它所存放的是主存中部分内容的复制，是当前最有可能被CPU访问的信息。</p>
</li>
<li>
<p>从整体看，Cache－主存层次的存取速度接近于Cache的速度，而容量接近于主存的容量。Cache存储器全部由硬件调度，对程序员是透明的。</p>
</li>
</ul>
<blockquote>
<p>从整体看，主存－辅存层次具有接近于主存的速度和接近于辅存的容量。</p>
</blockquote>
</li>
<li>
<p><a href="">存储器的分类</a></p>
<ul>
<li>
<p>按存储介质分
• 半导体存储器：主要有MOS型存储器和双极型存储器两大类。
• 磁表面存储器：在金属或塑料基体上，涂覆一层磁性材料，用磁层存储信息，常见的有磁盘、磁带等。
• 光存储器：采用激光技术访问的存储器。</p>
</li>
<li>
<p>按存取方式分
• 随机存储器：任何存储单元的内容都能被<strong>随机存取</strong>，且存取时间和存储单元的物理位置无关。如半导体存储器。
• 顺序存储器：只能按某种<strong>顺序来存取</strong>，存取时间和存储单元的物理位置有关。如磁带存储器。</p>
<blockquote>
<p>磁盘存储器既不像随机存储器那样能随机地访问任一个存储单元，也不像顺序存储器那样完全按顺序存取，而是介于两者之间。存取信息时，第一步指向整个存储器中的某个小区域（磁盘上的磁道）；第二步在小区域内顺序检索，直至找到目的地后再进行读/写操作。其存取时间和信息的物理位置有一定关系。</p>
</blockquote>
</li>
<li>
<p>按存储器的读写功能分
• 只读存储器(ROM)：存储的内容固定不变，只能读出而不能写入。
• 随机读写存储器(RAM)：既能读出又能写入。</p>
</li>
<li>
<p>按信息的可保存性分<br>
• 易失性存储器：断电后信息即消失的存储器。
• 非易失性存储器：断电后仍能保存信息的存储器。</p>
</li>
<li>
<p>按在计算机系统中的作用分<br>
• 根据存储器在计算机系统中所起的作用，可分为主存储器、辅助存储器、高速缓冲存储器、控制存储器（用于存放微程序，由ROM构成）。</p>
</li>
</ul>
</li>
<li>
<p><a href="">存储器的编址和端模式</a></p>
</li>
<li>
<p><a href="">存储器的技术指标</a></p>
<ul>
<li>
<p>存储容量：存储器所包含的存储单元的总数称为存储容量。存储容量用字数或字节数表示。一个字节定义为8个二进制位，一个字包括2个或4个字节。</p>
</li>
<li>
<p>存取时间：从启动一次存储器操作到完成该操作所经历的时间。例如：读出时间是指从CPU向主存发出有效地址和读命令开始，直到将被选单元的内容读出为止所用的时间；写入时间是指从CPU向主存发出有效地址和写命令开始，直到信息写入被选中单元为止所用的时间。</p>
</li>
<li>
<p>存取周期：连续两次访问存储器操作之间所需要的最短时间。一般情况下，存取周期大于存取时间。这是因为对于任何一种存储器，在读写操作之后，总要有一段恢复内部状态的复原时间。</p>
</li>
<li>
<p>存储器带宽：又称数据传输率，指单位时间内存储器可读写的数据量，用位/秒或字节/秒度量。由存取周期和字长决定。</p>
</li>
<li>
<p>可靠性：用平均无故障时间来衡量。</p>
</li>
<li>
<p>其它参数：功耗、价格等。</p>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p><a href="">静态随机存取存储器</a><br>
目前广泛使用的半导体存储器是MOS型半导体存储器，可以分为静态MOS型存储器（Static RAM）和动态MOS型存储器（Dynamic RAM）</p>
  <div align="center">
  <img src="/img/in-post/pocc2.png" alt="六管SRAM存储元的电路图">
  <br>
  <em>六管SRAM存储元的电路图</em>
  </div>
<p>$T_3、T_4$相当于负载电阻，$T_1、T_2$构成双稳态触发器。若$T_1$截止，A为高电平，使$T_2$导通，B为低电平，而B的低电平又使$T_1$更加截止；反之，若B为高电平，则A为低电平。</p>
<blockquote>
<p>可见该电路有两个稳定状态，且A和B两点电位总是互反的。如果用A点高电平代表 “1”，A点低电平代表 “ 0”，该电路可存储一位二进制数。</p>
</blockquote>
<p>$T_5、T_6、T_7和T_8$为控制管。如果某存储元被选中，X、Y地址译码线均处于高电平，使$T_5～T_8$导通，输入输出电路I/O和$\overline{I/O}$分别与A点和B点相连，A点和B点的电平状态就能输出到I/O和$\overline{I/O}$上，完成<strong>读操作</strong>。</p>
<p>写操作时，如果要写入“1”，在I/O线上输入高电位，在$\overline{I/O}$线上输入低电位，开启$T_5～T_8$四个MOS管把高、低电位分别加在A、B点，使$T_1$管截止，使$T_2$管导通，将“1”写入存储元。如果要写入“0”，在I/O线上输入低电位，在$\overline{I/O}$线上输入高电位，打开$T_5～T_8$，把低、高电位分别加在A、B点，使$T_1$管导通，$T_2$管截止，将“0” 写入存储元。</p>
<ul>
<li><a href="">基本的静态存储元阵列</a></li>
</ul>
  <div align="center">
  <img src="/img/in-post/pocc3.png" alt="图">
  <br>
  <em>本例</em>
  </div>
<p>任何一个 SRAM，都有三组信号线与外部打交道：
①地址线，本例中有 6 条，即 $A_0、A_1、 A_2、 A_3、 A_4、 A_5$，它指定了存储器的容量是 $2^6$=64 个存储单元。
②数据线，本例中有4 条，即 $I/O_0、 I/O_1、 I/O_2 、 I/O_3$，说明存储器的字长是 4 位，因此存储位元的总数是 64×4=256。
③控制线， 本例中 $R/\overline{W}$ 控制线， 它指定了对存储器进行读( $R/\overline{W}$ 高电平)， 还是进行写( $R/\overline{W}$低电平)。注意，读写操作不会同时发生。</p>
<ul>
<li>
<p><a href="">基本的SRAM逻辑结构</a></p>
<p>SRAM存储器由存储体、地址译码电路、读写电路和控制电路组成。
* 存储体： 存储体是存储单元的集合。
* 地址译码器：CPU要选择某一存储单元，就在地址总线上输出该单元的地址信号给地址译码器，译码器把二进制代码表示的地址转换成电平信号，选中要访问的存储单元。
* 片选与读写控制电路：读写控制线用来控制芯片是进行读操作还是写操作；片选线用来决定该芯片是否被选中。</p>
</li>
<li>
<p><a href="">SRAM读/写时序</a></p>
</li>
<li>
<p><a href="">存储器容量的扩充</a></p>
</li>
<li>
<p><a href="">存储器与CPU的连接</a></p>
  <div align="center">
  <img src="/img/in-post/pocc4.png" alt="图">
  <br>
  </div>
<p>存储容量: 半导体存储芯片所能存储的二进制信息位数(单位bit)</p>
<p>可寻址最大范围: $2^k  n$ (单位bit，1Byte=8bit)</p>
<p>RAM芯片通过地址线、数据线和控制线与外部连接。存储器同CPU的连接就是要完成地址线、数据线和控制线的连接。地址线是单向输入的，数据线是双向的，既可输入也可输出。单个芯片的存储容量往往不能满足要求，需要进行扩展。扩展的方法有：<strong>位扩展法、字扩展法、字位同时扩展法</strong>。</p>
</li>
</ul>
</li>
<li>
<p><a href="">动态随机存取存储器</a></p>
<ul>
<li><a href="">DRAM存储元的工作原理</a></li>
<li><a href="">DRAM芯片的逻辑结构</a></li>
<li><a href="">DRAM读/写时序</a></li>
<li><a href="">DRAM的刷新操作</a></li>
<li><a href="">突发传输模式</a></li>
<li><a href="">同步DRAM(SDRAM)</a></li>
<li><a href="">双倍数据率SDRAM(DDR SDRAM)</a></li>
<li><a href="">DRAM读/写校验</a></li>
<li><a href="">CDRAM</a></li>
</ul>
</li>
<li>
<p><a href="">只读存储器</a></p>
<ul>
<li><a href="">只读存储器概述</a></li>
<li><a href="">NOR闪存</a></li>
</ul>
</li>
<li>
<p><a href="">并行存储器</a></p>
<ul>
<li><a href="">双端口存储器</a></li>
<li><a href="">多模块交叉存储器</a></li>
</ul>
</li>
<li>
<p><a href="">cache存储器</a></p>
<ul>
<li><a href="">cache基本原理</a></li>
<li><a href="">主存与cache的地址映射</a></li>
<li><a href="">cache的替换策略</a></li>
<li><a href="">cache的写操作策略</a></li>
<li><a href="">Pentium 4的cache组织</a></li>
<li><a href="">使用多级cache减少缺失损失</a></li>
</ul>
</li>
<li>
<p><a href="">虚拟存储器</a></p>
<ul>
<li><a href="">虚拟存储器的基本概念</a></li>
<li><a href="">页式虚拟存储器</a></li>
<li><a href="">段式虚拟存储器和段页式虚拟存储器</a></li>
<li><a href="">虚存的替换算法</a></li>
<li><a href="">存储管理部件</a></li>
</ul>
</li>
<li>
<p><a href="">奔腾系列机的虚存组织</a></p>
<ul>
<li><a href="">存储器模型</a></li>
<li><a href="">虚地址模式</a></li>
<li><a href="">分页模式下的地址转换</a></li>
</ul>
</li>
</ul>
<hr>
<p><a href="/pdf/%E8%AE%A1%E7%BB%84%E7%AC%AC3%E7%AB%A0-1.pdf">计组第3章-1</a><br>
<a href="/pdf/%E8%AE%A1%E7%BB%84%E7%AC%AC3%E7%AB%A0-2.pdf">计组第3章-2</a><br>
<a href="/pdf/%E8%AE%A1%E7%BB%84%E7%AC%AC3%E7%AB%A0-3.pdf">计组第3章-3</a></p>
]]></content:encoded></item><item><title>运算方法和运算器</title><link>https://farmer3-c.github.io/posts/principles-of-computer-composition/arithmetic/</link><pubDate>Wed, 03 Sep 2025 18:16:43 +0800</pubDate><guid>https://farmer3-c.github.io/posts/principles-of-computer-composition/arithmetic/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E6%95%B0%E6%8D%AE%E4%B8%8E%E6%96%87%E5%AD%97%E7%9A%84%E8%A1%A8%E7%A4%BA%E6%96%B9%E6%B3%95"&gt;数据与文字的表示方法&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E6%95%B0%E6%8D%AE%E6%A0%BC%E5%BC%8F"&gt;数据格式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%95%B0%E7%9A%84%E6%9C%BA%E5%99%A8%E7%A0%81%E8%A1%A8%E7%A4%BA"&gt;数的机器码表示&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%AD%97%E7%AC%A6%E4%B8%8E%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E8%A1%A8%E7%A4%BA%E6%96%B9%E6%B3%95"&gt;字符与字符串的表示方法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%B1%89%E5%AD%97%E7%9A%84%E8%A1%A8%E7%A4%BA%E6%96%B9%E6%B3%95"&gt;汉字的表示方法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%A0%A1%E9%AA%8C%E7%A0%81"&gt;校验码&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%AE%9A%E7%82%B9%E5%8A%A0%E6%B3%95%E5%87%8F%E6%B3%95%E8%BF%90%E7%AE%97"&gt;定点加法、减法运算&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E8%A1%A5%E7%A0%81%E5%8A%A0%E6%B3%95"&gt;补码加法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%A1%A5%E7%A0%81%E5%87%8F%E6%B3%95"&gt;补码减法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%BA%A2%E5%87%BA%E6%A6%82%E5%BF%B5%E4%B8%8E%E6%A3%80%E6%B5%8B%E6%96%B9%E6%B3%95"&gt;溢出概念与检测方法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%9F%BA%E6%9C%AC%E7%9A%84%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%8A%A0%E6%B3%95%E5%87%8F%E6%B3%95%E5%99%A8"&gt;基本的二进制加法/减法器&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%AE%9A%E7%82%B9%E9%99%A4%E6%B3%95%E8%BF%90%E7%AE%97"&gt;定点除法运算&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E5%8E%9F%E7%A0%81%E9%99%A4%E6%B3%95%E7%AE%97%E6%B3%95%E5%8E%9F%E7%90%86"&gt;原码除法算法原理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%B9%B6%E8%A1%8C%E9%99%A4%E6%B3%95%E5%99%A8"&gt;并行除法器&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%AE%9A%E7%82%B9%E8%BF%90%E7%AE%97%E5%99%A8%E7%9A%84%E7%BB%84%E6%88%90"&gt;定点运算器的组成&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E9%80%BB%E8%BE%91%E8%BF%90%E7%AE%97"&gt;逻辑运算&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%A4%9A%E5%8A%9F%E8%83%BD%E7%AE%97%E6%9C%AF%E9%80%BB%E8%BE%91%E8%BF%90%E7%AE%97%E5%8D%95%E5%85%83"&gt;多功能算术/逻辑运算单元&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%86%85%E9%83%A8%E6%80%BB%E7%BA%BF"&gt;内部总线&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%AE%9A%E7%82%B9%E8%BF%90%E7%AE%97%E5%99%A8%E7%9A%84%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84"&gt;定点运算器的基本结构&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%B5%AE%E7%82%B9%E8%BF%90%E7%AE%97%E6%96%B9%E6%B3%95%E5%92%8C%E6%B5%AE%E7%82%B9%E8%BF%90%E7%AE%97%E5%99%A8"&gt;浮点运算方法和浮点运算器&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E6%B5%AE%E7%82%B9%E5%8A%A0%E6%B3%95%E5%87%8F%E6%B3%95%E8%BF%90%E7%AE%97"&gt;浮点加法、减法运算&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%B5%AE%E7%82%B9%E4%B9%98%E6%B3%95%E9%99%A4%E6%B3%95%E8%BF%90%E7%AE%97"&gt;浮点乘法、除法运算&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%B5%AE%E7%82%B9%E8%BF%90%E7%AE%97%E6%B5%81%E6%B0%B4%E7%BA%BF"&gt;浮点运算流水线&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="数据与文字的表示方法"&gt;数据与文字的表示方法&lt;/h2&gt;
&lt;h4 id="数据格式"&gt;数据格式&lt;/h4&gt;
&lt;p&gt;计算机中的数据分为数值数据和非数值数据（字符、汉字、图像、声音等）。数值数据在计算机内部采用二进制编码表示，根据小数点位置是否固定，分为定点表示法和浮点表示法。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;定点表示法&lt;/strong&gt;：小数点位置固定不变，分为定点整数（纯整数）和定点小数（纯小数）。定点数通常用补码或原码表示。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;浮点表示法&lt;/strong&gt;：形如 N = M × R^E，其中M为尾数（定点小数），E为阶码（整数），R为基数（通常为2）。IEEE 754标准定义了单精度（32位）、双精度（64位）等浮点数格式。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="数的机器码表示"&gt;数的机器码表示&lt;/h4&gt;
&lt;p&gt;计算机中为了简化运算电路，通常使用以下机器码表示有符号数：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;原码&lt;/strong&gt;：符号位（0正1负）加绝对值。简单但不便于加减运算。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;反码&lt;/strong&gt;：正数同原码，负数符号位不变，其余位取反。主要用于中间计算。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;补码&lt;/strong&gt;：正数同原码，负数反码加1。补码可将减法转化为加法，是现代计算机最常用的有符号整数编码。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;移码&lt;/strong&gt;：在补码基础上加上偏置常数（通常2^(n-1)），用于浮点数的阶码表示。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="字符与字符串的表示方法"&gt;字符与字符串的表示方法&lt;/h4&gt;
&lt;p&gt;字符编码采用标准编码方案，如ASCII（美国信息交换标准代码）使用7位或8位二进制表示128个基本字符（英文大小写字母、数字、标点符号、控制字符）。扩展ASCII（ISO-8859）支持西欧语言。Unicode（如UTF-8、UTF-16）统一表示全世界所有字符，支持多语言混排。字符串在内存中通常以连续字节存储，以空字符（&amp;rsquo;\0&amp;rsquo;）或长度字段作为结束标志。&lt;/p&gt;
&lt;h4 id="汉字的表示方法"&gt;汉字的表示方法&lt;/h4&gt;
&lt;p&gt;汉字编码分为输入码（拼音、五笔等）、机内码（存储编码，如GB2312、GB18030、BIG5、Unicode中的汉字区）、字形码（点阵或矢量字体）。国家标准GB2312包含6763个常用汉字，GB18030兼容GB2312并扩展至7万余汉字。在Unicode中，汉字位于CJK统一表意文字区（U+4E00至U+9FFF）。&lt;/p&gt;
&lt;h4 id="校验码"&gt;校验码&lt;/h4&gt;
&lt;p&gt;校验码用于检测数据在传输或存储过程中的错误。常见类型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;奇偶校验码&lt;/strong&gt;：增加一位奇偶位，使整个码字中1的个数为奇数（奇校验）或偶数（偶校验）。只能检测奇数个错误，不能纠错。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;海明校验码&lt;/strong&gt;：通过在数据位之间插入多个校验位，能够检测并纠正一位错误（或者检测两位错）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;循环冗余校验（CRC）&lt;/strong&gt;：将数据视为多项式，除以生成多项式得到余数作为校验码。CRC能检测突发错误，广泛用于网络通信和存储设备。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="定点加法减法运算"&gt;定点加法、减法运算&lt;/h2&gt;
&lt;h4 id="补码加法"&gt;补码加法&lt;/h4&gt;
&lt;p&gt;补码加法的公式：[X+Y]补 = [X]补 + [Y]补 (mod 2^n)。即直接将两个数的补码相加，若最高位产生进位则丢弃该进位（模2^n运算）。正负数均可直接相加，无需特殊处理。例如：X=5(0101)，Y=-3(1101)，和=2(0010)。&lt;/p&gt;
&lt;h4 id="补码减法"&gt;补码减法&lt;/h4&gt;
&lt;p&gt;补码减法转化为加法：[X-Y]补 = [X]补 + [-Y]补。其中[-Y]补可通过将[Y]补连同符号位一起取反后加1得到。例如：X=5(0101)，Y=3(0011)，则[-Y]补=1101，相加得0010（即2）。&lt;/p&gt;
&lt;h4 id="溢出概念与检测方法"&gt;溢出概念与检测方法&lt;/h4&gt;
&lt;p&gt;当运算结果超出机器数表示范围时发生溢出。对于补码加减法，溢出检测方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;双符号位法（变形补码）&lt;/strong&gt;：用两个符号位，如00为正，01为上溢，10为下溢，11为负。结果的两个符号位不同则表示溢出。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;单符号位法&lt;/strong&gt;：比较操作数的符号和结果的符号。若两个正数相加得负数，或两个负数相加得正数，则溢出。进位检测法：最高有效位的进位与符号位的进位不同时溢出。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="基本的二进制加法减法器"&gt;基本的二进制加法/减法器&lt;/h4&gt;
&lt;p&gt;一位全加器（FA）是实现加法/减法的基础。它有三个输入：A、B、低位进位Cin；两个输出：和S、进位Cout。逻辑表达式：S = A ⊕ B ⊕ Cin；Cout = AB + (A⊕B)Cin。多个全加器串联构成行波进位加法器（RCA）。减法可通过将减数取反（按位取反后加1，即使用异或门控制）并设置初始进位为1来实现。为提高速度，可采用超前进位加法器（CLA）并行计算进位。&lt;/p&gt;</description><content:encoded><![CDATA[<ul>
<li><a href="#%E6%95%B0%E6%8D%AE%E4%B8%8E%E6%96%87%E5%AD%97%E7%9A%84%E8%A1%A8%E7%A4%BA%E6%96%B9%E6%B3%95">数据与文字的表示方法</a>
<ul>
<li><a href="#%E6%95%B0%E6%8D%AE%E6%A0%BC%E5%BC%8F">数据格式</a></li>
<li><a href="#%E6%95%B0%E7%9A%84%E6%9C%BA%E5%99%A8%E7%A0%81%E8%A1%A8%E7%A4%BA">数的机器码表示</a></li>
<li><a href="#%E5%AD%97%E7%AC%A6%E4%B8%8E%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E8%A1%A8%E7%A4%BA%E6%96%B9%E6%B3%95">字符与字符串的表示方法</a></li>
<li><a href="#%E6%B1%89%E5%AD%97%E7%9A%84%E8%A1%A8%E7%A4%BA%E6%96%B9%E6%B3%95">汉字的表示方法</a></li>
<li><a href="#%E6%A0%A1%E9%AA%8C%E7%A0%81">校验码</a></li>
</ul>
</li>
<li><a href="#%E5%AE%9A%E7%82%B9%E5%8A%A0%E6%B3%95%E5%87%8F%E6%B3%95%E8%BF%90%E7%AE%97">定点加法、减法运算</a>
<ul>
<li><a href="#%E8%A1%A5%E7%A0%81%E5%8A%A0%E6%B3%95">补码加法</a></li>
<li><a href="#%E8%A1%A5%E7%A0%81%E5%87%8F%E6%B3%95">补码减法</a></li>
<li><a href="#%E6%BA%A2%E5%87%BA%E6%A6%82%E5%BF%B5%E4%B8%8E%E6%A3%80%E6%B5%8B%E6%96%B9%E6%B3%95">溢出概念与检测方法</a></li>
<li><a href="#%E5%9F%BA%E6%9C%AC%E7%9A%84%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%8A%A0%E6%B3%95%E5%87%8F%E6%B3%95%E5%99%A8">基本的二进制加法/减法器</a></li>
</ul>
</li>
<li><a href="#%E5%AE%9A%E7%82%B9%E9%99%A4%E6%B3%95%E8%BF%90%E7%AE%97">定点除法运算</a>
<ul>
<li><a href="#%E5%8E%9F%E7%A0%81%E9%99%A4%E6%B3%95%E7%AE%97%E6%B3%95%E5%8E%9F%E7%90%86">原码除法算法原理</a></li>
<li><a href="#%E5%B9%B6%E8%A1%8C%E9%99%A4%E6%B3%95%E5%99%A8">并行除法器</a></li>
</ul>
</li>
<li><a href="#%E5%AE%9A%E7%82%B9%E8%BF%90%E7%AE%97%E5%99%A8%E7%9A%84%E7%BB%84%E6%88%90">定点运算器的组成</a>
<ul>
<li><a href="#%E9%80%BB%E8%BE%91%E8%BF%90%E7%AE%97">逻辑运算</a></li>
<li><a href="#%E5%A4%9A%E5%8A%9F%E8%83%BD%E7%AE%97%E6%9C%AF%E9%80%BB%E8%BE%91%E8%BF%90%E7%AE%97%E5%8D%95%E5%85%83">多功能算术/逻辑运算单元</a></li>
<li><a href="#%E5%86%85%E9%83%A8%E6%80%BB%E7%BA%BF">内部总线</a></li>
<li><a href="#%E5%AE%9A%E7%82%B9%E8%BF%90%E7%AE%97%E5%99%A8%E7%9A%84%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84">定点运算器的基本结构</a></li>
</ul>
</li>
<li><a href="#%E6%B5%AE%E7%82%B9%E8%BF%90%E7%AE%97%E6%96%B9%E6%B3%95%E5%92%8C%E6%B5%AE%E7%82%B9%E8%BF%90%E7%AE%97%E5%99%A8">浮点运算方法和浮点运算器</a>
<ul>
<li><a href="#%E6%B5%AE%E7%82%B9%E5%8A%A0%E6%B3%95%E5%87%8F%E6%B3%95%E8%BF%90%E7%AE%97">浮点加法、减法运算</a></li>
<li><a href="#%E6%B5%AE%E7%82%B9%E4%B9%98%E6%B3%95%E9%99%A4%E6%B3%95%E8%BF%90%E7%AE%97">浮点乘法、除法运算</a></li>
<li><a href="#%E6%B5%AE%E7%82%B9%E8%BF%90%E7%AE%97%E6%B5%81%E6%B0%B4%E7%BA%BF">浮点运算流水线</a></li>
</ul>
</li>
</ul>
<h2 id="数据与文字的表示方法">数据与文字的表示方法</h2>
<h4 id="数据格式">数据格式</h4>
<p>计算机中的数据分为数值数据和非数值数据（字符、汉字、图像、声音等）。数值数据在计算机内部采用二进制编码表示，根据小数点位置是否固定，分为定点表示法和浮点表示法。</p>
<ul>
<li><strong>定点表示法</strong>：小数点位置固定不变，分为定点整数（纯整数）和定点小数（纯小数）。定点数通常用补码或原码表示。</li>
<li><strong>浮点表示法</strong>：形如 N = M × R^E，其中M为尾数（定点小数），E为阶码（整数），R为基数（通常为2）。IEEE 754标准定义了单精度（32位）、双精度（64位）等浮点数格式。</li>
</ul>
<h4 id="数的机器码表示">数的机器码表示</h4>
<p>计算机中为了简化运算电路，通常使用以下机器码表示有符号数：</p>
<ul>
<li><strong>原码</strong>：符号位（0正1负）加绝对值。简单但不便于加减运算。</li>
<li><strong>反码</strong>：正数同原码，负数符号位不变，其余位取反。主要用于中间计算。</li>
<li><strong>补码</strong>：正数同原码，负数反码加1。补码可将减法转化为加法，是现代计算机最常用的有符号整数编码。</li>
<li><strong>移码</strong>：在补码基础上加上偏置常数（通常2^(n-1)），用于浮点数的阶码表示。</li>
</ul>
<h4 id="字符与字符串的表示方法">字符与字符串的表示方法</h4>
<p>字符编码采用标准编码方案，如ASCII（美国信息交换标准代码）使用7位或8位二进制表示128个基本字符（英文大小写字母、数字、标点符号、控制字符）。扩展ASCII（ISO-8859）支持西欧语言。Unicode（如UTF-8、UTF-16）统一表示全世界所有字符，支持多语言混排。字符串在内存中通常以连续字节存储，以空字符（&rsquo;\0&rsquo;）或长度字段作为结束标志。</p>
<h4 id="汉字的表示方法">汉字的表示方法</h4>
<p>汉字编码分为输入码（拼音、五笔等）、机内码（存储编码，如GB2312、GB18030、BIG5、Unicode中的汉字区）、字形码（点阵或矢量字体）。国家标准GB2312包含6763个常用汉字，GB18030兼容GB2312并扩展至7万余汉字。在Unicode中，汉字位于CJK统一表意文字区（U+4E00至U+9FFF）。</p>
<h4 id="校验码">校验码</h4>
<p>校验码用于检测数据在传输或存储过程中的错误。常见类型：</p>
<ul>
<li><strong>奇偶校验码</strong>：增加一位奇偶位，使整个码字中1的个数为奇数（奇校验）或偶数（偶校验）。只能检测奇数个错误，不能纠错。</li>
<li><strong>海明校验码</strong>：通过在数据位之间插入多个校验位，能够检测并纠正一位错误（或者检测两位错）。</li>
<li><strong>循环冗余校验（CRC）</strong>：将数据视为多项式，除以生成多项式得到余数作为校验码。CRC能检测突发错误，广泛用于网络通信和存储设备。</li>
</ul>
<h2 id="定点加法减法运算">定点加法、减法运算</h2>
<h4 id="补码加法">补码加法</h4>
<p>补码加法的公式：[X+Y]补 = [X]补 + [Y]补 (mod 2^n)。即直接将两个数的补码相加，若最高位产生进位则丢弃该进位（模2^n运算）。正负数均可直接相加，无需特殊处理。例如：X=5(0101)，Y=-3(1101)，和=2(0010)。</p>
<h4 id="补码减法">补码减法</h4>
<p>补码减法转化为加法：[X-Y]补 = [X]补 + [-Y]补。其中[-Y]补可通过将[Y]补连同符号位一起取反后加1得到。例如：X=5(0101)，Y=3(0011)，则[-Y]补=1101，相加得0010（即2）。</p>
<h4 id="溢出概念与检测方法">溢出概念与检测方法</h4>
<p>当运算结果超出机器数表示范围时发生溢出。对于补码加减法，溢出检测方法：</p>
<ul>
<li><strong>双符号位法（变形补码）</strong>：用两个符号位，如00为正，01为上溢，10为下溢，11为负。结果的两个符号位不同则表示溢出。</li>
<li><strong>单符号位法</strong>：比较操作数的符号和结果的符号。若两个正数相加得负数，或两个负数相加得正数，则溢出。进位检测法：最高有效位的进位与符号位的进位不同时溢出。</li>
</ul>
<h4 id="基本的二进制加法减法器">基本的二进制加法/减法器</h4>
<p>一位全加器（FA）是实现加法/减法的基础。它有三个输入：A、B、低位进位Cin；两个输出：和S、进位Cout。逻辑表达式：S = A ⊕ B ⊕ Cin；Cout = AB + (A⊕B)Cin。多个全加器串联构成行波进位加法器（RCA）。减法可通过将减数取反（按位取反后加1，即使用异或门控制）并设置初始进位为1来实现。为提高速度，可采用超前进位加法器（CLA）并行计算进位。</p>
<h2 id="定点除法运算">定点除法运算</h2>
<h4 id="原码除法算法原理">原码除法算法原理</h4>
<p>原码除法：商符由被除数和除数的符号位异或得到；数值部分为绝对值相除。常见算法：</p>
<ul>
<li><strong>恢复余数法</strong>：每次用余数减除数，若结果为负则恢复余数并商0，左移再试；若为正则商1，左移继续。速度较慢。</li>
<li><strong>不恢复余数法（加减交替法）</strong>：根据余数符号决定下一步是加除数还是减除数，无需恢复，减少操作次数。计算机中常用此方法实现定点除法。</li>
</ul>
<h4 id="并行除法器">并行除法器</h4>
<p>为提高除法速度，可采用并行除法器，如基于数组结构或加法器网络的除法器。基本原理是类似于手工除法的逐次比较，但通过硬件并行加速。现代CPU中的除法器通常采用SRT算法（通过冗余位估计商数字），可以在每步产生多位商，并利用进位保留加法器（CSA）提高速度。</p>
<h2 id="定点运算器的组成">定点运算器的组成</h2>
<h4 id="逻辑运算">逻辑运算</h4>
<p>除了算术运算，运算器还需支持逻辑运算：与（AND）、或（OR）、非（NOT）、异或（XOR）、移位（算术左移/右移、逻辑左移/右移、循环移位）。逻辑运算按位进行，无进位/借位。移位操作常用于乘除法的快速实现和位处理。</p>
<h4 id="多功能算术逻辑运算单元">多功能算术/逻辑运算单元</h4>
<p>ALU（算术逻辑单元）是一个组合逻辑电路，能够根据控制信号选择执行多种运算（加、减、与、或、异或、移位等）。典型的ALU使用一个操作码（如4位）来选择运算类型。现代ALU还包含状态寄存器（标志位：Z（零）、C（进位）、V（溢出）、N（负））。例如，74181芯片是一个4位ALU，可执行16种算术和逻辑运算。</p>
<h4 id="内部总线">内部总线</h4>
<p>运算器内部使用总线连接ALU、寄存器组（累加器、通用寄存器、暂存器等）和内部数据通路。总线分为单总线、双总线、三总线结构：</p>
<ul>
<li><strong>单总线</strong>：所有操作数通过一条总线传输，结构简单但速度慢（需要分时传送两个操作数）。</li>
<li><strong>双总线</strong>：两个操作数可同时通过两条总线送入ALU，速度较快。</li>
<li><strong>三总线</strong>：两个操作数总线和一个结果总线，可并行输入输出，性能最高。</li>
</ul>
<h4 id="定点运算器的基本结构">定点运算器的基本结构</h4>
<p>定点运算器通常包括：</p>
<ul>
<li><strong>ALU</strong>：核心运算部件。</li>
<li><strong>通用寄存器组（Register File）</strong>：存放操作数和中间结果。</li>
<li><strong>状态寄存器（PSW/Flags）</strong>：存放ALU运算产生的状态标志。</li>
<li><strong>数据总线接口</strong>：与数据总线相连。</li>
<li><strong>控制逻辑</strong>：接收控制信号，协调数据通路。</li>
</ul>
<p>运算器可采用流水线结构进一步提高吞吐率。</p>
<h2 id="浮点运算方法和浮点运算器">浮点运算方法和浮点运算器</h2>
<h4 id="浮点加法减法运算">浮点加法、减法运算</h4>
<p>浮点加减法运算分为以下步骤：</p>
<ol>
<li><strong>对阶</strong>：使两数阶码相等。小阶向大阶看齐，尾数右移相应位数（右移时保留保护位和舍入位）。</li>
<li><strong>尾数加减</strong>：将对阶后的尾数按定点小数加减法运算。</li>
<li><strong>规格化</strong>：若结果尾数不符合规格化形式（如绝对值≥1或&lt;0.5），则进行左规（尾数左移，阶码减1）或右规（尾数右移，阶码加1）。</li>
<li><strong>舍入</strong>：采用就近舍入、朝0舍入等模式，处理右移时移出的位。</li>
<li><strong>溢出判断</strong>：阶码上溢或下溢时产生异常（如无穷大、非规格化数）。</li>
</ol>
<h4 id="浮点乘法除法运算">浮点乘法、除法运算</h4>
<ul>
<li><strong>浮点乘法</strong>：乘积的阶码 = 两数阶码相加（减去偏置常数），尾数相乘（定点乘法）。然后规格化、舍入、判溢出。</li>
<li><strong>浮点除法</strong>：商的阶码 = 被除数阶码 - 除数阶码（加上偏置常数），尾数相除。同样需要规格化等步骤。</li>
</ul>
<h4 id="浮点运算流水线">浮点运算流水线</h4>
<p>为了提高浮点运算吞吐率，现代处理器采用流水线浮点单元（FPU）。浮点流水线通常分为若干级：指令译码、操作数读取、执行（对阶、加减、规格化等流水多级）、写回结果。例如，Intel的FPU可同时处理多条浮点指令。流水线中存在资源冲突和写后读等冒险，需通过转发、停顿等机制解决。</p>
]]></content:encoded></item><item><title>计组概论</title><link>https://farmer3-c.github.io/posts/principles-of-computer-composition/intro/</link><pubDate>Wed, 03 Sep 2025 18:16:17 +0800</pubDate><guid>https://farmer3-c.github.io/posts/principles-of-computer-composition/intro/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%88%86%E7%B1%BB"&gt;计算机的分类&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%8F%91%E5%B1%95%E7%AE%80%E5%8F%B2"&gt;计算机的发展简史&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E4%BA%94%E4%BB%A3%E5%8F%98%E5%8C%96"&gt;计算机的五代变化&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%8D%8A%E5%AF%BC%E4%BD%93%E5%AD%98%E5%82%A8%E5%99%A8%E7%9A%84%E5%8F%91%E5%B1%95"&gt;半导体存储器的发展&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%BE%AE%E5%A4%84%E7%90%86%E5%99%A8%E7%9A%84%E5%8F%91%E5%B1%95"&gt;微处理器的发展&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E6%80%A7%E8%83%BD%E6%8C%87%E6%A0%87"&gt;计算机的性能指标&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E7%A1%AC%E4%BB%B6"&gt;计算机的硬件&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E7%A1%AC%E4%BB%B6%E7%BB%84%E6%88%90%E8%A6%81%E7%B4%A0"&gt;硬件组成要素&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%BF%90%E7%AE%97%E5%99%A8"&gt;运算器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%AD%98%E5%82%A8%E5%99%A8"&gt;存储器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%8E%A7%E5%88%B6%E5%99%A8"&gt;控制器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E9%80%82%E9%85%8D%E5%99%A8%E4%B8%8E%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA%E8%AE%BE%E5%A4%87"&gt;适配器与输入/输出设备&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E8%BD%AF%E4%BB%B6"&gt;计算机的软件&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E8%BD%AF%E4%BB%B6%E7%9A%84%E7%BB%84%E6%88%90%E4%B8%8E%E5%88%86%E7%B1%BB"&gt;软件的组成与分类&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%BD%AF%E4%BB%B6%E7%9A%84%E5%8F%91%E5%B1%95%E6%BC%94%E5%8F%98"&gt;软件的发展演变&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%9A%84%E5%B1%82%E6%AC%A1%E7%BB%93%E6%9E%84"&gt;计算机系统的层次结构&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E5%A4%9A%E7%BA%A7%E7%BB%84%E6%88%90%E7%9A%84%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F"&gt;多级组成的计算机系统&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%BD%AF%E4%BB%B6%E4%B8%8E%E7%A1%AC%E4%BB%B6%E7%9A%84%E9%80%BB%E8%BE%91%E7%AD%89%E4%BB%B7%E6%80%A7"&gt;软件与硬件的逻辑等价性&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="计算机的分类"&gt;计算机的分类&lt;/h2&gt;
&lt;p&gt;电子计算机从总体上来说分为两大类。一类是&lt;strong&gt;电子模拟计算机&lt;/strong&gt;，模拟计算机的特点是数值由连续量来表示，运算过程也是连续的。另一类是&lt;strong&gt;电子数字计算机&lt;/strong&gt;，数字计算机的主要特点是按位运算，并且不连续地跳动计算。&lt;/p&gt;
&lt;p&gt;此外，数字计算机还可根据规模和用途分为巨型机、大型机、小型机、微型机、工作站、嵌入式计算机等类别。巨型机用于科学计算和国家战略任务；微型机（个人计算机）普及最广；嵌入式系统则应用于智能设备、汽车电子等领域。&lt;/p&gt;
&lt;h2 id="计算机的发展简史"&gt;计算机的发展简史&lt;/h2&gt;
&lt;h4 id="计算机的五代变化"&gt;计算机的五代变化&lt;/h4&gt;
&lt;p&gt;世界上第一台电子数字计算机是1946年在美国宾夕法尼亚大学制成的ENIAC。这台机器用了18000多个电子管，占地170m²，重量达30吨，而运算速度只有5000次/秒。&lt;/p&gt;
&lt;p&gt;自从这台计算机问世70多年来，从使用器件的角度来说，计算机的发展大致经历了五代的变化。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;第一代为1946～1957年，电子管计算机。采用电子管作为逻辑元件，磁鼓或磁芯作为存储器，体积庞大、功耗高、可靠性低。主要用于科学计算。&lt;/li&gt;
&lt;li&gt;第二代为1958～1964年，晶体管计算机。晶体管代替电子管，体积缩小，功耗降低，速度提高。出现了高级编程语言（如FORTRAN、COBOL），开始应用于商业领域。&lt;/li&gt;
&lt;li&gt;第三代为1965～1971年，中小规模集成电路计算机。将多个晶体管集成在一块硅片上，使计算机进一步小型化，运算速度达到每秒数百万次。操作系统和分时系统开始普及。&lt;/li&gt;
&lt;li&gt;第四代为1972～1990年，大规模和超大规模集成电路计算机。一片芯片可集成数千至上万个元件。个人计算机（PC）诞生并迅速发展。1971年Intel 4004微处理器标志着微计算机时代的开始。&lt;/li&gt;
&lt;li&gt;第五代为1991年开始的巨大规模集成电路计算机。运算速度提高到每秒10亿次以上。由一片巨大规模集成电路实现的单片计算机（系统级芯片，SoC）开始出现。并行处理、多核技术、量子计算等新技术不断涌现。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;计算机从第三代起，与集成电路技术的发展密切相关。LSI（大规模集成电路）的采用，一块集成电路芯片上可以放置1000个元件，VLSI（超大规模集成电路）达到每个芯片1万个元件，现在的ULSI（甚大规模集成电路）芯片超过了100万个元件。1965年摩尔观察到芯片上的晶体管数量每年翻一番，1970年这种态势减慢成每18个月翻一番，这就是人们所称的&lt;strong&gt;摩尔定律&lt;/strong&gt;。该定律揭示了集成电路工艺的持续进步，但也面临物理极限的挑战。&lt;/p&gt;
&lt;h4 id="半导体存储器的发展"&gt;半导体存储器的发展&lt;/h4&gt;
&lt;p&gt;半导体存储器的发展经历了从磁芯存储器到半导体RAM和ROM的转变。20世纪60年代末，半导体存储器开始取代磁芯存储器，成为计算机的主要存储部件。随着集成电路技术的进步，存储容量不断增大，成本不断降低，速度也大幅提升。如今，DRAM（动态随机存取存储器）和SRAM（静态随机存取存储器）广泛应用于主存和高速缓存，闪存（Flash）则成为移动设备和固态硬盘的重要存储介质。近年来，3D NAND、MRAM、ReRAM等新型存储器不断涌现，进一步拓展了存储技术的边界。&lt;/p&gt;
&lt;h4 id="微处理器的发展"&gt;微处理器的发展&lt;/h4&gt;
&lt;p&gt;微处理器是将中央处理器的主要功能集成到一块芯片上的器件。1971年，英特尔公司推出了世界上第一块微处理器4004，4位字长，主频108kHz，开启了微处理器时代。随后，8位微处理器（Intel 8080、Zilog Z80）、16位（Intel 8086/8088、Motorola 68000）、32位（Intel 80386、ARM）、64位微处理器相继问世，性能不断提升，集成度从数千晶体管发展到数百亿晶体管。微处理器的出现极大地推动了个人计算机和嵌入式系统的发展。当前主流微处理器包括Intel Core系列、AMD Ryzen系列、ARM Cortex系列等，广泛应用于从智能手机到超级计算机的各类设备。&lt;/p&gt;
&lt;h4 id="计算机的性能指标"&gt;计算机的性能指标&lt;/h4&gt;
&lt;p&gt;衡量计算机性能的主要指标包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;主频（时钟频率）&lt;/strong&gt;：CPU的核心时钟速率，单位Hz。主频越高，单位时间内能完成的操作越多，但不同架构的CPU不能单纯比较主频。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;字长&lt;/strong&gt;：CPU一次能并行处理的二进制位数，通常为8、16、32、64位。字长影响数据精度和寻址范围。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;运算速度&lt;/strong&gt;：通常用每秒百万条指令（MIPS）或每秒浮点运算次数（FLOPS）表示。现代计算机常用SPEC等基准测试程序综合评估。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;存储容量&lt;/strong&gt;：主存（RAM）容量和辅存（硬盘/SSD）容量。容量越大，可运行的程序和数据越多。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;输入输出速度&lt;/strong&gt;：I/O带宽和响应时间，影响系统的整体运行效率。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;其他指标&lt;/strong&gt;：功耗、可靠性（MTBF）、可用性、可扩展性等。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="计算机的硬件"&gt;计算机的硬件&lt;/h2&gt;
&lt;h4 id="硬件组成要素"&gt;硬件组成要素&lt;/h4&gt;
&lt;p&gt;计算机硬件主要包括运算器、存储器、控制器、输入设备和输出设备五大部分。它们共同协作，实现数据的输入、存储、运算、控制和输出功能。这些部件通过总线（数据总线、地址总线、控制总线）相互连接，组成完整的硬件系统。&lt;/p&gt;
&lt;h4 id="运算器"&gt;运算器&lt;/h4&gt;
&lt;p&gt;运算器负责对数据进行算术和逻辑运算，是计算机的“计算核心”。它通常包括算术逻辑单元（ALU）、累加器（ACC）、暂存器、状态寄存器（标志寄存器）等部件。ALU执行加、减、乘、除等算术运算和与、或、非、异或等逻辑运算。运算器的设计对计算机的性能至关重要。&lt;/p&gt;
&lt;h4 id="存储器"&gt;存储器&lt;/h4&gt;
&lt;p&gt;存储器用于存放程序和数据，分为主存（内存）和辅存（外存）。主存速度快但容量有限，通常由DRAM构成，直接与CPU交换信息；辅存容量大但速度较慢，如硬盘、固态硬盘、光盘等，用于长期保存信息。存储器系统采用层次结构（Cache-主存-辅存）来兼顾速度、容量和成本。&lt;/p&gt;
&lt;h4 id="控制器"&gt;控制器&lt;/h4&gt;
&lt;p&gt;控制器负责协调和控制计算机各部件的工作，保证程序的正确执行。它通过时序信号和控制信号实现对各部件的管理。控制器从存储器中逐条取出指令，分析指令（译码），然后发出相应的微操作命令序列，驱动运算器、存储器、I/O设备执行指令规定的操作。控制器分为微程序控制器和硬布线控制器两种主要类型。&lt;/p&gt;
&lt;h4 id="适配器与输入输出设备"&gt;适配器与输入输出设备&lt;/h4&gt;
&lt;p&gt;适配器（也称接口或控制器）用于连接主机与各种输入输出设备，如键盘、鼠标、显示器、打印机、磁盘驱动器等，实现数据的输入和输出。适配器负责信号转换、数据缓冲、协议转换和错误处理。常见的I/O接口标准有USB、HDMI、SATA、PCIe等。输入设备将外部信息转换为计算机可识别的电信号；输出设备则将计算机的处理结果转换为人们可感知的形式（如显示、打印、声音）。&lt;/p&gt;
&lt;h2 id="计算机的软件"&gt;计算机的软件&lt;/h2&gt;
&lt;h4 id="软件的组成与分类"&gt;软件的组成与分类&lt;/h4&gt;
&lt;p&gt;计算机软件分为系统软件和应用软件。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;系统软件&lt;/strong&gt;：包括操作系统（Windows、Linux、macOS等）、编译程序（GCC、LLVM等）、解释程序、数据库管理系统（MySQL、Oracle等）、汇编程序、链接程序等，负责管理硬件资源和为应用软件提供运行环境。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;应用软件&lt;/strong&gt;：用于完成特定的用户任务，如文字处理（Word）、图像编辑（Photoshop）、科学计算（MATLAB）、网页浏览（Chrome）、游戏、财务软件等。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="软件的发展演变"&gt;软件的发展演变&lt;/h4&gt;
&lt;p&gt;软件从最初的机器语言（二进制代码）、汇编语言（符号化机器指令）发展到高级语言（FORTRAN、C、Java、Python等）和面向对象编程，极大地提高了开发效率和程序的可维护性。随着互联网和人工智能的发展，软件的功能和复杂性也在不断提升。软件开发方法也从结构化方法发展到面向对象、组件化、服务化、敏捷开发、DevOps等模式。开源软件的兴起深刻改变了软件产业格局。&lt;/p&gt;</description><content:encoded><![CDATA[<ul>
<li><a href="#%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%88%86%E7%B1%BB">计算机的分类</a></li>
<li><a href="#%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%8F%91%E5%B1%95%E7%AE%80%E5%8F%B2">计算机的发展简史</a>
<ul>
<li><a href="#%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E4%BA%94%E4%BB%A3%E5%8F%98%E5%8C%96">计算机的五代变化</a></li>
<li><a href="#%E5%8D%8A%E5%AF%BC%E4%BD%93%E5%AD%98%E5%82%A8%E5%99%A8%E7%9A%84%E5%8F%91%E5%B1%95">半导体存储器的发展</a></li>
<li><a href="#%E5%BE%AE%E5%A4%84%E7%90%86%E5%99%A8%E7%9A%84%E5%8F%91%E5%B1%95">微处理器的发展</a></li>
<li><a href="#%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E6%80%A7%E8%83%BD%E6%8C%87%E6%A0%87">计算机的性能指标</a></li>
</ul>
</li>
<li><a href="#%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E7%A1%AC%E4%BB%B6">计算机的硬件</a>
<ul>
<li><a href="#%E7%A1%AC%E4%BB%B6%E7%BB%84%E6%88%90%E8%A6%81%E7%B4%A0">硬件组成要素</a></li>
<li><a href="#%E8%BF%90%E7%AE%97%E5%99%A8">运算器</a></li>
<li><a href="#%E5%AD%98%E5%82%A8%E5%99%A8">存储器</a></li>
<li><a href="#%E6%8E%A7%E5%88%B6%E5%99%A8">控制器</a></li>
<li><a href="#%E9%80%82%E9%85%8D%E5%99%A8%E4%B8%8E%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA%E8%AE%BE%E5%A4%87">适配器与输入/输出设备</a></li>
</ul>
</li>
<li><a href="#%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E8%BD%AF%E4%BB%B6">计算机的软件</a>
<ul>
<li><a href="#%E8%BD%AF%E4%BB%B6%E7%9A%84%E7%BB%84%E6%88%90%E4%B8%8E%E5%88%86%E7%B1%BB">软件的组成与分类</a></li>
<li><a href="#%E8%BD%AF%E4%BB%B6%E7%9A%84%E5%8F%91%E5%B1%95%E6%BC%94%E5%8F%98">软件的发展演变</a></li>
</ul>
</li>
<li><a href="#%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%9A%84%E5%B1%82%E6%AC%A1%E7%BB%93%E6%9E%84">计算机系统的层次结构</a>
<ul>
<li><a href="#%E5%A4%9A%E7%BA%A7%E7%BB%84%E6%88%90%E7%9A%84%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F">多级组成的计算机系统</a></li>
<li><a href="#%E8%BD%AF%E4%BB%B6%E4%B8%8E%E7%A1%AC%E4%BB%B6%E7%9A%84%E9%80%BB%E8%BE%91%E7%AD%89%E4%BB%B7%E6%80%A7">软件与硬件的逻辑等价性</a></li>
</ul>
</li>
</ul>
<h2 id="计算机的分类">计算机的分类</h2>
<p>电子计算机从总体上来说分为两大类。一类是<strong>电子模拟计算机</strong>，模拟计算机的特点是数值由连续量来表示，运算过程也是连续的。另一类是<strong>电子数字计算机</strong>，数字计算机的主要特点是按位运算，并且不连续地跳动计算。</p>
<p>此外，数字计算机还可根据规模和用途分为巨型机、大型机、小型机、微型机、工作站、嵌入式计算机等类别。巨型机用于科学计算和国家战略任务；微型机（个人计算机）普及最广；嵌入式系统则应用于智能设备、汽车电子等领域。</p>
<h2 id="计算机的发展简史">计算机的发展简史</h2>
<h4 id="计算机的五代变化">计算机的五代变化</h4>
<p>世界上第一台电子数字计算机是1946年在美国宾夕法尼亚大学制成的ENIAC。这台机器用了18000多个电子管，占地170m²，重量达30吨，而运算速度只有5000次/秒。</p>
<p>自从这台计算机问世70多年来，从使用器件的角度来说，计算机的发展大致经历了五代的变化。</p>
<ul>
<li>第一代为1946～1957年，电子管计算机。采用电子管作为逻辑元件，磁鼓或磁芯作为存储器，体积庞大、功耗高、可靠性低。主要用于科学计算。</li>
<li>第二代为1958～1964年，晶体管计算机。晶体管代替电子管，体积缩小，功耗降低，速度提高。出现了高级编程语言（如FORTRAN、COBOL），开始应用于商业领域。</li>
<li>第三代为1965～1971年，中小规模集成电路计算机。将多个晶体管集成在一块硅片上，使计算机进一步小型化，运算速度达到每秒数百万次。操作系统和分时系统开始普及。</li>
<li>第四代为1972～1990年，大规模和超大规模集成电路计算机。一片芯片可集成数千至上万个元件。个人计算机（PC）诞生并迅速发展。1971年Intel 4004微处理器标志着微计算机时代的开始。</li>
<li>第五代为1991年开始的巨大规模集成电路计算机。运算速度提高到每秒10亿次以上。由一片巨大规模集成电路实现的单片计算机（系统级芯片，SoC）开始出现。并行处理、多核技术、量子计算等新技术不断涌现。</li>
</ul>
<p>计算机从第三代起，与集成电路技术的发展密切相关。LSI（大规模集成电路）的采用，一块集成电路芯片上可以放置1000个元件，VLSI（超大规模集成电路）达到每个芯片1万个元件，现在的ULSI（甚大规模集成电路）芯片超过了100万个元件。1965年摩尔观察到芯片上的晶体管数量每年翻一番，1970年这种态势减慢成每18个月翻一番，这就是人们所称的<strong>摩尔定律</strong>。该定律揭示了集成电路工艺的持续进步，但也面临物理极限的挑战。</p>
<h4 id="半导体存储器的发展">半导体存储器的发展</h4>
<p>半导体存储器的发展经历了从磁芯存储器到半导体RAM和ROM的转变。20世纪60年代末，半导体存储器开始取代磁芯存储器，成为计算机的主要存储部件。随着集成电路技术的进步，存储容量不断增大，成本不断降低，速度也大幅提升。如今，DRAM（动态随机存取存储器）和SRAM（静态随机存取存储器）广泛应用于主存和高速缓存，闪存（Flash）则成为移动设备和固态硬盘的重要存储介质。近年来，3D NAND、MRAM、ReRAM等新型存储器不断涌现，进一步拓展了存储技术的边界。</p>
<h4 id="微处理器的发展">微处理器的发展</h4>
<p>微处理器是将中央处理器的主要功能集成到一块芯片上的器件。1971年，英特尔公司推出了世界上第一块微处理器4004，4位字长，主频108kHz，开启了微处理器时代。随后，8位微处理器（Intel 8080、Zilog Z80）、16位（Intel 8086/8088、Motorola 68000）、32位（Intel 80386、ARM）、64位微处理器相继问世，性能不断提升，集成度从数千晶体管发展到数百亿晶体管。微处理器的出现极大地推动了个人计算机和嵌入式系统的发展。当前主流微处理器包括Intel Core系列、AMD Ryzen系列、ARM Cortex系列等，广泛应用于从智能手机到超级计算机的各类设备。</p>
<h4 id="计算机的性能指标">计算机的性能指标</h4>
<p>衡量计算机性能的主要指标包括：</p>
<ul>
<li><strong>主频（时钟频率）</strong>：CPU的核心时钟速率，单位Hz。主频越高，单位时间内能完成的操作越多，但不同架构的CPU不能单纯比较主频。</li>
<li><strong>字长</strong>：CPU一次能并行处理的二进制位数，通常为8、16、32、64位。字长影响数据精度和寻址范围。</li>
<li><strong>运算速度</strong>：通常用每秒百万条指令（MIPS）或每秒浮点运算次数（FLOPS）表示。现代计算机常用SPEC等基准测试程序综合评估。</li>
<li><strong>存储容量</strong>：主存（RAM）容量和辅存（硬盘/SSD）容量。容量越大，可运行的程序和数据越多。</li>
<li><strong>输入输出速度</strong>：I/O带宽和响应时间，影响系统的整体运行效率。</li>
<li><strong>其他指标</strong>：功耗、可靠性（MTBF）、可用性、可扩展性等。</li>
</ul>
<h2 id="计算机的硬件">计算机的硬件</h2>
<h4 id="硬件组成要素">硬件组成要素</h4>
<p>计算机硬件主要包括运算器、存储器、控制器、输入设备和输出设备五大部分。它们共同协作，实现数据的输入、存储、运算、控制和输出功能。这些部件通过总线（数据总线、地址总线、控制总线）相互连接，组成完整的硬件系统。</p>
<h4 id="运算器">运算器</h4>
<p>运算器负责对数据进行算术和逻辑运算，是计算机的“计算核心”。它通常包括算术逻辑单元（ALU）、累加器（ACC）、暂存器、状态寄存器（标志寄存器）等部件。ALU执行加、减、乘、除等算术运算和与、或、非、异或等逻辑运算。运算器的设计对计算机的性能至关重要。</p>
<h4 id="存储器">存储器</h4>
<p>存储器用于存放程序和数据，分为主存（内存）和辅存（外存）。主存速度快但容量有限，通常由DRAM构成，直接与CPU交换信息；辅存容量大但速度较慢，如硬盘、固态硬盘、光盘等，用于长期保存信息。存储器系统采用层次结构（Cache-主存-辅存）来兼顾速度、容量和成本。</p>
<h4 id="控制器">控制器</h4>
<p>控制器负责协调和控制计算机各部件的工作，保证程序的正确执行。它通过时序信号和控制信号实现对各部件的管理。控制器从存储器中逐条取出指令，分析指令（译码），然后发出相应的微操作命令序列，驱动运算器、存储器、I/O设备执行指令规定的操作。控制器分为微程序控制器和硬布线控制器两种主要类型。</p>
<h4 id="适配器与输入输出设备">适配器与输入输出设备</h4>
<p>适配器（也称接口或控制器）用于连接主机与各种输入输出设备，如键盘、鼠标、显示器、打印机、磁盘驱动器等，实现数据的输入和输出。适配器负责信号转换、数据缓冲、协议转换和错误处理。常见的I/O接口标准有USB、HDMI、SATA、PCIe等。输入设备将外部信息转换为计算机可识别的电信号；输出设备则将计算机的处理结果转换为人们可感知的形式（如显示、打印、声音）。</p>
<h2 id="计算机的软件">计算机的软件</h2>
<h4 id="软件的组成与分类">软件的组成与分类</h4>
<p>计算机软件分为系统软件和应用软件。</p>
<ul>
<li><strong>系统软件</strong>：包括操作系统（Windows、Linux、macOS等）、编译程序（GCC、LLVM等）、解释程序、数据库管理系统（MySQL、Oracle等）、汇编程序、链接程序等，负责管理硬件资源和为应用软件提供运行环境。</li>
<li><strong>应用软件</strong>：用于完成特定的用户任务，如文字处理（Word）、图像编辑（Photoshop）、科学计算（MATLAB）、网页浏览（Chrome）、游戏、财务软件等。</li>
</ul>
<h4 id="软件的发展演变">软件的发展演变</h4>
<p>软件从最初的机器语言（二进制代码）、汇编语言（符号化机器指令）发展到高级语言（FORTRAN、C、Java、Python等）和面向对象编程，极大地提高了开发效率和程序的可维护性。随着互联网和人工智能的发展，软件的功能和复杂性也在不断提升。软件开发方法也从结构化方法发展到面向对象、组件化、服务化、敏捷开发、DevOps等模式。开源软件的兴起深刻改变了软件产业格局。</p>
<h2 id="计算机系统的层次结构">计算机系统的层次结构</h2>
<h4 id="多级组成的计算机系统">多级组成的计算机系统</h4>
<p>现代计算机系统采用多级层次结构，从上到下依次为：</p>
<ul>
<li><strong>应用层</strong>：运行各种应用程序，与用户直接交互。</li>
<li><strong>高级语言层</strong>：由编译程序将高级语言翻译为汇编或机器语言。</li>
<li><strong>汇编语言层</strong>：使用助记符表示机器指令，通过汇编程序转换为机器码。</li>
<li><strong>操作系统层</strong>：提供系统调用接口，管理硬件资源和进程调度。</li>
<li><strong>机器语言层（指令集架构层）</strong>：指令系统定义计算机的软硬件接口。</li>
<li><strong>微程序层/硬件逻辑层</strong>：由微程序或硬布线实现指令解释。</li>
</ul>
<p>每一层都为上一层提供服务和接口，实现复杂功能的分层管理。层次化设计降低了系统复杂度，便于软硬件的分工和独立演进。</p>
<h4 id="软件与硬件的逻辑等价性">软件与硬件的逻辑等价性</h4>
<p>通过软件和硬件的协同设计，许多硬件功能可以用软件实现，反之亦然。这种逻辑等价性为计算机系统的灵活性和可扩展性提供了保障。例如，浮点运算可以软件模拟（慢）或硬件实现（快）；指令集可以通过微程序（可重写）或硬布线（固定）实现。软件和硬件的权衡本质上是速度、成本、灵活性的权衡。现代计算机采用固件（如BIOS/UEFI）作为软硬件之间的中间层。</p>
<p><a href="/pdf/%E8%AE%A1%E7%BB%84%E7%AC%AC1%E7%AB%A0.pdf">1</a></p>
]]></content:encoded></item><item><title>计算机组成原理</title><link>https://farmer3-c.github.io/posts/principles-of-computer-composition/post-2025-09-03/</link><pubDate>Wed, 03 Sep 2025 18:12:14 +0800</pubDate><guid>https://farmer3-c.github.io/posts/principles-of-computer-composition/post-2025-09-03/</guid><description>Principles of computer composition</description><content:encoded><![CDATA[<h1 id="计算机组成原理">计算机组成原理</h1>
<ul>
<li>
<p><a href="/2025/09/03/1/">概论</a></p>
</li>
<li>
<p><a href="/2025/09/03/2/">运算方法和运算器</a></p>
</li>
<li>
<p><a href="/2025/09/03/3/">存储系统</a></p>
</li>
<li>
<p><a href="/2025/09/03/4/">指令系统</a></p>
</li>
<li>
<p><a href="/2025/09/03/5/">中央处理器</a></p>
</li>
<li>
<p><a href="/2025/09/03/6/">总线系统</a></p>
</li>
</ul>
<h1 id="参考">参考</h1>
<hr>
<ul>
<li>白中英，戴志涛.计算机组成原理 第6版</li>
</ul>
]]></content:encoded></item></channel></rss>