码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-02-26 13:55:18      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

 

 

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

  本文为《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年提出来的,故称为冯.诺依曼原理。(来自百度百科)

 

 

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

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

标签:

原文地址:http://www.cnblogs.com/liuzheng1101/p/5219669.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!