小白的CTF学习之路1——程序与CPU

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

今天看了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内的所有硬件各司其职,缺一不可,寄存器这方面比较难,但是对于一个合格的软件工程师来说则是必不可少的基础知识

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

原文地址:https://www.cnblogs.com/xiaoshenlong/p/10640013.html

时间: 2025-01-22 18:51:29

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

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

今天的第二更,被我拖到了傍晚,嘿嘿,二进制这方面让本就数学不好的我很头疼,所以研究了一段时间 在学习之前我们先了解几个问题: 32位是几个字节? 01011100对于十进制是多少? 00001111向左位移两位结果是多少?有什么规律? 以补码形式表示的8位二进制数11111111,十进制为多少? 二进制和十进制有什么区别? 在学习前肯定会对问题里的一些属于感到蒙蔽,不要急,按照我写的一步一步往下看,再回头看这些问题,就会迎刃而解 为什么要用二进制? 可能有些人不了解我们放着好好地十进制不用为什么

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

明天要进行二模考试了,沉住气,加油,能过 内存是学C路上必不可少的一环,一定要非常认真的去学 内存的物理结构: ROM:只读内存——早期的手机 RAM:读写(数据断点既消) DRAM:经常更新 SRAM:不常更新 以上内容了解便可 顾名思义,内存就是我们电脑存放数据的地方,那么他是怎么实现能够存放数据的呢?下面我们来一探究竟 内存同样是有许多集成电路(IC)组成的IC具体是怎么运作的呢?可以看下我下面放出的图片 emmmm,这是我画的一张非常简易的集成电路,大致就是我们电脑内存条的这个部分 看不

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

刚才考了自己一次,下面我把题和答案放到下面 CPU中不含有以下选项中的  C A:     运算器 B:      寄存器 C:     内存 D:     时钟 这是一道送分题,CPU包含以下几种原件 寄存器 控制器 运算器 时钟 CPU中负责计时的部件是  G E:      程序计数寄存器 F:      时钟 G:     控制器 H:     靠人来计时 其实这个答案我本人也是存疑的,目前网上没有关于这方面的资料,但是肯定不会选F了,时钟是决定CPU运算速度的部件 对于汇编以下说法正确

小白的java学习之路 “ 循环结构(二)”

一.for 循环 语法: for(表达式一;表达式二;表达式三){ 循环操作 } 表达式一:参数初始化 表达式二:条件判断 表达式三:更新循环变量 执行流程: 步骤一:执行表达式一.初始化参数 步骤二:执行表达式二进行循环条件的判断 步骤三:如果循环条件为true则执行循环操作,如果为false则退出循环执行以下代码 步骤四:当循环操作执行完毕后执行表达式三,更新循环变量 表达式三执行完毕后继续执行表达式二进行循环判断,如果为真则执行循环操作,如果为假则执行以下代码,以此类推..........

小白的java学习之路 “ 选择结构(二)”

switch 选择结构: 为什么使用switch选择结构: switch选择结构可以更好地解决等值判断问题. switch选择结构的四个关键字: switch    case    default    break switch选择结构语法: switch (key) { case value: break; case value: break; case value: break; default: break; } 根据key去匹配value的值,如果value的值跟key相同则走case块

小白的java学习之路 "类的无参方法"

Java注释: //:单行注释 /**/:多行注释 /** */:JavaDoc注释语法: 访问修饰符 返回值类型 方法名(){ 方法体 } 举例: public void run(){ System.out.println(""); } public String robball(){ String ball="球"; return ball; } 方法的返回值: 1.如果方法具有返回值,方法中必须使用关键字return返回该值,返回值类型为该返回值的类型 ret

小白的java学习之路 “ 字符串”

定一个字符串可以使用string类和stringbuffer类. string类提供了大量的操作字符串的方法,常用的如下: 获得字符串的长度: length(). 比较字符串:equals(). 链接字符串:concat(). 提取字符串:substring(). 搜索字符串:indexOf(). 拆分字符串:spilt(). 常用的stringbuffer类提供的方法如下: 转换成string类型:tostring(). 链接字符串:append(). 插入字符串:intsert(). 一些案

教你从零基础小白开始怎么学习C语言

想窥探神秘的代码世界?最好的入口无疑就是C语言. C语言是计算机体系结构的基础,向下可以操作硬件(包括ARM,DSP,单片机等各种微处理器),还可以写驱动,写OS,写编译器.向上可以进一步的学习C++,JAVA等面向对象语言,再学习一些图形用户界面框架,比如Qt,MFC,就可做出类似于计算器.QQ等Window桌面应用,再比如Android,就可以做出微信等Android应用,再比如Unity3D,就可以做出类似王者荣耀.刺激战场等手游.想想是不是就有点小激动呢!最后,如果大家如果在自学遇到困难

zz 游戏程序员的学习之路(中文版)

游戏程序员的学习之路(中文版) Milo Yip · 1 天前 感谢 @楚天阔(tkchu)编写脚本及整理中文译本数据,自动从英文版生成中文版,SVG / PDF 版本中的书籍图片现在链接至豆瓣页面. Github miloyip/game-programmer 检视/下载中文版 SVG / PDF 「真诚赞赏,手留余香」 赞赏 15 人赞赏 程序员游戏开发书籍推荐 分享 举报 977 文章被以下专栏收录 Milo的编程 进入专栏 97 条评论 写下你的评论 trycatch 这是劝退吧...