浅谈计算机程序的工作过程

----------------------------------------------------------------------------------------------------------------------------------------

  本文为《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000。第一课课后作业。学生姓名:刘征

  本文主要内容是写一个简单的C语言程序,将其转换成汇编代码后,分析其中栈的变化。如果有错误,请您提出宝贵的意见,谢谢。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

  在分析代码之前,先讲一下基础的汇编语言:

  1、movl  %eax,  %edx    //edx=eax   (寄存器寻址与内存无关)

  2、movl $0x123,  %edx      //edx=0x123  (立即寻址)

  3、movl 0x123,  %edx     //edx=*(int32_t *)0x123

  4、movl (%ebx),  %edx     //edx=*(int32_t *)ebx

  5、movl 4(%ebx),   %edx     //edx = *(int32_t * ) (ebx+4)

  6、pushl %eax         //subl $4,  %esp

                  //movl %eax, (%esp)

  7、popl %eax          //movl (%esp), %eax

                    //addl $4,  %esp

  8、ret             //popl %eip

  

  一、建立一个C程序并将其转为汇编文件

    1、打开Linux虚拟机,使用vi main.c命令在编辑器中编辑代码如下:

    

    2、在Linux虚拟机中将其转换成汇编文件,并命名为main.s

    

   3、整理得到main.s汇编代码

    

  二、分析汇编代码中栈的变化情况

  

  三、总结

    计算机的基本原理是存储程序和程序控制。预先要把指挥计算机如何进行操作的指令序列(称为程序)和原始数据通过输入设备输送到计算机内存贮器中。每一条指令中明确规定了计算机从哪个地址取数,进行什么操作,然后送到什么地址去等步骤。 计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从存储器中取出数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去。接下来,再取出第二条指令,在控制器的指挥下完成规定操作。依此进行下去。直至遇到停止指令。 程序与数据一样存贮,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的操作是计算机最基本的工作原理。这一原理最初是由美籍匈牙利数学家冯.诺依曼于1945年提出来的,故称为冯.诺依曼原理。(来自百度百科)

  

  

时间: 2024-10-29 19:06:28

浅谈计算机程序的工作过程的相关文章

浅谈软件销售工作

自技术领域转做销售有几年了.由于长期耕耘在技术领域,对于销售的角色进入有点晚,只是近期几年也逐渐的摸出些门道,而且按照这些门道来指导团队的实践,确实可以看到比較可喜的进步,在此总结一下.跟大家一起分享一下. 销售分为例如以下三种类型:1. 技术型销售.典型特征是逢人必谈技术,对于技术的内因外果非常清楚,当跟客户沟通时特别在技术沟通时,能说会道,涛涛不绝.但一到关系项目譬如玩.喝酒.K歌等表现平平.2. 关系型销售.典型特征是碰到人必称"哥"."老师"."领

TODO:浅谈pm2基本工作原理

要谈Node.js pm2的工作原理,需要先来了解撒旦(Satan)和上帝(God)的关系. 撒旦(Satan),主要指<圣经>中的堕天使(也称堕天使撒旦),他是反叛上帝耶和华的堕天使(Fallen Angels),曾经是上帝座前的天使,后来他因骄傲自大妄想与神同等而堕落成为魔鬼,被看作与上帝的力量相对的邪恶.黑暗之源. 简单的说Satan是破坏神,就是进程的异常退出.kill等:God是守护神,保护进程.重启进程等. 一图胜千言,pm2的 RPC基本框架.Client与Daemon是采用了R

浅谈-LINUX 操作系统启动过程

LINUX 操作系统启动过程 通过一段时间的学习已经对linux有了一定的了解,接下来就开始研究一下linux 操作系统的启动过程吧.当然这是为了让大家比较容易发现linux启动过程中容易发生问题的地方以及解决办法. 目录 一.简述 二.详解 1.BIOS加电自检 2.读取MBR 三.加载内核 1.Grub引导分为三个阶段 2.Stage1.5阶段存在的原因 3.详解三阶段引导过程 四.调用init进程 1.init的功能作用 2.init初始化流程 3.init 执行 run-level 的各

浅谈 JavaScript new 执行过程及function原理

前言 最近在学习JavaScript语言精粹,感觉写得相当不错.所以这里也算是总结一下.一个方法使用new的方式创建到底是怎样的过程,一个function的声明内部又是怎样执行的呢 另外学的过程中,不断参照ECMAScript的API,也能理解不少东西.ECMAScript Api:下载地址 W3C参考地址:http://www.w3school.com.cn/js/pro_js_functions.asp 正文 1.首先,看个例子,看下面例子的输出. 结果通过new运算符执行结果与直接执行函数

[转自SA]浅谈nginx的工作原理和使用

nginx apache 简单对比 nginx 相对 apache 的优点: 轻量级,同样起web 服务,比apache 占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的,而 apache 则是阻塞型的,在高并发下 nginx 能保持低资源低消耗高性能 高度模块化的设计,编写模块相对简单 社区活跃 配置简洁 apache 相对nginx 的优点: rewrite ,比 nginx 的 rewrite 强大 模块超多 少 bug ,nginx 的 bug 相对较多 超稳定 配置复杂

浅谈AngularJS启动引导过程

我们都知道AngularJS默认会执行app.js来启动整个angular项目,但你知道angular具体执行过程吗? 一.自动引导启动框架 例如我们有如下代码,我们想要完成一个指令功能: <html ng-app> <head> <script src="angular.min.js"></script> </head> <body> <div my-directive></div> &l

Flask解读 --- 浅谈Flask基本工作流程_1

网站写了蛮长时间了,一直想具体分析分析Flask的运行机制,但是源码看得断断续续,不过最近状态不错,进度上来了点,这里先新建一个类别,专门来说说Flask和源码有关系的内容, 这篇准备粗略说一下应用Flask框架的时候,从HTTP请求开始到响应的流程 前置技能   ---   WSGI 在具体读源码之前,这里先需要说一个概念,什么是WSGI. WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,

浅谈JSONP 的工作原理

小编最近在工作中经常用到 jsonp 这个东西, 表示之前从来没用过  最近稍微研究了下 当然很多内容来源于网上 收集整理 你懂的 ~~~ 话说我们访问一个页面的时候 需要像另一个网站获取部分信息, 这就是所谓的跨域请求才能完成的功能, 现实生活中有很多 比如引入外部js, img 等等, 说到发送请求, 在web2.0的时代 我们避免不了 ajax 请求了, 当然我们在 工作中用到 ajax 跨域请求 是必须遇到的,当然ajax 是不支持跨域请求的 说到这里我比较汗颜啊, 当然天无绝人之路,有

浅谈HTTP请求响应过程

我是一个服务器,名字是www.lingyv.cn,门牌号是121.42.155.28,每天得工作就是跟各种浏览器打交道.他们总来我这要求取信息.存信息.删信息.可惜我才疏学浅,只稍微学过HTTP协议,所以看得懂用HTTP规定格式发过来的请求信,当然,回复他的时候也是用HTTP规范写回信. 我家有一个看门的人(服务器进程),每当有浏览器想找我时,他就会过来通知我. 这不,说着说着他就进来了. “报~~~有浏览器找您.” “好,跟他连线.” OK,TCP连接已建立…… 哒哒哒………打印机将请求报文打