zoukankan      html  css  js  c++  java
  • Linux第一周学习总结——计算机是如何工作的

    第一周学习总结——计算机是如何工作的

    作者:刘浩晨

    一、存储程序计算机工作模型

    冯诺依曼体系结构:核心思想为存储程序计算机。两个层面:

    (1)硬件的角度(计算机主板):一个CPU,一块内存,之间有总线连接。CPU内部有一个IP计算器,IP指向内存中的指令,并依次加一执行;

    (2)另一个层面,程序员的角度:存储程序计算机工作模型(如下图)

    解释:CPU抽象为for循环,总是执行下一条指令,内存保存指令和数据,CPU来解释和执行这些指令。
    

    API:应用程序编程接口(程序员与计算机的接口界面)

    ABI:二进制接口,指令编码(程序员与CPU的接口界面)

    二、X86汇编

    1.X86CPU的寄存器

    (1)通用寄存器

    堆栈基指针和堆栈顶指针较为重要。

    (2)段寄存器:

    其中代码段和堆栈段用的较多。CPU在实际取指令时根据cs:eip来准确定位一个指令。

    (3)标志寄存器

    标志寄存器可以标识当前的一些状态。

    2.计算机的汇编指令

    (1)movl指令:

    • 寄存器寻址,寄存器模式,以%开头的寄存器标示符。不和内存打交道,eax赋值给edx;

    • 立即寻址,把立即数直接放在寄存器,立即数是以$开头的数值;

    • 直接寻址,直接访问一个指定的内存地址的数据;

    • 间接寻址:将寄存器的值作为一个内存地址来访问内存;

    • 变址寻址:在间接寻址之时改变寄存器的数值。

    注意:AT&T汇编格式与Intel汇编格式略有不同,Linux内核使用的是AT&T汇编格式。

    (2)其他指令

    堆栈是向下增长的,有一个基址ebp指向堆栈栈底

    • pushl 压栈,esp减4,把eax放入esp内存位置

    • popl 出栈,从堆栈栈顶取32位放到寄存器eax里面,有两个动作:首先间接寻址,把栈顶数值放到eax里面,再把栈顶加4。

    • call 函数调用,把当前的eip压栈,给eip赋新值;

    注意:*是指这些指令是伪指令,程序员不能直接修改这些,即eip寄存器不能被直接修改,只能通过特殊指令间接修改。

    三、汇编一个简单的C程序分析其汇编指令执行过程

    1.练习:分析一段汇编代码

    2.将C代码编译成汇编代码

    1.函数调用堆栈是由逻辑上多个堆栈叠加起来的

    2.函数的返回值默认使用eax寄存器存储返回给上一级函数

    3.使用命令编译成汇编代码:gcc –S –o main.s main.c -m32

    堆栈变化:

    四、实验内容——反汇编一个简单的C程序

    简单C程序:

    汇编代码:

    分析汇编代码的工作过程中堆栈的变化:

    首先开始入栈,从main函数开始,按照下图画出流程进行执行:

    此时eax=8+8=16。下一条指令popl %ebp开始出栈:

    五、学习总结体会

    由于上学期进行过初步的Linux学习,所以这周内容并不困难。老师讲了一些基本的概念,然后通过一个完整的简单C程序的汇编代码实例讲解,让我们更加清楚计算机中指令执行时堆栈的变化,这也有助于我们理解计算机到底是如何工作的。我觉得计算机是非常精细的,但通过这周课程的学习,简单来说在它工作过程中,按照冯诺依曼原理的话就是存储和程序。指令序列就为程序,这些指令和数据等预先存储在内存中,工作时,CPU从内存中取出指令,从存储器中取出数据进行指定的运算和逻辑操作等加工,再按地址把结果送到内存中去。再取出下一条指令完成相应操作,直至完成停止。现在我还只能理解一些小的简单的程序,对于更加复杂更加实用的东西还需要进一步学习。老师讲解的方式和内容都很好,我相信这应该会是一次很棒的学习体验过程。

    参考资料:

    《Linux内核分析》MOOC课程 http://mooc.study.163.com/course/USTC-1000029000

    《深入理解计算机系统》

    实验楼https://www.shiyanlou.com/courses/running/555

  • 相关阅读:
    面试官:反射都不会,还敢说自己会Java?
    nginx 开启x-forward
    不写代码,从0到1教你制作炫酷可视化大屏
    5G 专网部署方案
    Mac运行pygame一直显示空白屏幕
    数据库大咖解读“新基建”,墨天轮四重好礼相送!
    Oracle 20c 新特性:自动的区域图
    4000多人全靠报表自动化,效率提高60%,这套数据平台方法论真强
    EBS开发性能优化之查找需要优化的程序
    EBS开发性能优化之SQL语句优化
  • 原文地址:https://www.cnblogs.com/lhc-java/p/5217595.html
Copyright © 2011-2022 走看看