IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 操作系统从零开始-000:汇编语言(一)寄存器和内存模型 -> 正文阅读

[C++知识库]操作系统从零开始-000:汇编语言(一)寄存器和内存模型

道生一,一生二,二生三,三生万物。

关于汇编语言的诞生

CPU 只负责计算,本身不具备智能。因此无论何种高级语言,其本质都是 0 或 1 组成的机器语言。但是机器语言可读性极差,且代码量巨大,难以使用。因此,汇编语言作为一种简单一些的语言出现了。

汇编语言简单介绍

汇编语言, 即第二代计算机语言,用一些容易理解和记忆的字母,单词来代替一个特定的指令,比如:用“ADD”代表数字逻辑上的加减,“ MOV”代表数据传递等等,通过这种方法,人们很容易去阅读已经完成的程序或者理解程序正在执行的功能,对现有程序的 bug 修复以及运营维护都变得更加简单方便。但计算机的硬件不认识字母符号,这时候就需要一个专门的程序把这些字符变成计算机能够识别的二进制数。因为汇编语言只是将机器语言做了简单编译,所以并没有根本上解决机器语言的特定性,所以汇编语言和机器自身的编程环境息息相关,推广和移植很难,但是还是保持了机器语言优秀的执行效率,因为他的可阅读性和简便性,汇编语言到现在依然是常用的编程语言之一。汇编语言不像其他大多数的程序设计语言一样被广泛用于程序设计。在今天的实际应用中,它通常被应用在底层,硬件操作和高要求的程序优化的场合。驱动程序、嵌入式操作系统和实时运行程序都需要汇编语言。

(引自百度百科)

寄存器

学习汇编语言,首先必须明白寄存器和内存模型。
我们先简单讲解一下 CPU:
中央处理器(CPU)由三个部分组成:1、运算器;2、控制器;3、寄存器。
其中,运算器用来处理信息,即执行指令;控制器用于控制其他器件进行工作。简单的理解就是这两者分别协调软件和硬件。而寄存器是用来储存信息的。
CPU 的运算速度远大于内存读写的速度,因此为了避免被读写拖慢速度,CPU 一般会设置缓存。但数据在缓存中的地址并不固定,CPU 每次寻址都会消耗时间。于是 CPU 集合了寄存器(register),用于储存常用的地址。
C 语言中的 register 关键字就是将变量储存到寄存器中以提高运行速度。

// 较快
for (register int i = 1; i <= n; ++i)	calc(i);
// 较慢
for (int i = 1; i <= n; ++i)	calc(i);

寄存器其实是依靠名称去读数据,而不是地址,因此运行效率大大提升。故寄存器也被称为 CPU 的零级缓存。
速度比较
早期的 x86 CPU 只有8个寄存器,且每个寄存器都有不同的用途。现在的寄存器都变成了通用寄存器,没有固定名称也没有指定的用途,只是早期寄存器的名字都被保存了下来。

EAX
EBX
ECX
EDX
EDI
ESI
EBP
ESP

其中 ESP 用于保存栈(stack)的地址。
所谓的 32 位、64 位 CPU,就是指寄存器的大小,其中 32 位CPU 寄存器大小为 4 字节。

内存模型:堆(heap)

寄存器只能储存极少量数据,大部分数据都是储存在堆里。每个程序起始时,都会被系统分配一段空间。C 语言中的 newdelete 操作就是对堆的操作。堆内的数据无法自动消失,必须手动释放,或利用系统的回收机制释放。
堆

内存模型:栈(stack)

简单来讲,栈是由于函数运行而临时占用的内存区域。
栈
比如一下程序:

int main()
{
	int a = 1, b = 2;
}

执行起来是这样的
main
同理,若调用函数,被调用的函数会继续入栈

int add(int a, int b)
{
	return a + b;
}

int main()
{
	add(1, 2);
}

main&add

后记

技术在进步,底层原理也在被遗忘。我希望在自己学习的同时与各位交流学习心得,推动国内信息技术的发展。现在我们有初出茅庐的鸿蒙,将来,我们也会有媲美 Windows、Mac、Linux 的中国操作系统。
最后,我要表明我所写的内容都是本人的学习笔记,其中可能会有错误,欢迎大家指正。本系列不定期更新。

编辑日期:2021-12-12
修改日期:2021-12-12

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-13 12:37:21  更:2021-12-13 12:39:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:11:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码