首页 > 编程语言 >《程序是怎样跑起来的》读书笔记1——对程序员来说CPU是什么

《程序是怎样跑起来的》读书笔记1——对程序员来说CPU是什么

时间:2023-04-02 11:33:44浏览次数:43  
标签:读书笔记 程序 程序员 指令 内存 寄存器 CPU eax

一丶什么是程序

程序是指令和数组的组合体,如:print("你好世界"),其中print是指令,你好世界是数据。

CPU能直接识别和执行的只有机器语言,使用C,java这种高级语言编写的程序需要编译转换后才可以运行。

二丶CPU的内部结构

CPU即中央处理器,相当于计算机的大脑,内部由许多晶体管构成,负责解释和运行最终转换成的机器语言程序。

image-20230402101750515

  • 寄存器:暂存指令和数据等处理对象。
  • 控制器:负责把内存上指令,数据等读入寄存器,并根据指令的执行结果来控制整个计算机。
  • 运算器:负责运算从内存读入到寄存器的数据
  • 时钟:负责发起cpu开始计时的时钟信号,时钟信号频率单位为赫兹,频率越高CPU运算速度越快。

程序启动后,根据时钟信号,控制器会从内存中读取指令和数据,通过对这些指令加以解释和运行,运算器会对数据进行运算,控制器根据计算结果来控制计算机(控制:除了数据运算之外的处理,比如内存和磁盘等输入输出设备,显示器,打印机等的输出)

三丶寄存器

1.为什么需要寄存器

CPU 的运算速度远高于内存的读写速度,为了避免被拖慢,CPU 都自带一级缓存和二级缓存,但是数据在缓存中地址并不固定,cpu每次读写缓存都需要寻址,为了减少寻址的开销,最频繁读写的数据(比如循环变量),都会放在寄存器里面,CPU 优先读写寄存器,再由寄存器跟内存交换数据

2.从一段汇编开始了解寄存器

mov eax, dword ptr [ebp-8]  #将数值从内存赋值到eax寄存器
add eax, dword ptr [ebp-0ch] #eax的数值和内存的数值相加
mov eax, dword ptr [ebp-4],eax #把eax的数值(上一步计算的结果)存储到内存中

使用高级语言编写的程序在编译后转化为机器语言,机器语言基本上和汇编一一对应。

上面代码中 eax,ebp都是寄存器的名称,

种类 功能
累加寄存器 存储执行运算的数据和运算后的数据
标志寄存器 存储运算处理后cpu的状态
程序计数器 存储下一条指令所在的内存地址
基址寄存器 存储数据内存的起始地址
变址寄存器 存储基址寄存器的相对位置
通用寄存器 存储任意数据
指令寄存器 存储指令,cpu内部使用,程序员无法修改
栈寄存器 存储栈区域的起始地址

其中程序计数器,累加寄存器,标志寄存器,指令寄存器和栈寄存器只有一个,其他的寄存器一般存在多个。

image-20230402104857941

对于程序员来说只需要理解寄存器的作用,cpu是一组寄存器的组合

3.程序计数器

程序启动后,操作系统会将硬盘中保存的程序复制到内存中,命令和数据通常被存储到多个地址上,操作系统在复制程序到内存的时候,会将程序计数器设定为起始位置,CPU每执行一个指令,程序计数器就会自动加上1,因此CPU会依据程序计数器的数值从内存读取命令并执行

4.条件分支和循环机制是怎么 实现的

image-20230402110658736

条件分支和循环中使用跳转指令,需要参照当前执行的运算结果来判断是否跳转,其中标志寄存器会保存当前计算的结果,条件分支在跳转指令钱会进行比较运算,至于是否执行跳转指令,则由cpu参考标志计算器的内容后进行判断。

5.函数的调用机制

调用函数的本质是将程序计数器设置为函数的存储地址。不过这和条件循环分支不同,因为丹村的跳转指令没办法实现函数的调用,函数调用结束后需要回到原本的调用点。

机器语言使用call,return指令解决这个问题,调用函数使用call指令,call指令会将要执行的指令地址存储到栈内存中。

image-20230402111705295

函数处理完毕后,再通过函数的出口执行return指令,return指令会将栈中地址设定到程序计数中。

image-20230402111749777

标签:读书笔记,程序,程序员,指令,内存,寄存器,CPU,eax
From: https://www.cnblogs.com/cuzzz/p/17280131.html

相关文章

  • 一名C++程序员的Rust入门初体验
    作者最近尝试写了一些Rust代码,本文主要讲述了对Rust的看法和Rust与C++的一些区别。背景S2在推进团队代码规范时,先后学习了盘古编程规范,CPPcoreguidelines,进而了解到clang-tidy,以及GoogleChrome在安全方面的探索。C++是一个威力非常强大的语言,但是能力越大,责任越大,它......
  • 一个循环采集CPU的etl日志的脚本
    一个循环采集CPU的etl日志的脚本mdD:\\tempsetTargetDriveEtl=D:\\temp@echooffSET/A"index=1"SET/A"count=10":whileif%index%leq%count%(echoThevalueofindexis%index%wmicprocesswherename="wprui.exe"......
  • 软件测试经验与教训之测试文档和与程序员交互
    测试文档的核心需求:1.测试文档主要支持我们找出这个产品版本中的程序错误,指派工作和跟踪工作状态2.测试文档为新测试小组成员提供培训材料,让新成员快速的了解产品测试文档模板的优点是以标准组织形式,涵盖一组标准化的问题,并使用标准术语,这样会使人更容易理解但是测试模板有时......
  • Windows 环境以 CPU 运行 stable diffusion
    前言 stable-diffusion-webui要求的Python版本是3.10.6,本机还是几年前装的3.10.0,为了避免处理更多幺蛾子,直接升级到3.10.6,还好之前就是3.10,可以直接升级。还有一个好处就是不用安装conda或者miniconda,Python虚拟环境直接就是3.10.6。其实3.10其他小版本的环......
  • 三月读书笔记3
    阅读了《人月神话》贵族专制、民主政治和系统设计,画蛇添足,贯彻执行,为什么巴比伦塔会失败?这几章,对于《人月神话》这本书也有了更深的了解,这本书在宏观的大层面的角度看待软件工程的系统开发,没一句讲的具体知识,讲的全是一个项目的开发注意事项。首先,运用大教堂的成功,巴比伦塔的失败,......
  • 构建之法 读书笔记
    体会:书中举的四则运算的例子做深了以后可能还涉及一些相对比较复杂的算法,可是在现实中接触到的系统很多是业务驱动的系统,用户量可能不会超过2000,CRUD,业务复杂流程交给成熟的工作流系统去做了,CRUD是很简单的数据库表操作,数据库操作有现成的框架,前端有现成的框架,后端有现成的框架,程......
  • 读书笔记(三)
    构建之法这本书的好首先就在于这是一本全景式的图书,能让你更了解这个软件行业。可以让人从陌生变熟悉,所以这本书是不错的。其次,这是一本实践式的书,涵盖了科学软件开展的每个方面,不单单只是实践,理论的东西也很重要。我们中国大陆的教育工作者更接近实际,所以这本书就介绍了我们教育......
  • 读书笔记(二)
    体会:我大概听过两类企业,有一类是每个工程师就是一个螺丝钉,在自己的某个技术上发挥极致的能力,有一类是每个工程师类似一个"大杂烩"(这个比喻不知道恰当与否,就是表示工程师需要处理项目中各类技术方面的问题),前一类公司培养出来的工程师可能是强化自己现有的技术能力,而另外一类公司的......
  • 构建之法读书笔记四
    第五章团队和流程5.2软件团队的模式主治医师模式、明星模式、社区模式、业余剧团模式、秘密团队、特工团队、交响乐团模式、爵士乐模式、功能团队模式、官僚模式5.3开发流程①写了再改模式②瀑布模型(WaterfallModel)是一个项目开发架构,开发过程是通过设计一系列阶段顺序......
  • 构建之法读书笔记三
    第四章两人合作4.1代码规范包括代码风格规范和代码设计规范4.2代码风格规范代码风格原则:简明、易读、无二异性缩进:4个空格,而不是TAB行宽:限定为100字符括号断行与空白的{}行分行命名:匈牙利命名法下划线:分隔变量名字中的作用域标注和变量语义大小写(Pascal形式和Camel......