mirror of
https://github.com/ClovertaTheTrilobita/SanYeCao-blog.git
synced 2026-10-25 21:43:53 +00:00
update draft
This commit is contained in:
parent
97bdca04f9
commit
0f91434607
1 changed files with 31 additions and 8 deletions
|
|
@ -4,8 +4,8 @@ pubDate: 2026-08-04
|
||||||
description: '欢迎来到琪露诺的奇妙数学教室,让我们从……加减法开始吧!'
|
description: '欢迎来到琪露诺的奇妙数学教室,让我们从……加减法开始吧!'
|
||||||
author: "三叶"
|
author: "三叶"
|
||||||
image:
|
image:
|
||||||
url: "https://files.seeusercontent.com/2026/08/04/fkE6/pasted-image-1785836458506.webp"
|
url: "https://files.seeusercontent.com/2026/09/17/Dn5p/_20260917235541_13_363.webp"
|
||||||
alt: "bintree"
|
alt: "ciruno"
|
||||||
tags: ["学习笔记", "计算机组成原理"]
|
tags: ["学习笔记", "计算机组成原理"]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -95,7 +95,7 @@ $$
|
||||||
|
|
||||||
没错,**32位操作系统**代表着,对于`int`整形的变量,一共有32个**比特**用来存储这么一个数。
|
没错,**32位操作系统**代表着,对于`int`整形的变量,一共有32个**比特**用来存储这么一个数。
|
||||||
|
|
||||||
也就是说,二进制数的长度最长可以有32位。
|
也就是说,整形二进制数的长度最长可以有32位。
|
||||||
|
|
||||||
好多!那么程序员在调试的时候总不能用手指头指着屏幕上的0和1一个一个数过去吧?
|
好多!那么程序员在调试的时候总不能用手指头指着屏幕上的0和1一个一个数过去吧?
|
||||||
|
|
||||||
|
|
@ -149,9 +149,7 @@ $$
|
||||||
$$
|
$$
|
||||||
130\bmod 128=2
|
130\bmod 128=2
|
||||||
$$
|
$$
|
||||||
没错,我们这样子计算,刚好就是在将计算结果对$128$进行<b>[模运算](https://zh.wikipedia.org/zh-cn/%E6%A8%A1%E7%AE%97%E6%95%B8)</b>!
|
没错,我们这样子计算,刚好就是在将计算结果对$128$进行<b>[模运算](https://zh.wikipedia.org/zh-cn/%E6%A8%A1%E7%AE%97%E6%95%B8)</b>。那我们是不是可以巧妙地利用这一特性,通过加法来实现减法呢?
|
||||||
|
|
||||||
那我们是不是可以巧妙地利用这一特性,通过加法来实现减法呢?!
|
|
||||||
|
|
||||||
比如说我们有两个数:$50$和$30$,我们需要计算$50-30$
|
比如说我们有两个数:$50$和$30$,我们需要计算$50-30$
|
||||||
|
|
||||||
|
|
@ -213,7 +211,7 @@ unsigned int i = 129;
|
||||||
|
|
||||||
## 二、加减法的运算电路
|
## 二、加减法的运算电路
|
||||||
|
|
||||||
在计算机中,传统的**运算器**由**算术逻辑单元ALU**、**移位器**、**状态寄存器PSW**和**通用寄存器组**等组成。
|
在计算机中,**传统**的**运算器**由**算术逻辑单元ALU**、**移位器**、**状态寄存器PSW**和**通用寄存器组**等组成。
|
||||||
|
|
||||||
但是我们先别管那么多,首先我们来看ALU。ALU的核心部件是**加法器**。
|
但是我们先别管那么多,首先我们来看ALU。ALU的核心部件是**加法器**。
|
||||||
|
|
||||||
|
|
@ -266,4 +264,29 @@ $$
|
||||||
|
|
||||||
我们把它封装起来,仅对外保留输入输出,那它的逻辑符号表示为:
|
我们把它封装起来,仅对外保留输入输出,那它的逻辑符号表示为:
|
||||||
|
|
||||||
<img src="https://files.seeusercontent.com/2026/09/17/Ut1i/drawio.png" alt="一位全加器.png" title="一位全加器" style="display: block; margin: 0px auto; zoom: 67%;">
|
<img src="https://files.seeusercontent.com/2026/09/17/Ut1i/drawio.png" alt="一位全加器.png" title="一位全加器" style="display: block; margin: 0px auto; zoom: 67%;">
|
||||||
|
|
||||||
|
### 2. 串行进位加法器
|
||||||
|
|
||||||
|
将$n$个全加器级联就可以构成$n$位<b>串行进位加法器</b>(又称行波进位加法器),如下图所示
|
||||||
|
|
||||||
|
<img src="https://files.seeusercontent.com/2026/09/17/V1ov/drawio.png" alt="一位全加器.png" title="一位全加器" style="display: block; margin: 0px auto; zoom: 67%;">
|
||||||
|
|
||||||
|
将它们这样子串在一起,就可以轻松实现两个二进制数的加法。
|
||||||
|
|
||||||
|
我们把它封装成一个整体,就得到了传统的**加法器**。
|
||||||
|
|
||||||
|
### 3. 带标志加法器
|
||||||
|
|
||||||
|
对于$n$位加法器来说,除了得到运算结果外,我们经常需要知道计算过程中是否发生了溢出、结果正负性、结果是否为零等等信息。
|
||||||
|
|
||||||
|
我们要求加法器能生成以下标志位:
|
||||||
|
|
||||||
|
- $OF$:**溢出标志**,为`1`表示溢出,`0`表示未溢出。$OF=C_n \oplus C_{n-1}$
|
||||||
|
- $SF$:**符号标志**,等于结果的最高有效位,`1`表示负,`0`表示正。$SF=S_i$
|
||||||
|
- $ZF$:**零标志**,`1`表示加减运算的结果为$0$。在所有位均为`0`时设置为`1`。
|
||||||
|
- $CF$:<b>进位/借位标志</b>,用于判断无符号数的加减运算是否发生溢出。`1`表示溢出,`0`表示未溢出。
|
||||||
|
|
||||||
|
加法器的符号就可以表示为:
|
||||||
|
|
||||||
|
<img src="https://files.seeusercontent.com/2026/09/17/tE8g/_20260918000903_15_363.webp" alt="一位全加器.png" title="一位全加器" style="display: block; margin: 0px auto; zoom: 18%;">
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue