刚刚注册了这个博客园,尽量保持每日一更(*/ω\*)

今天看了po学院的教学视频,了解了程序是什么,如何在CPU当中工作的等各种之前未曾想过的问题,特此记录,以防忘记

首先我们学习程序与CPU之前需要了解这么几个问题:

1.什么是程序?

2.程序是由什么组成?

3.什么是机器语言?

3.运行中的程序存储在什么位置?

4.什么是内存地址?

5.程序的解释和运行的计算机部件叫什么?

我们带着问题来学习,将会有很大的效果

首先我们需要了解CPU是什么?

CPU(Central Processing Unit)是中央处理器的缩写,听名字很牛X,实际上它还真的很牛X,CPU是电脑中重要组件之一,电脑中可以没有显卡,可以没有风扇,可以没有网线,但没有CPU,整个计算机将无法运行,CPU可以简单理解为是用来控制计算机运行的工具

当然,我们既然是要成为CTF竞赛王者的男人,光知道这些宽泛的东西还是远远不够的,我们还需要了解CPU其内部还有哪些东西

CPU里面包含:1.寄存器

2.控制器

3.运算器

4.时钟

寄存器:是短暂存储一些值的地方,可以理解为它是用来存储电脑中数据的地方

这里我们需要额外了解一下,我们的程序是分为两个部分的,一个是指令(算法),一个是数据,数据则是我们寄存器需要存储的东西

可以简单理解为寄存器就是我们电脑当中的内存,当然这是绝对错误的

控制器:是用来控制寄存器读取,写出,更换等操作的硬件,

运算器:顾名思义,运算器是我们的逻辑运算单元,辅助单元,协助寄存器和控制器来达到运算的效果

时钟:它是推动我们CPU其他三个硬件的硬件,可以理解为它是我们CPU当中的发动机,时钟是通过频率来计算(GHz),1GHz=10亿次每秒,也就是说我们可以每秒计算10亿次

作为日后需要编写程序的程序员,寄存器是我们需要重点了解的,也是我们软件工程师唯一能够接触到的,CPU可以理解为是寄存器的集合

说了这么多,那么程序员编写出的程序是如何一步一步的放到CPU当中实现运行的呢?

上面讲过,程序是由数据和指令构成的,也就是说,程序在写完之后,他仅仅是代码,代码对于计算机来说毫无意义,因为机器根本读不明白你的代码,这样,我们就需要一个叫做编译器的东西,他充当了你和机器之间的翻译功能,例如,C语言写Hallo world:printf("hallo world");,这串代码计算机是看不明白的,我们的编译器可以将这串代码翻译成计算机能够读懂的二进制语言(在以后的课程会提到),并将其转换成.exe格式的文件,这样一来,通过windows内所拥有的加载程序,将写出的程序放入到CPU里,就可以达到这么一个运行的操作啦

简单理解就是:代码->exe->加载->CPU

这样一来,我们就涉及到了编程语言的两种类型,一类是高级语言,一类是低级语言,高级语言使我们人类能够看得懂弄的明白的,而低级语言则是机器能够读懂并运行的

高级语言有着两种发展方向,一个是更好记忆,一个是指令更少

高级语言需要通过编译器转化才能够被机器运行

编译后生成可执行文件(如EXE)

执行EXE文件后WINDOWS会将数据加载到内存上

CPU通过寄存器,运算器,控制器,时钟来与内存进行交互

到这里,我们对于CPU的了解已经超越了75%的小白了,但可不要沾沾自喜,距离我们的目标CTF大神可仅仅完成了百分之1不到,之前说了,作为程序员最需要了解的便是寄存器了,下面我们来重点介绍下CPU当中的寄存器是如何工作的

CPU当中的寄存器包含以下种类:

累加寄存器:记录计算之后的数据,用于运算,算数

标志寄存器:记录计算之后的数据是否溢出,帮助CPU进行逻辑判断

程序计数器:存储下一条指令在内存当中的地址,记录下一条指令的值

基址寄存器:存储当前数据内存开始的位置

变址寄存器:存储基址寄存器的相对位置

通用寄存器:顾名思义,什么都可以用

指令寄存器:CPU内部使用,存储当前指令

栈(zhan)寄存器:记录我的起始位置

以上,便是我对CPU的所有理解,CPU内的所有硬件各司其职,缺一不可,寄存器这方面比较难,但是对于一个合格的软件工程师来说则是必不可少的基础知识

本文章由小神龙编写,转载请注明出处

小白的CTF学习之路1——程序与CPU的更多相关文章

  1. 小白的CTF学习之路2——二进制数据基础与运算(上)

    今天的第二更,被我拖到了傍晚,嘿嘿,二进制这方面让本就数学不好的我很头疼,所以研究了一段时间 在学习之前我们先了解几个问题: 32位是几个字节? 01011100对于十进制是多少? 00001111向 ...

  2. 小白的CTF学习之路8——节约内存的编程方式

    今天第二更,废话不说上干货 上一章我们学习了内存和cpu间的互动方式,了解到内存的空间非常有限,所以这样就需要我们在编程的时候尽可能的节省内存空间,用最少的空间发挥最大的效果,以下是几种节约内存的方法 ...

  3. 小白的CTF学习之路7——内存与硬盘

    前天去网吧跟朋友包宿,导致昨天一整天都报废,今天早上研究了一下nethunter导致手机成功变砖,感冒不停地咳嗽,这些理由应该足够我前两天拖更了吧,下面开始正题 磁盘学习路线 虚拟缓存 虚拟内存 节约 ...

  4. 小白的CTF学习之路5——内存的逻辑结构

    很衰的一天,各种意料之外的问题,但都挡不住我每日一更的步伐 内存的逻辑结构大致分为以下几种: 数组 栈与队列 链表 二叉树 以上,数组,栈,链表是我这章要说明的 在学习前需要了解的两个问题: 1.内存 ...

  5. 小白的CTF学习之路6——阶段测评

    刚才考了自己一次,下面我把题和答案放到下面 CPU中不含有以下选项中的  C A:     运算器 B:      寄存器 C:     内存 D:     时钟 这是一道送分题,CPU包含以下几种原 ...

  6. 小白的CTF学习之路4——内存

    明天要进行二模考试了,沉住气,加油,能过 内存是学C路上必不可少的一环,一定要非常认真的去学 内存的物理结构: ROM:只读内存——早期的手机 RAM:读写(数据断点既消) DRAM:经常更新 SRA ...

  7. 小白的CTF学习之路3——二进制数据基础与运算(下)

    处理了二进制的整数运算,下面我们来进行令人绝望的浮点数运算 我们先来看一下float事列程序: #include<"stdio.sh"> int main() { fl ...

  8. 新手小白的Linux学习之路

    大家好,我是一个零基础的新手小白,在此和大家分享一下新手小白的学习之路.欢迎各位大神指教!谢谢 Linux简介: Linux操作系统诞生于1991年10月,由芬兰赫尔辛基大学的在校生Linus Tor ...

  9. 小白的mapbox学习之路-显示地图

    刚接触mapbox,只是简单记下自己的学习之路,如有错误,欢迎大神指正 1-头部引入链接 2-body中定义一个div块,用来显示地图 3-在script中创建一个map对象,并设置相关参数 mapb ...

随机推荐

  1. Promise的实现原理

    1.Promise 介绍 Promise类似一个事务管理器,将用户异步操作流程用流水的形式来表达,用来延迟deferred和异步asynchronous. 特点如下: (1)对象的状态不受外界影响 P ...

  2. 为 github markdown 文件生成目录(toc)

    业务需要 在编写 github 项目时,有时候会编写各种 README.md 等 markdown 文件,但是 github 默认是没有目录的. 于是就自己写了一个小工具. markdown-toc ...

  3. Android 开发 框架系列 Android-Universal-Image-Loader 图片加载使用demo

    Android-Universal-Image-Loader github地址:https://github.com/nostra13/Android-Universal-Image-Loader 加 ...

  4. 最强Hibernate搭建文章(转)

    Hibernate优势: 1.Hibernate对JDBC访问数据库的代码做了轻量级的封装,大大简化了数据访问的层的重复性代码,并却减少了内存消耗,加快了运行效率. 2.Hibernate是一个基于J ...

  5. activemq 无法消费! consumers are alive when the messages are stuck !

    我的微服务中, activemq 消费 一条消息的时候, 出了错, 结果导致了 那条消息就一直处于pending 状态, queue.user.545c2ed5-fee7-482a-bb59-564b ...

  6. python class的创建

    def f(): class a(): a=5 def f2(): pass Disassembly of f: 14 0 LOAD_CONST 1 ('a') 3 LOAD_CONST 3 (()) ...

  7. STL里的内存池实现

    这个貌似有点复杂,解决的主要问题 就是 减少 内存分配次数,减少用户态核心态切换中断次数,提高运行速度,预分配 和线程池一个道理,预分配 ////////////////////自由链表 union ...

  8. 联想电脑t450,t460p,t470等安装好ubuntu后启动找不到系统

    其实我是这样解决的: 进入bios: 关quick start 关security 然后reboot就可以了

  9. jstat查看JVM GC情况

    转自 https://www.cnblogs.com/yjd_hycf_space/p/7755633.html

  10. 【Django】 TemplateDoesNotExist at /HTMLeditor/HTMLeditorHandler/

    TemplateDoesNotExist at /HTMLeditor/HTMLeditorHandler/search/indexes/htmleditor/htmleditor_text.txt ...