
程序是怎样跑起来的
文章平均质量分 89
程序员必知的硬核知识大全
andyyah晓波
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
程序是怎样跑起来的-终极浓缩篇
《程序运行核心原理摘要》 计算机程序运行的核心在于CPU处理二进制指令与数据的过程。CPU由寄存器、控制器、运算器和时钟组成,通过时钟信号同步操作。程序以机器语言(二进制)执行,高级语言需编译为机器码。汇编语言直接操作寄存器,控制程序流程和函数调用。二进制是计算机运算基础,通过位权转换和移位运算实现高效计算,但小数运算可能因二进制精度限制产生误差(如0.1累加100次≠10)。浮点数用符号、尾数和指数表示,逻辑运算处理0/1状态,算术运算涉及数值进位。理解这些机制是优化程序性能与精度的关键。原创 2025-06-05 12:59:26 · 1003 阅读 · 0 评论 -
程序是怎样跑起来的-第6章 应用和硬件
在程序的运行过程中,几乎无时无刻都会发生中断,其原因就是为了实时处理外部输入的数据,虽然程序也可以在不会中断的基础上处理外部数据,但是那种情况下,主程序就会频繁的检查外围设备是否会有数据输入。首先是蜂鸣器发声的部分,通过 IN EAX,61H(助记符不区分大小写)指令,把端口 61H 的数据存储到 CPU 的 EAX 寄存器中。实施中断请求的是连接外围设备的 I/O 控制器,负责实施中断处理的是 CPU,外围设备的中断请求会使用不同于 I/O 端口的其他编号,该编号称为中断编号。该机制被称为 处理中断。原创 2025-05-08 14:17:24 · 859 阅读 · 0 评论 -
程序是怎样跑起来的-第5章 汇编语言和本地代码
call 指令运行后,call 指令的下一行(也就指的是 (6) 这一行)的内存地址(调用函数完毕后要返回的内存地址)会自动的 push 入栈。会被尽可能的分配在寄存器中。但是本地代码的可读性非常差,所以需要使用一种能够直接读懂的语言来替换本地代码,那就是在各本地代码中,附带上表示其功能的英文缩写,比如在加法运算的本地代码加上add(addition) 的缩写、在比较运算符的本地代码中加上cmp(compare)的缩写等,这些通过缩写来表示具体本地代码指令的标志称为 助记符,使用助记符的语言称为汇编语言。原创 2025-05-08 14:12:31 · 814 阅读 · 0 评论 -
程序是怎样跑起来的-第4章 操作系统
CPU 的类型不同,所对应机器的语言也不同,同样的道理,操作系统的类型不同,应用程序向操作系统传递指令的途径也不同。应用的可执行文件指的是,计算机的 CPU 可以直接解释并运行的本地代码,不过这些代码是无法直接控制硬件的,事实上,这些代码是通过操作系统来间接控制硬件的。传递给 fputs() 的参数,是往文件中写入的字符串"你好" 和 fp,传递给 fclose() 的参数,也仅仅是 fp,也就是说磁盘通过打开文件这个操作,把磁盘抽象化了,打开文件这个操作就可以说是操作硬件的指令。下图反映了这个过程。原创 2025-05-08 14:02:23 · 679 阅读 · 0 评论 -
程序是怎样跑起来的-第3章 磁盘
簇和扇区的大小是相等的。磁盘缓存指的是把从磁盘中读出的数据存储到内存的方式,这样一来,当接下来需要读取相同的内容时,就不会再通过实际的磁盘,而是通过磁盘缓存来读取。它的前身是 MS-DOC,最初的版本可以在 128kb 的内存上运行程序,但是现在想要 Windows 运行流畅的花至少要需要 512MB 的内存,但通常往往是不够的。磁盘中存储的程序必须加载到内存中才能运行,在磁盘中保存的程序是无法直接运行的,这是因为负责解析和运行程序内容的 CPU 是需要通过程序计数器来指定内存地址从而读出程序指令的。原创 2025-05-08 12:50:52 · 880 阅读 · 0 评论 -
程序是怎样跑起来的-第2章 二进制
上述例子中还是以 39 为例,我们先把十进制的39 转换为二进制的 0010 0111,然后向左移位 <<一个字节,也就变成了 0100 1110,那么再把此二进制数转换为十进制数就是上面的78, 十进制的78 竟然是 十进制39 的2倍关系。3 - 5 的运算,我们按着上面的思路来过一遍,计算出来的结果是 1111 1110,我们知道,这个数值肯定表示负数,但是负数无法直接用十进制表示,需要对其取反+ 1,算出来的结果是 2,因为 1111 1110的高位是 1,所以最终的结果是 -2。原创 2025-05-08 11:57:43 · 664 阅读 · 0 评论 -
程序是怎样跑起来的-第1章 对程序员来说CPU是什么
程序的开始过程和顺序流程是一样的,CPU 从0100处开始执行命令,在0100和0101都是顺序执行,PC 的值顺序+1,执行到0102地址的指令时,判断0106寄存器的数值大于0,跳转(jump)到0104地址的指令,将数值输出到显示器中,然后结束程序,0103 的指令被跳过了,这就和我们程序中的 if() 判断是一样的,在不满足条件的情况下,指令会直接跳过。计算机所有程序的运行都是在内存中运行的,内存又被称为主存,其作用是存放 CPU 中的运算数据,以及与硬盘等外部存储设备交换的数据。原创 2025-05-08 11:38:24 · 737 阅读 · 0 评论