实验一:计算机是怎么工作的

来源:互联网 发布:wireshark 数据帧 编辑:程序博客网 时间:2024/04/30 16:04

1. gcc的编译过程

(1)gcc的编译流程包括:

*预处理 (Pre-Processing) : 编译选项  -E    ,    生成文件后缀 .i

*编译     (Compiling)         : 编译选项 -S    ,  生成文件后缀   .s

*汇编     (Assembling)      : 编译选项  -c     ,   生成文件后缀 .o

*链接     (Linking)

(2)汇编代码分析

c源程序:

int g (int x)

{

      return x + 3;

}

int f (int x)

{

      return g(x);

}

int main ()

{

      return f(8) + 1;

}

对应汇编代码:

g:
       pushl    %ebp
       movl     %esp, %ebp
       movl     8(%ebp),%eax  //通过ebp访问传进来的参数,放入eax
       addl      $3,%eax       //eax3
       popl      %ebp          //恢复原来的栈框架
       ret
       
f:
       pushl    %ebp
       movl     %esp, %ebp
       subl      $4,%esp     //esp下移,预留空间
       movl     8(%ebp),%eax  //通过栈框架指针ebp,将f的参数放入eax
       movl     %eax,(%esp)  //eax的值作为调用函数g的参数
       call g               //调用函数g
      leave               //函数返回前的准备工作
       ret

main:
       pushl    %ebp    //栈框架指针压栈,方便函数返回时,恢复原来的栈框架
       movl     %esp, %ebp   //ebp指向新的栈框架
       subl      $4,%esp     //栈指针esp下移四个字节,为新的数据预留空

  movl      $8,(%esp)  //给函数f穿参数8,放入刚才预留的空间

      callf               //函数调用

      addl      $1, %eax    //eax中保存了调用函数f的返回结果,结果加1

      leave              //函数返回前的准备工作

      ret

 

2. 单任务计算机与多任务计算机的工作方式对比

单任务:内存当中只有一个程序,当这个程序因为请求某些资源而被迫中断时,

       cpu进入空闲状态,即使外存中还有其他的程序也不能运行

多任务:内存中有多个程序存在,当当前程序发生中断时,通过调度程序,可以

        切换到其他准备好的程序上运行,这样提高了cpu的利用率

 

原创粉丝点击