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

作者:刘浩晨

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

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

(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

Linux第一周学习总结——计算机是如何工作的的更多相关文章

  1. 20135337朱荟潼 Linux第一周学习总结——计算机是如何工作的

    朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC-1000029000 1.冯诺依曼体系结 ...

  2. LINUX内核分析第一周学习总结——计算机是如何工作的

    LINUX内核分析第一周学习总结——计算机是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/ ...

  3. 《Linux内核分析》第一周学习小结 计算机是如何工作的?

    <Linux内核分析>第一周.计算机是如何工作的? 20135204 郝智宇  一.存储程序计算机工作模型 1.      冯诺依曼体系结构: 数字计算机的数制采用二进制:计算机应该按照程 ...

  4. Linux第二周学习总结——操作系统是如何工作的

    第二周学习总结--操作系统是如何工作的 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/course/UST ...

  5. 20135337朱荟潼 Linux第二周学习总结——操作系统是如何工作的

    一.计算机是如何工作的--总结 三个法宝 存储程序计算机.函数调用堆栈.中断机制 二.堆栈 1.是c语言程序运行时必须的一个记录调用路径和参数的空间. 函数调用框架.传递参数.保存返回地址.提供局部变 ...

  6. Linux内核设计第一周学习总结 计算机如何工作

    北京电子科技学院 20135310陈巧然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002 ...

  7. 《Linux内核分析》第一周学习笔记

    <Linux内核分析>第一周学习笔记 计算机是如何工作的 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/c ...

  8. Linux内核分析第一周学习博客 --- 通过反汇编方式学习计算机工作过程

    Linux内核分析第一周学习博客 通过反汇编方式学习计算机工作过程 总结: 通过这次对一个简单C程序的反汇编学习,我了解到计算机在实际工作工程中要涉及大量的跳转指针操作.计算机通常是顺序执行一条一条的 ...

  9. linux内核分析第一周学习笔记

    linux内核分析第一周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

随机推荐

  1. BZOJ2580:[USACO]Video Game(AC自动机,DP)

    Description Bessie is playing a video game! In the game, the three letters 'A', 'B', and 'C' are the ...

  2. 2879: [Noi2012]美食节

    Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽 ...

  3. STlinkSWD模式连线方式

    若使用SWD模式,则只需要连接4根线,7,9,20,1即SWDIO,SWDCLK,GND,VCC.VCC为3.3V

  4. leetcode242—Valid Anagram

    Given two strings s and t , write a function to determine if t is an anagram of s. Example 1: Input: ...

  5. Git同时使用不同平台代码仓库

    问题描述 公司项目使用代码仓库为gitinn/gitlab等,个人项目使用github进行托管,而公司项目和个人项目设置的邮箱和用户名是不同的,而ssh的密钥对又是基于这两个信息生成的,所以此时想要同 ...

  6. Arduino入门笔记(3):单LED闪烁

    转载请注明:@小五义http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 在搭建好arduino开发环境(http://www.cnblogs.com/xi ...

  7. SystemView SEGGER FreeRTOS 移植和使用

    /* 官方帮助英文翻译文档参考:https://blog.csdn.net/bjr2016/article/category/7275877. */ /* 移植文档参考:https://blog.cs ...

  8. Python+Selenium爬取动态加载页面(2)

    注: 上一篇<Python+Selenium爬取动态加载页面(1)>讲了基本地如何获取动态页面的数据,这里再讲一个稍微复杂一点的数据获取全国水雨情网.数据的获取过程跟人手动获取过程类似,所 ...

  9. Luogu P1196 [NOI2002]银河英雄传说

    一年没写博客了(滑稽). 这道题很玄学,导致自己都有一个坑人的问题求解.如果有大佬有能力求帮助:https://www.luogu.org/discuss/show?postid=30231 再来讲一 ...

  10. 汇编 MOV -2

    知识点:  MOV指令  基址  内联汇编  把OD附加到资源管理器右键菜单 一.MOV指令 aaa=0x889977;//MOV DWORD PTR DS:[0x403018],0x8899 ...