登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

AP计算机众里寻他千百度,名师成就满分路

AP计算机

 
 
 

日志

 
 
关于我

大学讲师,中国首批AP计算机教师,著有中国第一套,历经五年实践证明深受学生欢迎的成功的AP计算机双语教材,2013年以93%的满分率开创了中国AP计算机成功的先河,远远超出全美26.6%的满分率,为中国AP计算机教学树立了典范,并在同年加拿大计算机竞赛中勇夺桂冠,任教学生获哥伦比亚大学,麻省理工学院,卡耐基梅隆大学,宾夕法尼亚大学,康奈尔大学,西北大学等学校录取,远程学生遍及北京、长春、南京、重庆、广州、济南, 深圳、成都、费城,洛杉矶,加州,宾州,新罕布什尔州等地,希望借此平台为信息技术的发展做出贡献!

程序是怎么运行的-总结于《程序是怎么跑起来的》转载  

2016-11-09 10:32:04|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

版权声明:本文为博主(邮箱lixding@163.com)原创文章,转载请注明出处。

首先我们需要知道这些基础的计算机软硬件知识。 
1.程序运行必要的硬件 
1.必须有一个存储器,记忆程序和数据的存储器。 
2.必须有一个控制器,控制程序执行的控制器。 
3.必须有一个运算器,完成数据加工处理的运算器。 
4.必须有输入设备和输出设备,用于进行人机通信。 
2.程序是什么,由什么组成? 
程序是指示计算机每一步动作的计算机指令,由指令(机器语言)和数据组成。 
程序的运行环境=操作系统+硬件。 
3.cpu 
1.寄存器:用来暂时存储指令、和数据。不同的cpu内部有20-几百个寄存器,了解即可。 
A.寄存器的主要种类和功能 
种类 功能 
累加寄存器 存储执行运算的数据和运算后的数据 
标志寄存器 存储运算处理后的CPU的状态 
程序计数器 存储下一条指令所在内存的地址 
基址寄存器 存储数据内存的起始地址 
变址寄存器 存储基址寄存器的相对地址 
通用寄存器 存储任意数据 
指令寄存器 存储指令。CPU内部使用,程序员无法通过程序对该寄存器进行读写操作 
栈寄存器 存储栈区域的起始地址

B.如图实例(x86系列cpu主要寄存器) 
寄存器名 名称 主要功能 
eax 累加寄存器 同上图 
ebx 基址寄存器 存储内存地址 
ecx 计数寄存器 计算循环次数 
edx 数据计算器 存储数据 
esi 源地址寄存器 存储数据发送源的内存地址 
edi 目标地址寄存器 存储数据发送目标的内存地址 
ebp 扩展基址指针寄存器 存储数据存储领域基点的内存地址 
esp 扩展栈指针寄存器 存储栈中最高位数据的内存地址 
2.控制器:负责把内存上的指令、数据等数据读入寄存器,并根据指令执行的结果来控制计算机。 
3.运算器:负责运算从内存读入到寄存器的数据。 
4.时钟:负责发出cpu开始计时的时钟信号 
4.指令在cpu内部运行示意图 
这里写图片描述 
C.指令在cpu内部运行示意图 
扩展,如图D、机器指令的主要类型及功能 
类型 功能 
数据转送指令 寄存器和内存、内存和内存、寄存器与外围设备之间的读取操作 
运算指令 用累加寄存器执行算术运算、逻辑运算、比较运算以及移位运算 
跳转指令 实现条件分支、循环、强制跳转等 
call/return 指令 函数的调用、返回调用前的地址 
D.机器指令的主要类型及功能 
高级语言编写出来的程序,最后都转变为这些简单的指令了。 
5.内存 
内存的作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。计算机内存主要以下几种: 
a. 高速缓冲存储器(Cache):它位于CPU与内存之间,读写速度比内存更快的存储器。当CPU向内存中写入或读出数据时,这个数据也被存储进高速缓冲存储器中。当CPU再次需要这些数据时,CPU就从高速缓冲存储器读取数据,而不是访问较慢的内存,当然,如需要的数据在Cache中没有,CPU会再去读取内存中的数据。 
b. 只读存储器(ROM):ROM表示只读存储器(Read Only Memory),ROM中的一旦被写入就不能再更改,信息只能读出,即使机器停电,这些数据也不会丢失。ROM一般用于存放计算机的基本程序和数据,如BIOS ROM。 
c. 随机存储器(RAM):随机存储器(Random Access Memory)表示既可以从中读取数据,也可以写入数据。当机器电源关闭时,存于其中的数据就会丢失。也就是我们常说的内存条。 
d. 可以把内存想象成这样。 
内存 
这里写图片描述

6.磁盘 
磁盘的原理与使用都比较简单,笔者不再详细讲。 
看完基础的计算机软硬件知识,我们来了解编程语言,所以这里以java和C语言为例。有的读者可能要问为什么要以俩个为例。因为俩种语言在执行过程存在差别(虽然现在用编译型、解释型来分类编程语言已经有点力不从心了)。 
计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。 
1. C语言 
C语言是属编译类语言。编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高,但是可移植性差。

E.C语言编译过程 
这里写图片描述 
2. Java语言 
同C语言一样,java也是将java语法记述的源代码编译后运行。不过,编译后生成的并不是针对特定硬件环境使用的本地代码,而是字节码(也是我们说的.class文件)。运行时由java虚拟机转换成本地代码运行。所以代码的可移植性好,执行效率低。

F.java语言编译过程 
这里写图片描述 
总结 
一种是程序编译成机器语言,操作系统把机器语言(指令)复制到内存。内存中最有可能被cpu用到的数据放入cache。然后cpu与内存交互处理数据(程序执行)。 
二是java虚拟机解释成机器语言放到内存中,内存中最有可能被cpu用到的数据放入cache。然后cpu与内存交互处理数据(程序执行)。 
这里写图片描述

  评论这张
 
阅读(418)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018