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. debian9 ps 命令不能用

    # cat > /etc/apt/sources.list << EOF> deb http://mirrors.aliyun.com/debian/ stretch main ...

  2. 到底啥是鸭子类型(duck typing)带简单例子

    #百度百科鸭子类型定义 这是程序设计中的一种类型推断风格,这种风格适用于动态语言(比如PHP.Python.Ruby.Typescript.Perl.Objective-C.Lua.Julia.Jav ...

  3. [转]eclipse常用设置

    原文:https://www.cnblogs.com/wangmingshun/p/5675857.html Eclipse重新设置workspace Window—>Preferences—& ...

  4. PHP过狗webshell编写过程

    0x1 先上图: 0x2 编写过程 这里必须强调一下我内心的感觉,小阔爱前两天也研究了过狗的一句话了,然后我突然觉得大家都在进步,我研究点啥呢?不如也试试以前因为觉得自己不懂代码,而不会研究的免杀sh ...

  5. shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计

    shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计 shell中的数组的用法: shell数组中的下标是从0开始的 array=("Allen" & ...

  6. asp乱码问题

    UTF-8编码的话:在ASP脚本顶部加入<%@Language="vbscript" Codepage="65001"%>以及再在<head& ...

  7. 算法习题---5.5集合栈计算机(Uva12096)*****

    一:题目 对于一个以集合为元素的栈,初始时栈为空. 输入的命令有如下几种: PUSH:将空集{}压栈 DUP:将栈顶元素复制一份压入栈中 UNION:先进行两次弹栈,将获得的集合A和B取并集,将结果压 ...

  8. MySQL5.7.10 初始化失败error

    http://blog.csdn.net/saife/article/details/51133317

  9. Fiddler抓取Android手机网络数据包

    也许你也有疑问,如果开发没有完备的接口文档,我如何知道他API的信息? 这时我们就得通过一些抓包工具抓取这些API信息. 常见抓包工具 HTTP抓包工具:Fiddler.Charles.Firebug ...

  10. WXS-运算符