【计算机组成原理】读书笔记第一期:对程序员来说CPU是什么

news2024/12/23 11:34:01

目录

写在开头

CPU的结构

功能的角度

程序员的角度

寄存器与程序的执行流程

程序计数器 

条件分支与循环

函数的调用流程

 通过地址和索引实现数组

 CPU的处理过程

结尾

写在开头

 近期经他人推荐,正在阅读《程序是怎样跑起来的》这本书(作者:矢泽久雄)。感觉这本书虽然出版日期有些老旧,但还是写的很通俗,不愧是计算机组成原理的图解趣味版。作为一个非科班出身的计算机相关从业者而言,感觉本书作为一个计算机组成原理的简易速成教材还是蛮不错的,干脆我就在这里做个读书总结,也重新补一补基础(主要自己还是太菜了)。我阅读本书感觉体验还是比较轻松的,首先这本书不算特别厚,没有很大的阅读心理负担,书中也有很多图表等解释各种概念与原理、也举出了很多例子方便我们理解,总之我也比较推荐。估计沉下心来读的话两三天就能看完。不过咱也不图快,慢慢总结总结,共同进步。

 程序的一般运行流程如图1-1。本书第一章主要介绍用于解释和运行程序的CPU(Central Processing Unit中央处理器)。本章主要描述CPU是怎样运行的,核心是寄存器的机制。

CPU的结构

功能的角度

寄存器:可用来暂存指令、数据等处理对象。CPU内部有很多个寄存器。

控制器:负责把内存上的指令、数据等读入寄存器, 并根据指令的执行结果来控制整个计算机。

运算器:负责运算从内存读 入寄存器的数据。

时钟:负责发出 CPU 开始计时的时钟信号。不过,也有些计算机的时钟位于 CPU 的外部。

从CPU内部各模块的组成与功能理解程序的运行机制:

程序启动后,根据时钟信号,控制器会从内存中读取指令和数据。通过对这些指令加以解释和执行,运算器就会对数据进行运算,控制器根据运算结果来控制计算机。 

所谓控制,大家不要想的太复杂,就是指数据运算外的处理 ,主要是数据输入输出的时机控制,内存和磁盘等媒介的输入输出、键盘鼠标的输入、显示器打印机的输出等。

程序员的角度

 CPU是寄存器的集合体。程序员只要关注寄存器即可,因为程序是将寄存器作为对象来描述的。 本书给出了一段代码示例说明这一点:

 示例代码中的ebp和eax都是寄存器,由代码示例可以看出,机器语言级别的程序是通过寄存器来处理的。 顺道一提,本书通常采用汇编语言描述程序的逻辑,这是因为机器语言(01010101这种)对于我们人来不太好理解,而汇编语言中与机器语言基本上是一一对应的,因此虽然CPU实际解释执行的是01这样的机器语言,本书还是采用汇编语言对程序逻辑进行描述。

 不同类型的CPU其内部的寄存器数量、种类、寄存器存储的数值范围都有所不同。寄存器中存储的内容既可以是指令也可以是数据,数据又分为“用于运算的数值”(往往放在累加寄存器器中)和“表示内存地址的数值”(通常存放在基址寄存器和变址寄存器中)。寄存器的主要分类和功能如表1-1:

而需要程序员需要关注的寄存器如下:

 程序员主要关注这六个寄存器即可。

寄存器与程序的执行流程

程序计数器 

  程序计数器存储了下一条指令所在内存的地址,CPU的控制器就会参照程序计数器的数值,从内 存中读取命令并执行(CPU每执行一条指令,程序计数器就会增加与指令内存长度相应的数值)。也就是说,程序计数器决定着程序的流程。图1-4给出了一个程序的运行流程:

 这个程序实现了将123和456两个数值相加,并将结果输出到显示器上。用户发出启动程序的指示 后,Windows 等操作系统会把硬盘中保存的程序复制到内存中。 由于使用机器语言难以清晰地表明各地址存储的内容,因此这里作者对各地址的存储内容添加了注释。实际上,一个命令和数据通常被存储在多个地址上,但为了便于说明,图 1-4 中把指令、数据分配到了一个地址中。

条件分支与循环

程序的执行流程大家肯定都知道,这里列一下:

顺序执行:是指按照地址内容的顺序执行指令。每执行一个指令程序计数器的值就自动加1,此处的1表示内存单位。

条件分支:是指根据条件执行任意地址的指令。

循环:是指重复执行同一地址的指令。 

这里给出一个条件分支的程序执行流程示例,如图1-5:

 本图表示把内存中存储的数值(示例中是 123)的绝对值输出到显示器的程序的内存状态。程序运行的开始位置是 0100 地址。随着程序计数器数值的增加,当到达 0102 地址时,如果累加寄存器的值是正数,则执行跳转指令(jump 指令)跳转到 0104 地址。此时,由于累加寄存器的值是123,为正数,因此 0103 地址的指令被跳过,程序的流程直接跳转到了 0104 地址。也就是说,“跳转到 0104 地址”这个指令间接执行了“将程序计数器设定成 0104 地址”这个操作。 条件分支在跳转指令前会进行比较运算。至于是否执行跳转指令,则由 CPU 在参考标志寄存器的数值后进行判断。运算结果的正、零、负三种状态由标志寄存器的三个位表示:

 程序中所谓比较大小本质都是做差,将结果的正/负/零保存在标志寄存器中。程序中的比较指令,就是在CPU内部做减法运算。

函数的调用流程

 函数的调用流程和条件分支、循环的机制有所不同,因为单纯的跳转指令无法实现函数的调用。函数的调用需要在完成函数内部的处理后,处理流程再返回到函数调用点(函数调用指令的下一个地址)。因此,如果只是跳转到函数的入口地址,处理流程就不知道应该返回至哪里了。 函数的调用包含call和return两个过程,具体描述如下:

函数调用使用的是call指令,而不是跳转指令。 在将函数的入口地址设定到程序计数器之前,call 指令会把调用函数后要执行的指令地址存储在名为栈的主存内(说白了就是先将返回地址压栈)。函数处理完毕后,再通过函数的出口来执行return命令。return 命令的功能是把保存在栈中的地址设定到程序计数器中。

   MyFunc 函数被调用之前,0154地址保存在栈中。MyFunc 函数的处理完毕后,栈中的0154地址 就会被读取出来,然后再被设定到程序计数器中(图1-8)。在编译高级编程语言的程序后,函数调用的处理会转换成 call 指令,函数结束的处理则会转换成 return 指令。这样一来,程序的运行也 就变得非常流畅。

 通过地址和索引实现数组

 通过基址寄存器变址寄存器这两个寄存器,我们可以对主内存上特定的内存区域进行划分,从而 实现类似于数组的操作。 变址寄存器的值就相当于高级编程语言 程序中数组的索引功能。如图1-9,一图胜千言。

 CPU的处理过程

 表 1-2 按照功能对 CPU 能执行的机器语言指令进行了大体分类。这里没有列出指令的具体名称(汇编语言的助记符)。原来 CPU 可以进行的处理非常少。虽然高级编程语言编写的程序看起来非常复杂,但 CPU 实际处理的事情就是这么简单。

结尾

 这篇文章就总结到这里吧,后面两章关于二进制和小数运算的内容我可能不会详细总结,回头一笔带过吧。然后可能近期会完成对这本书的读书总结,下一篇可能会重点讲第四章内存相关的知识。

 除此之外还会进一步更新红队打靶的解析和渗透测试相关的技术分享,恳请希望读者们多多支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1000291.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为虚拟化环境带来更强I/O性能!SR-IOV技术简介

在 ICT 行业,不断提高硬件资源的使用效率是技术发展路线中亘古不变的主旋律。虚拟化作为其中最为主要的解决方式之一,其带来的影响早已不言而喻。而今天我们要说的,正是虚拟化中一项非常重要的技术 —— SR-IOV,也是下一代高端企业…

每日一练 | 网络工程师软考真题Day32

阅读以下说明,答复以下【问题1】至【问题5】 【说明】 某公司内部效劳器S1部署了重要的应用,该应用只允许特权终端PC1访问,如图4-1所示。为保证通信平安,需要在S1上配置相应的IPSec策略。综合考虑后,确定该IPSec策略如…

龙迅LT86204UX HDMI二进四出 支持高达4K60HZ的分辨率

龙迅LT86204UX 1.描述: LT86204UX HDMI2.0/1.4交换机具有2:4的开关,符合HDMI2.0/1.4规格,最大6Gbps高速数据速率,自适应均衡RX输入和预先强调的TX输出。LT86204UX HDMI2.0/1.4交换机自动检测电缆损耗,并自…

上位机的社会工作发展前景

在元宇宙发展的趋势下,上位机已经融合了虚拟现实(VR)和增强现实(AR)技术。我们不能局限于传统的电脑上的上位机开发,作为工控领域的从业者,我们应该打通PLC与各种先进外设的互通和互信。无论是i…

【C-C++源码】仓库管理系统 期末课设必备源码

文章目录 介绍 介绍 有两个版本,一个是C语言,一个是C,自行选择,VC、VS、devc等各编译器均可运行。代码注释齐全,容易理解,代码量850行。 printf("需要源码,可以百度:学长敲代码")&…

risc-v dv源代码分析

地址为 GitHub - chipsalliance/riscv-dv: Random instruction generator for RISC-V processor verificationRandom instruction generator for RISC-V processor verification - GitHub - chipsalliance/riscv-dv: Random instruction generator for RISC-V processor verif…

论文于祥读及复现——《VDO-SLAM: A Visual Dynamic Object-aware SLAM System》

论文详读之------《一个视觉动态对象感知SLAM系统》 0. 出发点(暨摘要)1.引言2. 相关工作2.1 探索针对动态环境的健壮SLAM2.2 分别执行SLAM和运动对象跟踪(MOT),作为传统SLAM的扩展,用于动态场景理解。2.3 对象SLAM(通…

2023年高校大数据实验室建设方案

大数据实验室建设方案具体内容包括:人才培养方案建设、课程资源建设、师资建设、实验室建设、教学服务建设。 泰迪打造国内领先的大数据人工智能及课程资源,包括:商务数据分析实训管理平台、云计算资源管理平台、大数据编程实训平台、商务数据…

linux入门---用匿名管道实现一个功能

前言 在之前的学习中我们知道通信的概念和匿名管道的使用,那么接下来我们就要用匿名管道来实现一个功能,首先我们有很多的函数需要被执行,然后创建一些子进程通过匿名管道方式给子进程传递一些信息,然后子进程就根据这些信息来确…

Linux安装免费Https证书,过期自动更新 省钱秘籍

Linux安装免费Https证书,过期自动更新 acme.sh这个服务可以友好地帮助我们获取免费的证书以及过期实现自动更新操作 官方网站:https://github.com/acmesh-official/acme.sh 介绍 嗨!今天我要和大家聊聊关于使用acme.sh和Nginx结合生成HTT…

基于SpringBoot的招聘信息管理系统

基于SpringBootVue的招聘信息管理系统【附源码文档】、前后端分离 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/Ecilpse、Navicat、Maven 【主要功能】 角色:管理员、用户、…

运营商大数据可以帮助企业实现什么目标?

虽然现在有很多合法合规的运营商大数据,那么合法合规的运营商大数据可以实现什么目标? 1、对用户进行相应研究的目标 如果是合法合规的运营商大数据那么这种情况下,对于用户就能够进行相应的研究了。在这个过程中可以直接对产品的优化进行相…

【博客笔记+java+测试】

一、项目背景 1.个人博客采用前后端分离的方法来实现,同时使用数据库存储相关的数据,将其部署在云服务器上。前端主要分为五个页面:注册页、登录页、列表页、详情页和编辑页,以上模块实现了最简单的个人博客系统。其结合后端实现了…

读高性能MySQL(第4版)笔记05_优化服务器设置

1. 除非遇到异常情况,否则不需要调整配置 1.1. 不要“调优”服务器,不要使用比率、公式或“调优脚本”作为设置配置变量的基础 1.1.1. 在互联网上搜索配置建议并不总是一个好主意,你会在博客、论坛等找到很多糟糕的建议 1.1.2. 很难判断谁…

【高阶数据结构】红黑树 {概念及性质;红黑树的结构;带头结点的红黑树;红黑树的实现;红黑树插入操作详细解释;红黑树的验证}

红黑树 一、红黑树的概念 红黑树(Red Black Tree) 是一种自平衡二叉查找树,在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有…

Python算法练习 9.11

leetcode 392 判断子序列 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcd…

波奇学C++:多态知识点

多态中函数的重写&#xff08;基类指针访问派生类函数&#xff09;&#xff0c;只重写函数的实现&#xff0c;而不重写声明。 class Person { public:virtual void fun(int i 0){cout << "Person"<<" "<<i;} }; class Student:public …

H5页面safari浏览器底部遮挡问题解决方案亲测有效

media screen and (max-width: 767px) { _::-webkit-full-page-media, _:future, :root .safari_only { padding-bottom: 120px; //解决Safari浏览器底部遮挡问题 } } 然后给对应div加上这个类名就可以了

本地录像视频文件如何推送到视频监控平台EasyCVR进行AI视频智能分析?

安防监控平台EasyCVR支持多协议、多类型设备接入&#xff0c;可以实现多现场的前端摄像头等设备统一集中接入与视频汇聚管理&#xff0c;并能进行视频高清监控、录像、云存储与磁盘阵列存储、检索与回放、级联共享等视频功能。视频汇聚平台既具备传统安防监控、视频监控的视频能…

ESP32开发:Clion配置IDF

IDF环境搭建 使用安装包安装IDF 可以通过安装包进行安装&#xff0c;如下图&#xff1a; 下载链接如下&#xff1a;https://dl.espressif.cn/dl/esp-idf/?idf4.4 安装好后&#xff0c;IDF会添加环境变量IDF_TOOLS_PATH&#xff0c;如果要安装多个IDF&#xff0c;为了防止冲…