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
Linux第一周学习总结——计算机是如何工作的的更多相关文章
- 20135337朱荟潼 Linux第一周学习总结——计算机是如何工作的
朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC-1000029000 1.冯诺依曼体系结 ...
- LINUX内核分析第一周学习总结——计算机是如何工作的
LINUX内核分析第一周学习总结——计算机是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/ ...
- 《Linux内核分析》第一周学习小结 计算机是如何工作的?
<Linux内核分析>第一周.计算机是如何工作的? 20135204 郝智宇 一.存储程序计算机工作模型 1. 冯诺依曼体系结构: 数字计算机的数制采用二进制:计算机应该按照程 ...
- Linux第二周学习总结——操作系统是如何工作的
第二周学习总结--操作系统是如何工作的 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/course/UST ...
- 20135337朱荟潼 Linux第二周学习总结——操作系统是如何工作的
一.计算机是如何工作的--总结 三个法宝 存储程序计算机.函数调用堆栈.中断机制 二.堆栈 1.是c语言程序运行时必须的一个记录调用路径和参数的空间. 函数调用框架.传递参数.保存返回地址.提供局部变 ...
- Linux内核设计第一周学习总结 计算机如何工作
北京电子科技学院 20135310陈巧然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002 ...
- 《Linux内核分析》第一周学习笔记
<Linux内核分析>第一周学习笔记 计算机是如何工作的 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/c ...
- Linux内核分析第一周学习博客 --- 通过反汇编方式学习计算机工作过程
Linux内核分析第一周学习博客 通过反汇编方式学习计算机工作过程 总结: 通过这次对一个简单C程序的反汇编学习,我了解到计算机在实际工作工程中要涉及大量的跳转指针操作.计算机通常是顺序执行一条一条的 ...
- linux内核分析第一周学习笔记
linux内核分析第一周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
随机推荐
- window与Linux之间的文件传输
使用工具:WinSCP WinSCP可以直接通过SSH链接你的linux服务器:然后进行文件的复制操作:并且可以直接编辑文件. 1.下载WinSCP 2.登录WinSCP,输入你的Linux 的IP地 ...
- JMX RMI 攻击利用
攻击者通过构造恶意的MBean,调用 getMBeansFromURL 从远程服务器获取 MBean,通过MLet标签提供恶意的MBean对象下载. 前提条件: 允许远程访问,没有开启认证 (com. ...
- Odoo作为App后端时如何调试App
转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9307340.html 一:Odoo可以作为app后台+后台管理系统使用 Odoo作为一个可供二次开发的框架, ...
- C++的技术探究
C++深究 函数指针 double pam(int, double); // prototype double (*pf)(int, double); // declare function poin ...
- Docker技术入门与实战 第二版-学习笔记-9-Docker Compose 项目-2-Compose 命令说明
Compose 命令说明 1)命令对象与格式 对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中 的服务或者容器.如果没有特别的说明,命令对象将是项目,这意味着项目中所有 ...
- lnmp服务器配置HTTPS
server { server_name ktsf.weiyou18.com; #listen 80; listen 443; ssl on; ssl_certificate /usr/local/n ...
- Python2.7-hashlib
hashlib模块,实现了支持多种不同哈希算法的接口,不同 hash 算法的构造函数就是算法名,返回的哈希对象都具有相同接口.哈希算法不是加密算法,所以下面提到的加密不是真的加密,因为真的加密需要能够 ...
- monitorix(linux)系统和网络监控公工具
一.monitorix Monitorix是一款功能非常强大的免费开源轻型工具,目的在于监测Linux中的系统和网络资源.它可以定期收集系统和网络数据,并使用自己的Web界面,通过图形显示相关信息.M ...
- (二)Lua脚本语言入门(关于函数)
上一篇文章忘了插入代码了,方便粘贴复制...... 函数 对于c语言就是 void aa()//c语言是用void { print("这是一个函数") } Lua就变成了 func ...
- day59
轮播图作业 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF ...