惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
N
Netflix TechBlog - Medium
Google Online Security Blog
Google Online Security Blog
月光博客
月光博客
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
M
MIT News - Artificial intelligence
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
博客园 - 三生石上(FineUI控件)
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
The Cloudflare Blog
Blog — PlanetScale
Blog — PlanetScale
F
Full Disclosure
G
Google Developers Blog
罗磊的独立博客
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
A
About on SuperTechFans
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
GbyAI
GbyAI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
The Register - Security
The Register - Security
U
Unit 42
D
Docker
Martin Fowler
Martin Fowler
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
博客园_首页
Google DeepMind News
Google DeepMind News

faryou的博客

5月月考 - faryou的博客 - 日记 faryou的博客-五一回老家 【汇编 - 功能】中断安装中断实现 【汇编&硬件】时钟中断的具体实现 faryou的博客-这些年,我不再看《熊出没》 【汇编&硬件】关机中断的具体实现 【汇编&硬件】网络连接相关中断的具体实现 faryou的博客-年初小记 【汇编&硬件】鼠标控制中断的具体实现 【汇编&硬件】声音输出中断的具体实现 【汇编&硬件】屏幕输出中断的具体实现 【汇编&硬件】磁盘读取中断的具体实现 【汇编&硬件】键盘读取中断的具体实现 【汇编】汇编环境的搭建及Debug的使用教程 faryou的博客-关于本站即日起实行“一站三体”运营制度 【汇编基础教程】完结篇 写在最后:前言 【汇编基础教程】使用BIOS的中断实现键盘输入及磁盘I/O 【汇编基础教程】中断 【汇编基础教程】端口 【汇编基础教程】标志寄存器 【汇编基础教程】再谈栈 【汇编基础教程】段 【汇编基础教程】来存一些数据! 【汇编基础教程】寄存器和内存&一些基本命令的说明 【汇编基础教程】来写个“函数” 【汇编基础教程】更灵活的定位内存 【汇编基础教程】理解一下[bx]和loop指令 【汇编基础教程】跳一跳! faryou的博客-我的竞赛经历&对人生的一些思考 faryou的博客-关于现在中小学计算机课的一些想法及思考 faryou的博客-2025年度总结 faryou的博客-临平山下十五年 faryou的博客-Windows 10即将停止支持,谈谈自己从小到大用电脑的感受 faryou的博客-谈谈一名10后的怀旧情怀 【汇编基础教程】8086CPU工作原理 【C语言】指针的理解与应用 【算法教程】【C/C++】DP(动态规划):区间DP——程序设计思路与代码实现 【算法教程】【C/C++】BFS(广度优先搜索)——程序设计思路与代码实现 【算法教程】【C/C++】DFS(深度优先搜索)——程序设计思路与代码实现 【算法教程】【C/C++】单源最短路径——程序设计思路与代码实现 【算法教程】【C/C++】最小生成树——程序设计思路与代码实现 【算法教程】【C/C++】并查集——程序设计思路与代码实现 【算法教程】【C/C++】DP(动态规划):背包DP——程序设计思路与代码实现 【算法教程】【C/C++】DP(动态规划):简单动规问题——程序设计思路与代码实现 【算法教程】【C/C++】递推——程序设计思路与代码实现 【算法教程】【C/C++】三分算法——程序设计思路与代码实现 【算法教程】【C/C++】二分答案——程序设计思路与代码实现 【算法教程】【C/C++】二分查找——程序设计思路与代码实现 【算法教程】【C/C++】贪心算法——程序设计思路与代码实现 【算法教程】【C/C++】基础数学:快排——程序设计思路与代码实现 【算法教程】【C/C++】基础数学:快速幂——程序设计思路与代码实现 【算法教程】【C/C++】基础数学:进制转换——程序设计思路与代码实现 一文弄懂C++中的自定义函数 faryou的博客-2024年度总结
【汇编】漫谈:学习汇编后的一些思考
作者: faryou · 2026-02-01 · via faryou的博客

前言

学习汇编之后,我们或许能够思考一些之前无法考虑的问题。本文是个人的一些想法,分享给大家,也许可以激发大家的思维。

操作系统的思考

学了汇编,我们可以对一些结构较为简单的操作系统进行研究。
我们来考虑一个DOS操作系统,我们想想一个DOS系统由哪些部分组成,无非是引导、硬件控制(最基本的,磁盘、键盘和屏幕)、提供一些中断程序(即所谓"API"),以及一个基本的命令行。这也是MS-DOS1.25中的全部。
很显然,我们如果要独立制作一个DOS操作系统,就应该从这些方面入手。我们已经学完了汇编的基础知识。很显然,前面三个部分以我们目前的汇编能力,外加学习一点硬件知识,有希望能完成;最后一个部分涉及到字符串的处理,这需要我们学习一些相关的算法(如果想实现复杂点的语法使用C语言更为方便,但这里仅考虑最简单的情况)。
因此,我们不妨将这样一个较为基础的DOS作为练习16位汇编的大作业~

高级语言的思考

我们思考一下C语言里的函数、变量、结构体等概念的实现。
首先,我们在使用函数的时候经常进行嵌套及递归操作,那么如何保存之前函数中的数据就成为了一个问题。汇编语言中,我们使用call调用子程序之后,子程序会先把寄存器入栈。而在C语言的函数中,我们需要暂存局部变量,并且函数过程结束之后,应当及时释放局部变量占用的内存。很显然,函数调用及嵌套具有“先进后出”的性质,即越先进入的函数越靠后结束,这完美契合了栈的特性。如果我们构建一个“栈”,存下局部变量,那么只需要在函数调用前后进出栈,就可以很好的完成内存管理。而我们还有全局变量,两者应该分开存。通常的做法是:在内存中靠前的地方划出一块作为栈,分界线之后的区域存放全局变量,称为“堆”。其他高级语言的内存管理也与此大致相同。这也解释了为什么局部变量不能定义过大——栈的空间有限,会爆栈。
结构体的原理很简单,实质上是一堆挤在一起的变量,只需要用多个寄存器访问即可。

关于CPU

我们前面已经学习了8086CPU的工作原理,选择8086是因为其机制较为简单,同时作为早期CPU的代表,适合新手进行学习,现实生活中应该是见不到这种三十多年前的CPU的。8086CPU为单任务CPU,即只能同时执行一条指令,并且没有任何内存保护机制,也就是说所有程序的内存可以互相看到,非常不安全。因此Intel在之后的CPU版本中加入了保护模式,实现了内存的权限层级管理。保护模式下我们需要学习许多新东西,机制也更复杂。我的观点是:先把8086下的硬件之类的事情折腾清楚搞熟练,再逐步接触保护模式。因此,我后面的教程也会对8086机的其他硬件调用进行详细介绍,以助读者理解。