《程序是怎样跑起来的》读书笔记

学习目标:

背景介绍:跨专业转码选手,已入职一年,目前通过一些科普书籍对计算机体系有一个初步的认知,后续将会对四大课程进行系统的学习
引用该书原作者的一句话开始终身学习之旅

了解本质非常重要,这句话对任何事物都是成立的。只有理解本质才能举一反三,才能够更容易地理解新技术

学习内容:

此处罗列该书的目录结构

  1. 对程序员来说CPU,到底是什么
  2. 用二进制来理解数据
  3. 计算机在计算小数时会出错的原因
  4. 让内存化方为园
  5. 内存与磁盘的密切联系
  6. 自己动手压缩数据
  7. 程序在怎样的环境下运行
  8. 从源文件到可执行文件
  9. 操作系统与应用程序的关系
  10. 通过汇编语言认识程序的真面目
  11. 访问硬件的方法
  12. 如何让计算机“学习”

第一章读书笔记 —— 对程序员来说,CPU到底是什么

cpu中的组成部分作用
控制器根据时钟信号从内存中读取指令和数据
运算器通过对指令进行解释和执行,对数据进行运算
时钟产生时钟信号
寄存器按照功能分类为以下几种
累加器存放执行运算的数据和运算结果
标志寄存器存放运算处理后cpu的状态
程序计数器存放下一条指令所在的内存地址
基址寄存器存放数据内存的起始地址
变址寄存器存放基址寄存器的相对地址
通用寄存器存放任意数据
指令寄存器存放指令,仅cpu内部使用
栈寄存器存放栈空间的起始地址

根据程序中常用的几种语法来描述上述寄存器的作用

顺序执行(程序计数器)

操作系统将程序从硬盘复制到内存之后,就会将程序计数器的值设置为0100,然后程序开始执行,cpu每执行一条指令,程序计数器的值就会自动加1,直至执行完所有指令
这里有一个小疑问,0105中的数据取出来之后0106的数据会自动填充到0105的位置上吗?不然为什么0101的指令中还是从0105的地址中取值的呢?

地址内存中的内容
0100指令:将地址0105中的值存放到累加器中
0101指令:将地址0105中的值存放在通用寄存器中
0102指令:将累加器和通用寄存器中的值相加并存放到累加器中
0103指令:将累加器中的值显示在屏幕上
0104指令:程序结束(返回操作系统)
0105数据:123
0106数据:456

条件执行(标志寄存器)

标志寄存器会根据上次运算的结果,保存累加器和通用寄存器的值,无论是正数、负数还是零,都会保存(也会保存溢出和奇偶校验的结果)。假设要将累加器中的值XX和通用寄存器中的YY进行比较,当执行指令时,CPU的运算其会在内部执行XX-YY的操作,差值的结果即代表比大小的结果

地址内存中的内容
0100指令:将地址0106的值存放到寄存器中
0101指令:将累加器中的值与0进行比较
0102指令:如果累加器中的值大于0则跳转到地址0104
0103指令:将累加器中的值的符号取反
0104指令:将累加器中的值先是在屏幕上
0105指令:程序结果(返回操作系统)
0106数据:123

函数调用(栈寄存器)

函数调用时使用调用指令和返回指令来实现

  • 调用指令:在将函数入口地址设置到程序计数器之前,会将函数调用的下一条指令的地址保存到栈的空间中
  • 返回指令:在函数体执行完毕之后,将保存在栈中的地址设置到程序计数器中

数组使用(基址和变址寄存器)

实际地址=基址寄存器+ 变址寄存器
100000001000000000000000
100000011000000000000001
100000021000000000000002
1000FFF10000000FFF
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值