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

今天看了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. Qt中三种解析xml的方式

    在下面的随笔中,我会根据xml的结构,给出Qt中解析这个xml的三种方式的代码.虽然,这个代码时通过调用Qt的函数实现的,但是,很多开源的C++解析xml的库,甚至很多其他语言解析xml的库,都和下面 ...

  2. C++Primer第五版——习题答案详解(七)

    习题答案目录:https://www.cnblogs.com/Mered1th/p/10485695.html 第8章 IO库 练习8.1 istream &iofunc(istream &a ...

  3. 手动卸载CAD 删除残留文件 清理遗留的文件

    手动卸载基于 AutoCAD 产品的文件,从而删除所有残留文件. 清理安装失败所遗留的文件. 一.解决方案: 通过"控制面板"卸载该程序. 删除以下位置残留的 AutoCAD 文件 ...

  4. SPI、I2C、UART、I2S、GPIO、SDIO、CAN 简介

    转自http://sanwen.net/a/fmxnjoo.html SPI.I2C.UART.I2S.GPIO.SDIO.CAN,看这篇就够了 总线 总线,总要陷进里面.这世界上的信号都一样,但是总 ...

  5. 从零开始实现RPC框架 - RPC原理及实现

    最近被人问到RPC相关的东西~突然发现还是有很多原理没有清楚,所以要好好系统的学习一下RPC以及它的原理 先大致了解一下RPC的大概,原文:https://blog.csdn.net/top_code ...

  6. i++ 是线程安全的吗?

    相信很多中高级的 Java 面试者都遇到过这个问题,很多对这个不是很清楚的肯定是一脸蒙逼.内心肯定还在质疑,i++ 居然还有线程安全问题?只能说自己了解的不够多,自己的水平有限. 先来看下面的示例来验 ...

  7. android 开发 View _13 绘制图片与BitmapShader位图的图像渲染器

    BitmapShader位图的图像渲染器 TileMode 模式 Shader.TileMode.CLAMP 边缘拉伸. Shader.TileMode.MIRROR 在水平方向和垂直方向交替景象, ...

  8. java.lang.String (JDK1.8)

    String类实现了java.io.Serializable, Comparable<String>, CharSequence这三个interface. 看了下这三个interface中 ...

  9. html语义化练习易牛课堂代码

    html <body>     <header>         <!-- 导航 -->         <nav> <a href=" ...

  10. Python常用字符编码

    字符编码的常用种类介绍 第一种:ASCII码 ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一 ...