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是什么的更多相关文章

  1. Android群英传神兵利器读书笔记——第一章:程序员小窝——搭建高效的开发环境

    1.1 搭建高效的开发环境之操作系统 1.2 搭建开发环境之高效配置 基本环境配置 基本开发工具 1.3 搭建程序员的博客平台 开发者为什么要写作 写作平台 第三方博客平台 自建博客平台 开发论坛 1 ...

  2. 《疯狂Java:突破程序员基本功的16课》读书笔记-第一章 数组与内存控制

    很早以前就听过李刚老师的疯狂java系列很不错,所以最近找一本拿来拜读,再此做下读书笔记,促进更好的消化. 使用Java数组之前必须先对数组对象进行初始化.当数组的所有元素都被分配了合适的内存空间,并 ...

  3. 《C++ Primer》读书笔记 第一章

    读<C++ Primer>才知道,自己对C++知之甚少... 写个博客记录下自己C++的成长,只是读书笔记,不是对<C++ Primer>知识点的总结,而是对自己在书上看到的以 ...

  4. 《css3实战》读书笔记 第一章 基于CSS需求而编写的HTML.

    笔记说明 <CSS3实战手册第3版(影印版)>可以消除Web设计工作的痛苦,并且带给你:HTML--重新入门.如果你是HTML新手,你会学到如何以CSS友好的方式进行基本页面构造.若你是H ...

  5. .net架构设计读书笔记--第一章 基础

    第一章 基础 第一节 软件架构与软件架构师  简单的说软件架构即是为客户构建一个软件系统.架构师随便软件架构应运而生,架构师是一个角色. 2000年9月ANSI和IEEE发布了<密集性软件架构建 ...

  6. 深入Java虚拟机读书笔记第一章Java体系结构介绍

    第1章 Java体系结构介绍 Java技术核心:Java虚拟机 Java:安全(先天防bug的设计.内存).健壮.平台无关.网络无关(底层结构上,对象序列化和RMI为分布式系统中各个部分共享对象提供了 ...

  7. C缺陷与陷阱----读书笔记---第一章

    第一章:词法陷阱 编译器中负责将程序分解为一个一个符号的部分,一般称为“词法分析器”.例如,对于语句: if ( x == big ) big = x ; 它的第一个符号是C语言关键字if,紧接着下一 ...

  8. #《Essential C++》读书笔记# 第一章 C++ 编程基础

    前言 Stanley B.Lippman 先生所著的<C++ Primer>是学习C++的一本非常优秀的教科书,但<C++ Primer>作为一本大部头书,显然不适合所有的初学 ...

  9. 《深入理解计算机系统》(CSAPP)读书笔记 —— 第一章 计算机系统漫游

    本章通过跟踪hello程序的生命周期来开始对计算机系统进行学习.一个源程序从它被程序员创建开始,到在系统上运行,输出简单的消息,然后终止.我们将沿着这个程序的生命周期,简要地介绍一些逐步出现的关键概念 ...

随机推荐

  1. jqGrid怎样冻结指定的列

    第一步设置colModel  列内的 frozen: true: 第二步设置表格初始时宽度 shrinkToFit: false, 第三步设置  $gridTable.jqGrid('setFroze ...

  2. Python判断是否是闰年

    year = 2012 if year % 100 != 0 and year % 4 == 0: print('闰年') elif year % 100 == 0 and year % 400 == ...

  3. Centos7搭建OpenNebula云平台

    OpenNebula概述 OpenNebula是专门为云计算打造的开源系统,用户可以使用Xen.KVM.VMware等虚拟化软件一起打造企业云.利用OpenNebula可以轻松构建私有云.混合云.公开 ...

  4. 从0开始学爬虫11之使用requests库下载图片

    从0开始学爬虫11之使用requests库下载图片 # coding=utf-8 import requests def download_imgage(): ''' demo: 下载图片 ''' h ...

  5. 有关 MyEclipse->export runnable jar file选项 launch configuration里面没有可以选择的东西的解决方法

    为什么eclipse里export-->runnable jar file-->的launch configuration里面没有可以选择的东西或者新写的main方法却找不到呢? 将你程序 ...

  6. 网页开启QQ会话

    在网页中开启QQ会话是很常见的,那么到底怎么调用了. 一.首先要被开启的QQ开启推广服务.注意这个一般开启难免被骚扰,所以不要用生活号. 传送门:https://www.xinxiangseo.cn/ ...

  7. SpringCloud学习成长之十四 服务注册(consul)

    这篇文章主要介绍 spring cloud consul 组件,它是一个提供服务发现和配置的工具.consul具有分布式.高可用.高扩展性. 一.consul 简介 consul 具有以下性质: 服务 ...

  8. linux如何查看mysql是否启动

    linux下有很多服务,今天就写一下如何查看服务是否启动,以mysql为例子 使用命令 # service mysqld status 或者 # service mysql status 命令来查看m ...

  9. bootstrap-switch:记一次很坑的问题(连续相同状态的多行数据只有第一个显示按钮,其他行没有开关初始化)

    先上截图,第234行都是禁用状态,但是只有第2行显示了禁用开关,后面的都没有开关初始化 检查下代码: onLoadSuccess: function(data){ {#获取行数据的状态#} conso ...

  10. Arcgis javascript api 动态图层自图层可见性设置

    Arcgis javascript api 动态图层自图层可见性设置 子图层管理 rest服务 sublayers sublayer ArcGISDynamicMapServiceLayer 本文主要 ...