会员
周边
众包
新闻
博问
闪存
赞助商
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
wcpp
博客园
首页
新随笔
联系
订阅
管理
随笔 - 21
文章 - 0
评论 - 1
阅读 -
538
《程序是怎样跑起来的》第一章——对程序原来说CPU是什么?
在读这本书之前,我大致看了目录,从硬件到软件,将程序如何运行,但更多是偏向软件和操作系统的,这本书对于基础不好的人来说是一本用来夯实基础很好的读物。
第一章的内容主要分讲的是CPU,CPU内部结构、CPU如何运行程序。
在中职是我们只知道CPU是运算器和控制器的集合体,而这本书中告诉我们CPU中还有寄存器和时钟,寄存器是一种高速存储设备,用于临时存储和快速访问CPU内部的数据和指令。寄存器分为多种,例如,通用寄存器、程序计数器、栈指针寄存器、状态寄存器等等多种。CPU各部件相通:时钟发出信号开始计时,控制器控制全局运行,并将内存中的指令读入寄存器,寄存器暂存指令数据的等处理对象。由此来完成指令,如下图
关于CPU结构,第一章主要讲解寄存器,其他不必太关注,因为 程序是把寄存器作为对象来描述的。这句话是什么意思?我们知道有机器语言,汇编语言,高级语言,而计算机只能理解像二进制这样的机器语言,我们人不可能去理解机器语言,所以汇编语言用助记符来编写程序,每一个原是电气信号的机器语言都会有一个相应的助记符,汇编语言和机器语言是一一对应的,我们把汇编语言编写的程序转化为机器语言的过程称为汇编,反之称为反汇编,而机器语言级别的程序是通过寄存器来处理的,也就是说在程序员看来“CPU是寄存器的集合体”,而其他部件,只需知道其存在就好了。也就是说我们用高级语言编写的程序在编译后会转化为机器语言,然后有寄存器去处理。 不同的CPU有不同的功能,内部的寄存器类型和数量也不同,但主要分为这八类:
了解了寄存器,第一章中还有一个重点(1.4),我们都知道计算机中有计数器来决定程序流程,而我们编写的程序的执行流程有顺序执行、条件分支和循环三种,CPU在执行我们编写的程序时的执行流程是一样的,比如条件分支和循环,在CPU中通过累加寄存器和标志寄存器来达到分支和循环的目的,CPU在运算时标志寄存器的数值会根据运算结果自动设定,条件分支在执行跳转前会进行比较运算,而CPU是否执行跳转,有标志寄存器内部的正、零、负三个状态来决定。所以前面才说寄存器是最要了解的(机器语言级别的程序是通过寄存器来处理的)。
(1.5):函数在我们编程过程中常常使用,函数的调用是通过八程序计数器的值设定为函数的存储地址来实现的,而与条件分支和循环不同的是,单单跳转是没法实现函数的调用的,书中讲解函数的调用需再完成函数内部处理后,处理流程再返回函数调用点,因此如果只是调用就无法返回了。
所以机器语言通过call指令和return指令来解决这个问题。在函数调用时使用的是call指令而不是跳转指令,call指令会把调用函数后的要执行的指令地址存储在栈中,执行完成之后,在由return指令将栈中地址设定到程序计数器中。由此一来便解决了函数跳转的问题。
第一章主要学习了这些内容,还有通过基址寄存器和变址寄存器来实现类似数组的操作 ,列出了机器语言指令的主要类型和功能等。
好文要顶
关注我
收藏该文
微信分享
琦q
粉丝 -
2
关注 -
2
+加关注
0
0
升级成为会员
«
上一篇:
我与计算机
»
下一篇:
《程序是怎样跑起来的》第二章——数据是用二进制数表示的?
posted @
2024-01-25 18:13
琦q
阅读(
39
) 评论(
0
)
编辑
收藏
举报
刷新页面
返回顶部
登录后才能查看或发表评论,立即
登录
或者
逛逛
博客园首页
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
相关博文:
·
《程序是怎样跑起来的》第八章——从源文件到可执行文件
·
《程序是怎样跑起来的》第七章——程序是在何种环境下运行的
·
《程序是怎样跑起来的》第一章读后感
·
《程序是怎样跑起来的》 第一篇
·
第一章——对程序员来说CPU是什么
阅读排行:
·
分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
·
使用C#创建一个MCP客户端
·
基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
·
ollama系列1:轻松3步本地部署deepseek,普通电脑可用
·
按钮权限的设计及实现
公告
昵称:
琦q
园龄:
1年3个月
粉丝:
2
关注:
2
+加关注
<
2025年3月
>
日
一
二
三
四
五
六
23
24
25
26
27
28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
随笔档案
2024年5月(2)
2024年2月(17)
2024年1月(2)
阅读排行榜
1. 《系统科学方法概论》绪论(52)
2. 微机结构与原理(47)
3. 《程序是怎样跑起来的》第八章——从源文件到可执行文件(43)
4. 《程序是怎样跑起来的》第一章——对程序原来说CPU是什么?(39)
5. 《程序是怎样跑起来的》第十一章——硬件控制方法(38)
评论排行榜
1. 《程序是怎样跑起来的》第三章——计算机进行小数运算时出错的原因?(1)
最新评论
1. Re:《程序是怎样跑起来的》第三章——计算机进行小数运算时出错的原因?
很用心,值得赞赏。进程严重落后。
--特里卡尔
点击右上角即可分享
AI IDE Trae
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现