Skip to content

Commit 4d7af34

Browse files
author
cxuan
committed
计算机组成相关目录提交
1 parent 78d24cc commit 4d7af34

10 files changed

Lines changed: 148 additions & 98 deletions

assembly/assembly02.md

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,24 @@
11
# 寄存器
22

3-
> 我把自己以往的文章汇总成为了 Github ,欢迎各位大佬 star
4-
> https://github.com/crisxuan/bestJavaer
3+
* [寄存器](#寄存器)
4+
* [认识寄存器](#认识寄存器)
5+
* [计算机架构中的寄存器](#计算机架构中的寄存器)
6+
* [通用寄存器](#通用寄存器)
7+
* [AX 寄存器](#ax-寄存器)
8+
* [BX 寄存器](#bx-寄存器)
9+
* [CX 寄存器](#cx-寄存器)
10+
* [DX 寄存器](#dx-寄存器)
11+
* [索引寄存器](#索引寄存器)
12+
* [状态和控制寄存器](#状态和控制寄存器)
13+
* [物理地址](#物理地址)
14+
* [什么是段](#什么是段)
15+
* [段寄存器](#段寄存器)
16+
* [CS 寄存器](#cs-寄存器)
17+
* [什么是 Code Segment](#什么是-code-segment)
18+
* [DS 寄存器](#ds-寄存器)
19+
* [](#栈)
20+
* [栈和 SS 寄存器](#栈和-ss-寄存器)
21+
* [栈顶越界问题](#栈顶越界问题)
522

623
下面我们就来介绍一下关于寄存器的相关内容。我们知道,`寄存器`是 CPU 内部的构造,它主要用于信息的存储。除此之外,CPU 内部还有`运算器`,负责处理数据;`控制器`控制其他组件;`外部总线`连接 CPU 和各种部件,进行数据传输;`内部总线`负责 CPU 内部各种组件的数据处理。
724

computer-basic/computer-binary.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# 程序员需要了解的硬核知识之二进制
22

3+
* [程序员需要了解的硬核知识之二进制](#程序员需要了解的硬核知识之二进制)
4+
* [为什么用二进制表示](#为什么用二进制表示)
5+
* [什么是二进制数](#什么是二进制数)
6+
* [移位运算和乘除的关系](#移位运算和乘除的关系)
7+
* [便于计算机处理的补数](#便于计算机处理的补数)
8+
* [算数右移和逻辑右移的区别](#算数右移和逻辑右移的区别)
9+
* [逻辑运算的窍门](#逻辑运算的窍门)
10+
311
我们都知道,计算机的底层都是使用二进制数据进行数据流传输的,那么为什么会使用二进制表示计算机呢?或者说,什么是二进制数呢?在拓展一步,如何使用二进制进行加减乘除?二进制数如何表示负数呢?本文将一一为你揭晓。
412

513
## 为什么用二进制表示
@@ -123,4 +131,9 @@ IC元件两侧排列的四方形块就是引脚,IC的所有引脚,只有两
123131

124132
掌握逻辑运算的窍门,就是要摒弃二进制数表示数值这一个想法。大家不要把二进制数表示的值当作数值,应该把它看成是 开关上的 `ON/OFF`
125133

126-
![](https://img2020.cnblogs.com/blog/1515111/202006/1515111-20200606164033487-1842421997.png)
134+
![image-20210716163352584](https://tva1.sinaimg.cn/large/008i3skNly1gsivkbczxoj31l20t8al5.jpg)
135+
136+
![image-20210716163433337](https://tva1.sinaimg.cn/large/008i3skNly1gsivl4khz9j31d60h8mze.jpg)
137+
138+
139+

computer-basic/computer-compilation.md

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11
# 程序员需要了解的硬核知识之汇编语言
22

3+
* [程序员需要了解的硬核知识之汇编语言](#程序员需要了解的硬核知识之汇编语言)
4+
* [汇编语言和本地代码](#汇编语言和本地代码)
5+
* [通过编译器输出汇编语言的源代码](#通过编译器输出汇编语言的源代码)
6+
* [不会转换成本地代码的伪指令](#不会转换成本地代码的伪指令)
7+
* [汇编语言的语法是 操作码 + 操作数](#汇编语言的语法是-操作码--操作数)
8+
* [指令解析](#指令解析)
9+
* [函数的调用机制](#函数的调用机制)
10+
* [函数的内部处理](#函数的内部处理)
11+
* [全局变量和局部变量](#全局变量和局部变量)
12+
* [临时确保局部变量使用的内存空间](#临时确保局部变量使用的内存空间)
13+
* [循环控制语句的处理](#循环控制语句的处理)
14+
* [条件分支的处理方法](#条件分支的处理方法)
15+
* [了解程序运行逻辑的必要性](#了解程序运行逻辑的必要性)
16+
317
之前的系列文章从 CPU 和内存方面简单介绍了一下汇编语言,但是还没有系统的了解一下汇编语言,汇编语言作为第二代计算机语言,会用一些容易理解和记忆的字母,单词来代替一个特定的指令,作为高级编程语言的基础,有必要系统的了解一下汇编语言,那么本篇文章希望大家跟我一起来了解一下汇编语言。
418

519
## 汇编语言和本地代码
@@ -728,11 +742,7 @@ mov dword ptr[_counter],eax ; 将 eax 寄存器的值存入 counter 中。
728742

729743
现在基本上没有人用汇编语言来编写程序了,因为 C、Java等高级语言的效率要比汇编语言快很多。不过,汇编语言的经验还是很重要的,通过借助汇编语言,我们可以更好的了解计算机运行机制。
730744

745+
![image-20210716163352584](https://tva1.sinaimg.cn/large/008i3skNly1gsivkbczxoj31l20t8al5.jpg)
731746

747+
![image-20210716163433337](https://tva1.sinaimg.cn/large/008i3skNly1gsivl4khz9j31d60h8mze.jpg)
732748

733-
文章参考:
734-
735-
《程序是怎样跑起来的》第十章
736-
737-
关注公众号后台回复 191106 即可获得《程序是怎样跑起来的》电子书
738-
![](https://img2018.cnblogs.com/blog/1515111/201912/1515111-20191203123909055-1340499698.png)

computer-basic/computer-compression.md

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
# 程序员需要了解的硬核知识之压缩算法
22

3+
* [程序员需要了解的硬核知识之压缩算法](#程序员需要了解的硬核知识之压缩算法)
4+
* [认识压缩算法](#认识压缩算法)
5+
* [文件存储](#文件存储)
6+
* [压缩算法的定义](#压缩算法的定义)
7+
* [几种常用压缩算法的理解](#几种常用压缩算法的理解)
8+
* [RLE 算法的机制](#rle-算法的机制)
9+
* [RLE 算法的缺点](#rle-算法的缺点)
10+
* [哈夫曼算法和莫尔斯编码](#哈夫曼算法和莫尔斯编码)
11+
* [用二叉树实现哈夫曼算法](#用二叉树实现哈夫曼算法)
12+
* [哈夫曼树能够提升压缩比率](#哈夫曼树能够提升压缩比率)
13+
* [可逆压缩和非可逆压缩](#可逆压缩和非可逆压缩)
14+
315
## 认识压缩算法
416

517
我们想必都有过`压缩``解压缩`文件的经历,当文件太大时,我们会使用文件压缩来降低文件的占用空间。比如微信上传文件的限制是100 MB,我这里有个文件夹无法上传,但是我解压完成后的文件一定会小于 100 MB,那么我的文件就可以上传了。
@@ -164,11 +176,7 @@ RLE 的压缩机制比较简单,所以 RLE 算法的程序也比较容易编
164176

165177
一般来说,JPEG格式的文件是非可逆压缩,因此还原后有部分图像信息比较模糊。GIF 是可逆压缩
166178

167-
文章参考:
168-
169-
《程序是怎样跑起来的 第六章》
179+
![image-20210716163352584](https://tva1.sinaimg.cn/large/008i3skNly1gsivkbczxoj31l20t8al5.jpg)
170180

171-
https://baike.baidu.com/item/压缩算法/2762648
181+
![image-20210716163433337](https://tva1.sinaimg.cn/large/008i3skNly1gsivl4khz9j31d60h8mze.jpg)
172182

173-
关注公众号后台回复 191106 即可获得《程序是怎样跑起来的》电子书
174-
![](https://img2018.cnblogs.com/blog/1515111/201911/1515111-20191106113841668-946566133.png)

computer-basic/computer-cpu.md

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
# 程序员需要了解的硬核知识之CPU
22

3+
* [程序员需要了解的硬核知识之CPU](#程序员需要了解的硬核知识之cpu)
4+
* [CPU是什么](#cpu是什么)
5+
* [CPU 实际做什么](#cpu-实际做什么)
6+
* [CPU 的内部结构](#cpu-的内部结构)
7+
* [CPU 是寄存器的集合体](#cpu-是寄存器的集合体)
8+
* [计算机语言](#计算机语言)
9+
* [汇编语言](#汇编语言)
10+
* [程序计数器](#程序计数器)
11+
* [条件分支和循环机制](#条件分支和循环机制)
12+
* [标志寄存器](#标志寄存器)
13+
* [函数调用机制](#函数调用机制)
14+
* [通过地址和索引实现数组](#通过地址和索引实现数组)
15+
* [CPU 指令执行过程](#cpu-指令执行过程)
16+
* [总结](#总结)
17+
318
大家都是程序员,大家都是和计算机打交道的程序员,大家都是和计算机中软件硬件打交道的程序员,大家都是和`CPU`打交道的程序员,所以,不管你是玩儿硬件的还是做软件的,你的世界都少不了计算机最核心的 - CPU
419

520
## CPU是什么
@@ -187,29 +202,7 @@ CPU 的执行机制比较有意思,假设累加寄存器中存储的 XXX 和
187202
* 还提到了函数调用机制是怎样的。
188203
* CPU 指令的执行过程
189204

205+
![image-20210716163352584](https://tva1.sinaimg.cn/large/008i3skNly1gsivkbczxoj31l20t8al5.jpg)
190206

207+
![image-20210716163433337](https://tva1.sinaimg.cn/large/008i3skNly1gsivl4khz9j31d60h8mze.jpg)
191208

192-
下面为自己做个宣传,欢迎关注公众号 `Java建设者`,号主是Java技术栈,热爱技术,喜欢阅读,热衷于分享和总结,希望能把每一篇好文章分享给成长道路上的你。关注公众号回复 `002` 领取为你特意准备的大礼包,你一定会喜欢并收藏的。
193-
194-
![](https://img2018.cnblogs.com/blog/1515111/201910/1515111-20191021131206623-1538389601.png)
195-
196-
197-
198-
199-
参考资料:
200-
201-
https://en.wikipedia.org/wiki/Central_processing_unit
202-
203-
https://www.digitaltrends.com/computing/what-is-a-cpu/
204-
205-
https://baike.baidu.com/item/寄存器/187682?fr=aladdin
206-
207-
https://baike.baidu.com/item/内存/103614?fr=aladdin
208-
209-
https://blog.csdn.net/mark_lq/article/details/44245423
210-
211-
https://baike.baidu.com/item/程序计数器/3219536?fr=aladdin
212-
213-
《程序是怎样跑起来的》
214-
215-
https://zhidao.baidu.com/question/124425422.html

computer-basic/computer-disk.md

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
# 程序员需要了解的硬核知识之磁盘
22

3+
* [程序员需要了解的硬核知识之磁盘](#程序员需要了解的硬核知识之磁盘)
4+
* [认识磁盘](#认识磁盘)
5+
* [程序不读入内存就无法运行](#程序不读入内存就无法运行)
6+
* [磁盘构件](#磁盘构件)
7+
* [磁盘缓存](#磁盘缓存)
8+
* [虚拟内存](#虚拟内存)
9+
* [虚拟内存与内存的交换方式](#虚拟内存与内存的交换方式)
10+
* [节约内存](#节约内存)
11+
* [通过 DLL 文件实现函数共有](#通过-dll-文件实现函数共有)
12+
* [通过调用 _stdcall 来减少程序文件的大小](#通过调用-_stdcall-来减少程序文件的大小)
13+
* [磁盘的物理结构](#磁盘的物理结构)
14+
315
我们大家知道,计算机的五大基础部件是 `存储器``控制器``运算器``输入和输出设备`,其中从存储功能的角度来看,可以把存储器分为`内存``磁盘`,内存我们上面的文章已经介绍过了,那么此篇文章我们来介绍一下磁盘以及内存和磁盘的关系。
416

517
## 认识磁盘
@@ -157,21 +169,7 @@ C 语言通过栈来传递函数的参数,使用 `push` 是往栈中存入数
157169

158170
然后我们继续写入一些东西,当文件大小到达 512 个字节时,已用空间也是 512 字节,但是当我们继续写入一个字符时,我们点开属性会发现磁盘空间会变为 1024 个字节(= 2 簇),通过这个实验我们可以证明磁盘是以簇为单位来保存的。
159171

172+
![image-20210716163352584](https://tva1.sinaimg.cn/large/008i3skNly1gsivkbczxoj31l20t8al5.jpg)
160173

161-
文章参考:
162-
163-
[磁盘](https://baike.baidu.com/item/磁盘/2842227?fr=aladdin)
164-
165-
[磁盘缓存](https://baike.baidu.com/item/磁盘缓存/2047109?fr=aladdin)
166-
167-
[虚拟内存](https://baike.baidu.com/item/虚拟内存)
168-
169-
《程序是怎样跑起来的 第四章》
170-
171-
http://www.intohard.com/article-436-1.html
172-
173-
下面为自己做个宣传,欢迎关注公众号 Java建设者,号主是Java技术栈,热爱技术,喜欢阅读,热衷于分享和总结,希望能把每一篇好文章分享给成长道路上的你。关注公众号回复 002 领取为你特意准备的大礼包,你一定会喜欢并收藏的。
174-
![](https://img2018.cnblogs.com/blog/1515111/201911/1515111-20191101123031819-1150695682.png)
175-
176-
174+
![image-20210716163433337](https://tva1.sinaimg.cn/large/008i3skNly1gsivl4khz9j31d60h8mze.jpg)
177175

computer-basic/computer-hardware.md

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
# 程序员需要了解的硬核知识之控制硬件
22

3+
* [程序员需要了解的硬核知识之控制硬件](#程序员需要了解的硬核知识之控制硬件)
4+
* [应用和硬件的关系](#应用和硬件的关系)
5+
* [支持硬件输入输出的 IN 指令和 OUT 指令](#支持硬件输入输出的-in-指令和-out-指令)
6+
* [测试输入和输出程序](#测试输入和输出程序)
7+
* [外围设备的中断请求](#外围设备的中断请求)
8+
* [用中断来实现实时处理](#用中断来实现实时处理)
9+
* [利用 DMA 实现短时间内大量数据传输](#利用-dma-实现短时间内大量数据传输)
10+
* [文字和图片的显示机制](#文字和图片的显示机制)
11+
312
## 应用和硬件的关系
413

514
我们作为程序员一般很少直接操控硬件,我们一般通过 C、Java 等高级语言编写的程序起到间接控制硬件的作用。所以大家很少直接接触到硬件的指令,硬件的控制是由 `Windows 操作系统` 全权负责的。
@@ -154,15 +163,7 @@ I/O 端口号、IRQ、DMA 通道可以说是识别外围设备的3点组合。
154163

155164
虽然计算机领域新技术在不断涌现,但是计算机所能处理的事情,始终只是对输入的数据进行运算,并把结果输出,这一点是永远不会发生变化的。
156165

166+
![image-20210716163352584](https://tva1.sinaimg.cn/large/008i3skNly1gsivkbczxoj31l20t8al5.jpg)
157167

168+
![image-20210716163433337](https://tva1.sinaimg.cn/large/008i3skNly1gsivl4khz9j31d60h8mze.jpg)
158169

159-
文章参考:
160-
161-
《程序是怎样跑起来的》
162-
163-
https://baike.baidu.com/item/中断控制器/15732992?fr=aladdin
164-
165-
https://baike.baidu.com/item/中断/3933007#viewPageContent
166-
167-
关注公众号后台回复 191106 即可获得《程序是怎样跑起来的》电子书
168-
![](https://img2018.cnblogs.com/blog/1515111/201912/1515111-20191210211253026-1972250895.png)

computer-basic/computer-os.md

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
# 程序员需要了解的硬核知识之操作系统入门
22

3+
* [程序员需要了解的硬核知识之操作系统入门](#程序员需要了解的硬核知识之操作系统入门)
4+
* [操作系统环境](#操作系统环境)
5+
* [Windows 操作系统克服了CPU以外的硬件差异](#windows-操作系统克服了cpu以外的硬件差异)
6+
* [不同操作系统的 API 差异性](#不同操作系统的-api-差异性)
7+
* [FreeBSD Port 帮你轻松使用源代码](#freebsd-port-帮你轻松使用源代码)
8+
* [可以使用虚拟机获取其他环境](#可以使用虚拟机获取其他环境)
9+
* [提供相同运行环境的 Java 虚拟机](#提供相同运行环境的-java-虚拟机)
10+
* [BIOS 和引导](#bios-和引导)
11+
312
## 操作系统环境
413

514
程序中包含着`运行环境`这一内容,可以说 **运行环境 = 操作系统 + 硬件** ,操作系统又可以被称为软件,它是由一系列的指令组成的。我们不介绍操作系统,我们主要来介绍一下硬件的识别。
@@ -82,12 +91,7 @@ Windows 有专门的 Windows 虚拟机,Macintosh 有 Macintosh 专门的虚拟
8291

8392
电脑开机后,BIOS 会确认硬件是否正常运行,没有异常的话会直接启动引导程序。引导程序的功能是把在硬盘等记录的 OS 加载到内存中运行。虽然启动应用是 OS 的功能,但 OS 不能启动自己,是通过引导程序来启动的。
8493

94+
![image-20210716163352584](https://tva1.sinaimg.cn/large/008i3skNly1gsivkbczxoj31l20t8al5.jpg)
8595

96+
![image-20210716163433337](https://tva1.sinaimg.cn/large/008i3skNly1gsivl4khz9j31d60h8mze.jpg)
8697

87-
文章参考:
88-
89-
《程序是怎样跑起来的》第七章
90-
91-
关注公众号后台回复 191106 即可获得《程序是怎样跑起来的》电子书
92-
93-
![](https://img2018.cnblogs.com/blog/1515111/201911/1515111-20191113210249969-1048272462.png)

computer-basic/computer-osandapp.md

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11
# 程序员需要了解的硬核知识之操作系统和应用
22

3+
* [程序员需要了解的硬核知识之操作系统和应用](#程序员需要了解的硬核知识之操作系统和应用)
4+
* [操作系统功能的历史](#操作系统功能的历史)
5+
* [要把操作系统放在第一位](#要把操作系统放在第一位)
6+
* [系统调用和编程语言的移植性](#系统调用和编程语言的移植性)
7+
* [操作系统和高级编程语言使硬件抽象化](#操作系统和高级编程语言使硬件抽象化)
8+
* [Windows 操作系统的特征](#windows-操作系统的特征)
9+
* [32位操作系统](#32位操作系统)
10+
* [通过 API 函数集来提供系统调用](#通过-api-函数集来提供系统调用)
11+
* [提供采用了 GUI 的用户界面](#提供采用了-gui-的用户界面)
12+
* [通过 WYSIWYG 实现打印输出](#通过-wysiwyg-实现打印输出)
13+
* [提供多任务功能](#提供多任务功能)
14+
* [提供网络功能和数据库功能](#提供网络功能和数据库功能)
15+
* [通过即插即用实现设备驱动的自动设定](#通过即插即用实现设备驱动的自动设定)
16+
317
利用计算机运行程序大部分都是为了提高处理效率。例如,Microsoft Word 这样的文字处理软件,是用来提高文本文件处理效率的程序,Microsoft Excel 等表格计算软件,是用来提高账本处理效率的程序。这种为了提高特定处理效率的程序统称为 `应用`
418

519
程序员的工作就是编写各种各样的应用来提高工作效率,程序员一般不编写操作系统,但是程序员编写的应用离不开操作系统,此篇文章我们就针对 Windows 操作系统来说明一下操作系统和应用之间的关系。
@@ -170,15 +184,7 @@ Windows 中,网络功能是作为标准功能提供的。数据库(数据库
170184

171185
有时 DLL 文件也会同设备驱动文件一起安装。这些 DLL 文件中存储着用来利用该新追加的硬件API,通过 API ,可以制作出运行该硬件的心应用。
172186

187+
![image-20210716163352584](https://tva1.sinaimg.cn/large/008i3skNly1gsivkbczxoj31l20t8al5.jpg)
173188

189+
![image-20210716163433337](https://tva1.sinaimg.cn/large/008i3skNly1gsivl4khz9j31d60h8mze.jpg)
174190

175-
文章参考:
176-
177-
https://baike.baidu.com/item/汇编语言/61826?fr=aladdin
178-
179-
《程序是怎样跑起来的》第九章
180-
181-
https://baike.baidu.com/item/Windows操作系统/852149?fr=aladdin
182-
183-
关注公众号后台回复 191106 即可获得《程序是怎样跑起来的》电子书
184-
![](https://img2018.cnblogs.com/blog/1515111/201911/1515111-20191118230236985-1987215961.png)

0 commit comments

Comments
 (0)