zoukankan      html  css  js  c++  java
  • 《Linux内核分析》第一周——计算机是如何工作的?

    杨舒雯 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

    课程内容

    1.诺曼依体系结构

    诺曼依体系结构等于程序存储计算机

    2.x86汇编基础

    x86寄存器

    通用寄存器

    段寄存器

    常用汇编指令

    作业部分

    实验内容

    实验部分(以下命令为实验楼64位Linux虚拟机环境下适用,32位Linux环境可能会稍有不同)
    使用
    gcc –S –o main.s main.c -m32
    命令编译成汇编代码,如下代码中的数字请自行修改以防与他人雷同
    int shu(int x)
    {
    return x + 1;
    }

    int wen(int x)
    {
      return shu(x);
    }
    
    int main(void)
    {
      return f(5) + 4;
    }
    

    出栈入栈图解:

    main函数:

    18:将ebp的值=100压栈,ebp->100,esp->96
    19:将esp的值赋给ebp,ebp->96,esp->96
    20:esp值减4,ebp->96,esp->92
    21:将7赋给esp当前所指位置
    22:保存当前eip的值(23行),将函数wen的第一条指令地址(9行)赋给eip,ebp->96,esp->88

    wen函数:

    9: 将当前ebp的值压栈,ebp->96,esp->88
    10:将esp的值赋给ebp,ebp->88,esp->88
    11:将esp的值减4,ebp->88,esp->84
    12:将ebp+8后地址内所指数据(5)赋给eax,eax=5
    13:将eax=5赋给esp当前所指位置
    14:保存当前eip的值(15行),将函数shu第一条指令的地址(2行)赋给eip,esp减4,ebp->84,esp->76

    shu函数:

    2:将ebp的值压栈,ebp->84,esp->76
    3:将esp的值赋给ebp,ebp->72,esp->72
    4:将ebp+8后地址内所指数据(5)赋给eax,eax=5
    5:eax+1=5+1=6
    6:数据出栈,将当前esp所指地址内的数据赋给ebp,esp加4,ebp->84,esp->76
    7:返回第15行指令,ebp->84,esp->88

    wen函数:

    15:将ebp的值赋给esp,ebp->84,esp->84,数据出栈,ebp->96,esp->88
    16:数据出栈,返回第23行指令,ebp->96,esp->92

    main函数:

    23:eax+1=6+1=7
    24:将ebp的值赋给esp,ebp->96,esp->96,数据出栈,ebp->100,esp->100

    总结

    通过对诺曼依体系结构的了解,加深了对计算机工作过程了理解,并且在实验中对代码的分析,x86汇编指令的了解也更加深入。
    在我的理解中:

    • 计算机系统由硬件系统和软件系统两大部分组成。
    • 使用低级机器语言,指令通过操作码来完成简单的操作
    • 执行程序时须先将要执行的相关程序和数据放入内存储器中
    • 在执行程序时CPU,将当前正在执行的程序的相关指令的数据都暂时保存在堆栈中以便于取用和计算,从内存中取出指令并执行指令,直到程序结束指令时才停止执行。
    • 将计算的结果放入指令指定的存储器地址中。
  • 相关阅读:
    MPS和MRP之间有什么样的关系呢
    java中静态代码块详解
    SQL server 分组后每组取出任意一行
    人是否能成功,其实可能很早就能看出来
    国内外产品经理的区别
    Yarn 和 NPM 国内快速镜像(淘宝镜像)
    vue-cli 使用less 遇到的问题 || vue-cli 使用less
    布隆过滤器
    PHP性能优化
    Redis-高并发代言词,为什么做分布式要Redis?
  • 原文地址:https://www.cnblogs.com/yswysw/p/5210942.html
Copyright © 2011-2022 走看看