第一周:计算机是如何工作的

姓名:王玮怡  学号:20135116

第一节 存储程序计算机工作模型(冯诺依曼体系结构)

IP指向的内存地址,取指令执行,完成后,IP值自加一,取下一条指令再执行。

API:程序员与计算机的借口界面。

ABI:二进制(指令编码)接口。

第二节 X86汇编基础

一、X86 CPU 32位寄存器

 CPU在实际取指令时根据cs:eip来定位一个指令。

二、常见的汇编指令

mov及几种内存寻址方式:

1、寄存器模式,以%开头的寄存器标示符,将前一个寄存器里的内容放到后一个寄存器中(不涉及内存)。

2、立即数寻址:以$开头的数值为立即数,将前一个数放到后面的寄存器中(不涉及内存)。

3、直接寻址:直接访问一个指定的内存地址的数据,前一个代表内存地址,将该地址所指向的内存数据存档到后一个寄存器中。将前一个十六进制数强制转换成int指针,取该指针所指地址里的值存放到edx寄存器。

4、间接寻址:前一个括号里表示一个内存地址,即将第一个括号里所表示的内存地址所指向的数据存放到后一个寄存器里。%ebx代表ebx寄存器所存的值为地址,加括号为这个内存地址存放的值放到edx寄存器中。

Linux内核使用的是AT&T汇编格式。

三、其他基本指令(push、pop、call、ret)

ebp指向栈底;esp指向栈顶

add向上加;sub向下减

call函数调用,调用后面地址所指数据

eip寄存器不能被直接修改,只能通过特殊指令间接修改,如call、ret (*)。

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

一、

二、

第四节 通过汇编一个简单的C程序,分析汇编代码理解计算机

一、实验要求:

使用 gcc -S -o main.s main.c -m32 编译成汇编代码,C语言代码如下:

int g(int x)

{

  return x + 5;

}

int f(int x)

{

  return g(x);

}

int main(void)

{

  return f(6) + 2;

}

二、实验过程

1、命令行中先输入如下命令:

2、将已有的C代码复制到剪贴板中:

3、继续在命令行中输入:vi main.c;

4、进入新界面后,将C代码复制进去;

5、退出到之前的命令行后,输入ls保存代码;

6、输入gcc main.c编译这个代码,生成一个目标文件a.out;若要编译成一个汇编代码,则输入代码:gcc -S -o main.s main.c -m32 其中,以.s作为汇编文件的扩展名,生成32位的汇编程序;

7、输入vi main.s,查看汇编代码;

8、删除所有以点开头的内容,剩下的就是纯汇编代码:

三、分析代码

四、遇到的问题

第一次实验在将C程序编译成汇编程序时,漏加了 -m32,导致汇编程序中出现popq等情况。

五、实验体会

这次实验是我第一次在Linux系统中进行操作。由于之前没有相关的知识铺垫,外加编程方面基础也不太扎实,所以这次实验对我来说难度不小。前面那些理论的内容看了一遍之后开始发蒙,有些概念也比较容易混淆。到了后面看视频分析进栈出栈的过程时,听着就是晕晕乎乎好像有点明白了,但是到自己分析的时候又彻底乱了,所以画过程分析图也是费了很多时间。但是,通过这次实验,对于以后使用的实验环境还是有了一定的了解,也巩固了堆栈方面的相关知识,相信对以后的学习会有所帮助。

《Linux内核分析》第一周学习报告的更多相关文章

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

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

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

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

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

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

  4. 20135320赵瀚青LINUX内核分析第一周学习笔记

    赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.概述 第一周的学习内容主 ...

  5. Linux内核分析——第一周学习笔记20135308

    第一周 计算机是如何工作的 第一节 存储程序计算机工作模型 1.冯·诺依曼结构模型:冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构.程序指令存储地址和数据存储 ...

  6. Linux内核分析第一周学习总结:计算机是如何工作的?

    韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.冯诺依曼体系 ...

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

    20135313吴子怡.北京电子科技学院 chapter 1 知识点梳理 第一节 存储程序计算机工作模型 1.冯诺依曼体系结构:即具有存储程序的计算机体系结构.目前大多数拥有计算和存储功能的设备(智能 ...

  8. LINUX内核分析第二周学习总结——操作系统是如何工作的

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

  9. Linux内核分析第二周学习笔记

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

  10. Linux内核分析第二周学习博客——完成一个简单的时间片轮转多道程序内核代码

    Linux内核分析第二周学习博客 本周,通过实现一个简单的操作系统内核,我大致了解了操作系统运行的过程. 实验主要步骤如下: 代码分析: void my_process(void) { int i = ...

随机推荐

  1. [BeiJing2006]狼抓兔子

    题面 一眼看就是最小割板子题,建图也很直观,注意每一条边建双向边其实不用建4条边,只要反向边的容量和正边相同就行.然后直接跑最大流板子就行.不过此题拿vector存图会MLE……而拿链前存图就能卡过去 ...

  2. scrapy的request的meta参数是什么意思?

    作者:乌尔班链接:https://www.zhihu.com/question/54773510/answer/146971644来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  3. UART串口通信

    #include "sys.h" #include "delay.h" #include "usart.h" u8 rdata[]; UAR ...

  4. JS重构分页

    JS重构分页 很早以前写过一个Jquery分页组件,但是当时写的组件有个缺点,当时的JS插件是这样设计的:比如:点击  -->  查询按钮 ---> 发ajax请求 返回总页数和所有数据, ...

  5. Python2.7-robotparser

    robotparser 模块,用于解析网站的 robots.txt 文件,robots.txt 文件是用于指定搜索引擎爬虫的访问权限的,此模块在 python3 中重命名为 urllib.robotp ...

  6. Python2.7-filecmp

    filecmp 模块,定义了比较文件或目录的函数,比较文件只会有 True 和 False 两种结果,比较目录会返回目录下相同的文件,不同的文件,出错的文件.比较文件也可以用 difflib 模块,d ...

  7. JAVA框架 Spring 注解注入

    一.首先需要引入jar包:spring-aop-4.2.4.RELEASE.jar.(在spring解压包libs内). 二.如果注解方式注入依赖的对象,需要引用新的约束. 内的:xsd-config ...

  8. 关于YARN Node Labels的一点理解

    最近在做实验,实验需要进行分区域计算,网上查了资料后发现Yarn Node Labels + Capacity-Scheduler可以实现我的需求 但是当任务提交到capacity-scheduler ...

  9. Java中 Vector的使用详解

    Vector 可实现自动增长的对象数组. java.util.vector提供了向量类(Vector)以实现类似动态数组的功能. 创建了一个向量类的对象后,可以往其中随意插入不同类的对象,即不需顾及类 ...

  10. POJ 2932 Coneology计算最外层圆个数

    平面上有n个两两没有公共点的圆,i号圆的圆心在(xi,yi),半径为ri,编号从1开始.求所有最外层的,即不包含于其他圆内部的圆.输出符合要求的圆的个数和编号.n<=40000. (注意此题无相 ...