《程序是怎样跑起来的》读书笔记——第一章 对程序员来说CPU是什么
- 1 程序的运行流程
- 2 CPU的组成
- 3 寄存器的主要种类和功能
- “程序计数器”--决定程序流程的
- 4 条件分支和循环机制
- 5 函数的调用机制
- 6 通过地址和索引实现数组
- 7 CPU 的处理其实很简单
1 程序的运行流程

2 CPU的组成

3 寄存器的主要种类和功能

程序员眼中的 CPU(CPU 是寄存 的集合体)

“程序计数器”–决定程序流程的
程序计数器决定着程序的流程。
用户发出启动程序的指示 后,Windows 等操作系统 A 会把硬盘中保存的程序复制到内存中。示例 中的程序实现的是将 123 和 456 两个数值相加,并将结果输出到显示器上。

4 条件分支和循环机制
顺序执行是指按照地址内容的顺序执行指令。条件分支是指根据条件执行任意地址 的指令。循环是指重复执行同一地址的指令。
4.1 顺序执行
顺序执行的情况比较简 单,每执行一个指令程序计数器的值就自动加 1。但若程序中存在条件 分支和循环,机器语言的指令就可以将程序计数器的值设定为任意地 址(不是 +1)。
4.2 选择分支

标志寄存器无论当前累加寄存器的运算结果是负数、零还是正数, 标志寄存器都会将其保存(也负责存放溢出 A 和奇偶校验 B 的结果 )。CPU 在进行运算时,标志寄存器的数值会根据运算结果自动设定。

_PS:CPU 执行比较的机制很有意思,因此请大家务必牢记。例如,假 设要比较累加寄存器中存储的 XXX 值和通用寄存器中存储的 YYY 值,执行比较的指令后,CPU 的运算装置就会在内部(暗中)进行 XXX-YYY 的减法运算。而无论减法运算的结果是正数、零还是负数, 都会保存到标志寄存器中。结果为正表示 XXX 比 YYY 大,零表示 XXX 和 YYY 相等,负表示 XXX 比 YYY 小。程序中的比较指令,就 是在 CPU 内部做减法运算。怎么样,是不是挺有意思的?_
5 函数的调用机制
和条件分支、循环的机制有所不同,因为单纯的跳转指 令无法实现函数的调用。函数的调用需要在完成函数内部的处理后,处理流程再返回到函数调用点(函数调用指令的下一个地址)。
如图是给变量 a 和 b 分别代入 123 和 456 后,将其赋值给参数 (parameter)来调用 MyFunc 函数的 C 语言程序。


6 通过地址和索引实现数组
基址寄存器和变址寄存器 。通过这两个寄存器,我们可以对主内存上特定的内存区域进行划分,从而实现类似于数组的操作。
查看 10000000 地址~1000FFFF 地址时,如图所示, 可 以 将 10000000 存入基址寄存器,并使变址寄存器的值在00000000~0000FFFF 变化。CPU 则会把基址寄存器+变址寄存器的值解释为实际查看的内存地址。变址寄存器的值就相当于高级编程语言 程序中数组的索引功能。

7 CPU 的处理其实很简单
机器语言指令的主要类型和功能

《程序是怎样跑起来的》读书笔记——第一章 对程序员来说CPU是什么的更多相关文章
- Android群英传神兵利器读书笔记——第一章:程序员小窝——搭建高效的开发环境
1.1 搭建高效的开发环境之操作系统 1.2 搭建开发环境之高效配置 基本环境配置 基本开发工具 1.3 搭建程序员的博客平台 开发者为什么要写作 写作平台 第三方博客平台 自建博客平台 开发论坛 1 ...
- 《疯狂Java:突破程序员基本功的16课》读书笔记-第一章 数组与内存控制
很早以前就听过李刚老师的疯狂java系列很不错,所以最近找一本拿来拜读,再此做下读书笔记,促进更好的消化. 使用Java数组之前必须先对数组对象进行初始化.当数组的所有元素都被分配了合适的内存空间,并 ...
- 《C++ Primer》读书笔记 第一章
读<C++ Primer>才知道,自己对C++知之甚少... 写个博客记录下自己C++的成长,只是读书笔记,不是对<C++ Primer>知识点的总结,而是对自己在书上看到的以 ...
- 《css3实战》读书笔记 第一章 基于CSS需求而编写的HTML.
笔记说明 <CSS3实战手册第3版(影印版)>可以消除Web设计工作的痛苦,并且带给你:HTML--重新入门.如果你是HTML新手,你会学到如何以CSS友好的方式进行基本页面构造.若你是H ...
- .net架构设计读书笔记--第一章 基础
第一章 基础 第一节 软件架构与软件架构师 简单的说软件架构即是为客户构建一个软件系统.架构师随便软件架构应运而生,架构师是一个角色. 2000年9月ANSI和IEEE发布了<密集性软件架构建 ...
- 深入Java虚拟机读书笔记第一章Java体系结构介绍
第1章 Java体系结构介绍 Java技术核心:Java虚拟机 Java:安全(先天防bug的设计.内存).健壮.平台无关.网络无关(底层结构上,对象序列化和RMI为分布式系统中各个部分共享对象提供了 ...
- C缺陷与陷阱----读书笔记---第一章
第一章:词法陷阱 编译器中负责将程序分解为一个一个符号的部分,一般称为“词法分析器”.例如,对于语句: if ( x == big ) big = x ; 它的第一个符号是C语言关键字if,紧接着下一 ...
- #《Essential C++》读书笔记# 第一章 C++ 编程基础
前言 Stanley B.Lippman 先生所著的<C++ Primer>是学习C++的一本非常优秀的教科书,但<C++ Primer>作为一本大部头书,显然不适合所有的初学 ...
- 《深入理解计算机系统》(CSAPP)读书笔记 —— 第一章 计算机系统漫游
本章通过跟踪hello程序的生命周期来开始对计算机系统进行学习.一个源程序从它被程序员创建开始,到在系统上运行,输出简单的消息,然后终止.我们将沿着这个程序的生命周期,简要地介绍一些逐步出现的关键概念 ...
随机推荐
- Tosca 添加插件或者是扩展功能,把页面上某块内容识别成table
#遇到了问题 "ICS table was not found" 是因为编辑case的时候用到了插件的功能, 但是setting里面却没有配置这个插件 #在哪里添加插件 #目的 这 ...
- darknet 的python接口使用
首先,python接口文件在安装好的darknet目录下的python文件夹,打开就可以看到 这里的darknet.py文件就是python接口 用编辑器打开查看最后部分代码: 使用十分简单,先将网络 ...
- FrameLayout--霓虹灯
主函数里面,新建一个线程,控制改变背景色 package com.example.framelayout import android.support.v7.app.AppCompatActivity ...
- flutter Dismissible 可以在拖动时隐藏的widget
import 'package:flutter/material.dart'; class DismissedAppPage extends StatefulWidget { @override St ...
- flutter Sliver滑动视图组件
import 'package:flutter/material.dart'; import './model/post.dart'; class SliverDemo extends Statele ...
- jmeter中特殊的时间处理方式
需求: 1.获取当前时间的年月日时分秒毫秒 2.生成上一个月的随机某天的一个时间 3.生成一个年月日时分秒毫秒的一个时间戳 1.__time : 获取时间戳.格式化时间 ${__time(yyyy-M ...
- spring Securicty入门(一)
在一次项目中启动测试一个借口,结果提示要登录,如下图.原因是无意中引用了spring Securicty的依赖,别的啥都没干就弹出来这个,懵逼了半天最后注释掉.shiro你引个jar包别的不配置,也不 ...
- C2678 二进制“>>”: 没有找到接受“std::stringstream”类型的左操作数的运算符(或没有可接受的转换)
C2678 二进制“>>”: 没有找到接受“std::stringstream”类型的左操作数的运算符(或没有可接受的转换)
- ES6深入浅出-4 迭代器与生成器-2.Symbol 和迭代器
symbol https://zhuanlan.zhihu.com/p/22652486 Es5中的数据类型,所有的复杂类型都是对象类型. ES6里面增加了symbol类型,用处不多. https:/ ...
- 【Mac】 /usr/local 文件夹权限问题
修改文件夹权限 sudo chown -R $(whoami) /usr/local/ 如果失败提示Operation not permitted 或其他权限不足,则需要关闭Rootless Root ...