编程如何驱动计算机完成工作

1.计算机的工作原理

要想理解编程如何驱动计算机完成工作,就要理解计算机是如何工作的。

1.1 现代计算机的几个构成部件

中央处理单元(CPU,central processing unit),承担计算机绝大部分的运算和控制工作,负责处理程序。

随机存取内存(RAM,random access memory),存储程序和文件的工作区。

外围设备,如键盘、鼠标、触摸屏、监视器,提供人与计算机之间的交互。

1.2 CPU的日常工作

CPU从内存中获取并执行一条指令,然后再从内存中获取并执行下一条指令,以此类推。(*科普:世界最强CPU-ThreadRipper 2990WX,最高频率为4.2GHz,即一秒钟能重复这样的操作大约42亿次)

CPU拥有自己的小工作区,由若干个寄存器组成,每个寄存器都能储存一个数字,其具体工作方式为:

  1. 一个寄存器储存下一条指令的内存地址,CPU使用该地址来获取和更新下一条指令

  2. 在获取指令后,CPU在另一个寄存器中储存该指令,并更新第1个寄存器储存下一条指令的地址。

CPU能理解的指令有限(这些指令的集合叫做指令集)。而且这些指令相当具体,其中许多指令都是用于请求计算机把一个数字从一个位置移动到另一个位置。

*科普两个小知识:

  1. 储存在计算机中的所有内容都是数字。计算机以数字形式储存数字和字符,每个字符都有一个数字码。计算机载入寄存器的指令也以数字形式储存,指令集中的每一条指令都有一个数字码。

  2. 计算机程序最终必须以数字指令码(机器语言)来表示。

1.3 过去的编程,机器语言

用数字码表示指令,且指令贴近计算机处理工作的方式,需要考虑CPU在完成任务时具体需要哪些步骤。

例如,对于两数相加,要分成以下几个步骤:

  1. 从内存位置 2000 上把一个数字拷贝到寄存器 1

  2. 从内存位置 2004 上把另一个数字拷贝到寄存器 2

  3. 把寄存器 2 中的内容与寄存器 1 中的内容相加,把结果储存在寄存器 1 中

  4. 把寄存器 1 中的内容拷贝到内存位置 2008

而你要做的是,必须用数字码来表示以上每个步骤,十分反人类。

1.4 现在的编程,高级计算机语言+编译器

不必用数字码表示指令,且指令贴近人类思考问题的方式,抽象地表达你的想法。

例如,对于两数相加,可以写成:total = a + b;

对于我们而言,光看这行代码就能明白计算机要做什么;而对于计算机而言,这是一堆无法理解的无用数据。此时要使用编译器,它是将高级语言翻译成计算机能理解的机器语言指令集地程序。你作为程序员,进行高级思维活动,而编译器则负责翻译工作。使用不同的编译器和编译器集,可以将一种高级语言翻译成匹配不同类型CPU所使用的机器语言程序。而且,高级语言对人类更友好,简单易学。

1.5 总结

计算机的工作原理是:如果希望计算机做某些事,就必须为其提供特殊的指令集(程序),确切地告诉计算机要做的事以及如何做。在过去,你必须用计算机能直接明白的语言(机器语言,即由01组成的数字指令码)创建程序,这是一项繁琐、乏味、费力的任务;在现在,你可以使用能高级语言,抽象地表达自己想法,通过编译器创建计算机能直接明白的程序。

1.6 思考题

CPU在接收指令集后的工作原理。

参考文献:

[1]Stephen Prata.C Primer Plus[M].(第6版).北京:人民邮电出版社,2016:4-5.

原文地址:https://www.cnblogs.com/poppylibrary/p/12272616.html

时间: 2024-10-24 12:45:46

编程如何驱动计算机完成工作的相关文章

《Python编程快速上手 让繁琐工作自动化》pdf

<div id="article_content" class="article_content tracking-ad" data-mod="popu_307" data-dsm="post"> <p><br></p><p>下载地址:<a target="_blank" href="https://page74.ctfile.co

20150226 IMX257 总线设备驱动模型编程之驱动篇

20150226 IMX257 总线设备驱动模型编程之驱动篇 2015-02-26 11:42 李海沿 前面我们已经实现了 总线和设备 的驱动程序,接下来我们的任务就是 实现 驱动 了 地址:http://www.cnblogs.com/lihaiyan/p/4301079.html http://www.cnblogs.com/lihaiyan/p/4301072.html 在实现驱动程序之前,我们来想两个问题: 一.问题分析 1.什么时候驱动程序会在总线上找它可以处理的设备? 在driver

Python编程快速上手 让繁琐工作自动化 PDF下载

网盘下载地址:Python编程快速上手 让繁琐工作自动化 PDF下载 – 易分享电子书PDF资源网 作者: Albert Sweigart 出版社: 人民邮电出版社 副标题: 让繁琐工作自动化 原作名: Automate the Boring Stuff with Python: Practical Programming for Total Beginners 译者: 王海鹏 出版年: 2016-7-1 页数: 391 内容简介 · · · · · · 如今,人们面临的大多数任务都可以通过编写

分析汇编代码理解计算机如何工作

周玉勇 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 把C代码反汇编成汇编代码,再来分析计算机如何工作 下面是C代码 C代码编译成汇编的代码 简化的汇编代码 1 g: 2 pushl %ebp 3 movl %esp, %ebp 4 movl 8(%ebp), %eax 5 addl $6, %eax 6 popl %ebp 7 ret 8 f: 9 pushl %ebp 10 mov

计算机毕业生工作经验心得_百度经验【转载】

今天在百度的程序员贴吧看到的一则文章,蛮有启发的,收藏一下 计算机毕业生工作经验心得_百度经验http://jingyan.baidu.com/article/3aed632e056ce470108091d6.html

计算机如何工作小解

计算机如何工作小解 “20135224陈实 + 自己博客园 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” 汇编代码如下: 基本理解工作过程如下: 根据汇编语言:在g函数中,开头语句都是创建堆栈起始语pushl,movl分别对应下图(下右图eax值应该是算过main与F之后的esp值+5,这里只做函数顺序理解) 对应f与main开头语大同小异: 在进行到语句subl时候,ESP下移,将要保留的数值5放入

MDT2012部署问题,MDT中的驱动是如何工作的

我们知道在MDT中我们可以进行驱动的导入,如下图   也就是说我们会把公司PC需要的驱动都在MDT中进行导入,然后当我们去给一台PC部署操作系统,MDT就会使用这些驱动,那么就有一个疑问,什么疑问?疑问是MDT是如何知道我部署的PC需要哪些驱动呢?好的,下面我们来看看MDT驱动的具体工作过程,answered by Microsoft System Center MVP.   链接地址:http://social.technet.microsoft.com/Forums/en-US/30230c

小试牛刀--编程实现获取计算机的IP地址和计算机名

1.2.3  小试牛刀--编程实现获取计算机的IP地址和计算机名(1) 实例功能 获取当前计算机的IP地址和计算机名 源码路径 光盘\yuanma\1\IP 本实例的目的是,使用Visual C++ 6.0开发一个获取当前机器的IP地址和计算机名的应用程序. 1. 设计MFC窗体 使用Visual C++ 6.0创建一个MFC项目后,根据本实例的需要设计两个窗体,分别是IDD_ABOUTBOX窗体(见图1-12)和IDD_IPADDRESS_DIALOG窗体(见图1-13).   图1-12 

Python编程快速上手-让繁琐工作自动化-第二章习题及其答案

Python编程快速上手-让繁琐工作自动化-第二章习题及其答案 1.布尔数据类型的两个值是什么?如何拼写? 答:True和False,使用大写的T和大写的F,其他字母是小写. 2.3个布尔操作符是什么? 答:and.or和not. 3.写出每个布尔操作符的真值表(也就是操作数的每种可能组合,以及操作的结果) 答:and:True and True  -> True True and False -> FalseFalse and True -> FalseFasle and False