Linux内核及分析 第一周 计算机是如何工作的?





C语言代码:
int g(int x)
{
return x + 5;
}
int f(int x)
{
return g(x);
}
int main(void)
{
return f(5) + 1;
}
反汇编代码:
g:
pushl %ebp 将ebp的值压栈,同时esp向下移动4个字节
movl %esp, %ebp ebp也指向esp指的位置
movl 8(%ebp), %eax 将ebp变址寻址8即向上移动8个字节,栈中的内容为 8,将8赋值给eax
addl $5, %eax eax = 8+3 = 11
popl %ebp ebp指向栈中值指向的位置,同时esp向上移动4个字节
ret esp向上移动4个字节,同时eip指向栈中值的位置
f:
pushl %ebp 将ebp的值压栈,同时esp向下移动4个字节
movl %esp, %ebp ebp也指向esp指的位置
subl $4, %esp esp向下移动4个字节
movl 8(%ebp), %eax 将ebp变址寻址8即向上移动8个字节,栈中的内容为 8,将8赋值给eax
movl %eax, (%esp) 将8放入esp指向的位置
call g 将eip的值(call指令的下一条)压入esp指向的位置,同时esp向下移动4个字节,eip指向g
leave ebp指向esp指向的位置,ebp指向栈中值的位置,esp向上移动4个字节
ret esp向上移动4个字节,同时eip指向栈中值的位置
main:
pushl %ebp 将ebp的值(0)压栈,同时esp向下移动4个字节
movl %esp, %ebp ebp也指向esp指的位置
subl $4, %esp esp向下移动4个字节
movl $5, (%esp) 将5放入esp指向的位置
call f 将eip的值压入esp指向的位置,同时esp向下移动4个字节,eip指向f
addl $1, %eax eax = 11 + 1 = 12
leave ebp指向esp指向的位置,ebp指向栈中值的位置,esp向上移动4个字节
ret main函数之前的eip的值(由操作系统定)
总结:计算的工作中将寄存器的地址和寄存器中的值压入堆栈中,通过寄存器指针变化和操作对数值进行操作计算,从而得到结果。
作者: 王雪铖
原创作品转载请注明出处
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
Linux内核及分析 第一周 计算机是如何工作的?的更多相关文章
- Linux内核分析第一周——计算机是如何工作的
冯诺依曼体系结构 核心思想 1.冯诺依曼是:数字计算机的数制采用二进制:计算机应该按照程序顺序执行. 2.采用二进制作为计算机数值计算的基础,以0.1代表数值.不采用人类常用的十进制计数方法,二进制使 ...
- linux内核分析 第一周 计算机是如何工作的 20125221银雪纯
我使用的c语言代码是: int g(int x) { return x + 1; } int f(int x) { return g(x); } int main(void) { return f(6 ...
- Linux内核及分析 第二周 操作系统是如何工作的?
计算机是如何工作的? 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算机来说并不那么重要,但有了高级语言及函 ...
- Linux内核设计(第一周)——从汇编语言出发理解计算机工作原理
Linux内核设计(第一周)——从汇编语言出发理解计算机工作原理 计算机工作原理 汇编指令 C语言代码汇编分析 by苏正生 原创作品转载请注明出处 <Linux内核分析>MOOC课程htt ...
- 《Linux内核分析》第一周 计算机是如何工作的?
刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK ONE(2. ...
- 《Linux内核分析》第一周——计算机是如何工作的?
杨舒雯 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 课程内容 1.诺曼依体系 ...
- 《linux内核设计分析》 第一周作业
linux 基础入门 课程总结 一.linux系统简介 linux操作系统 整个计算机可以分为 硬件 内核 系统调用 应用程序 操作系统就属于内核和系统调用这两部分 操作系统历史发展 批处理操作系统 ...
- Linux内核分析——第一周学习笔记20135308
第一周 计算机是如何工作的 第一节 存储程序计算机工作模型 1.冯·诺依曼结构模型:冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构.程序指令存储地址和数据存储 ...
- LINUX内核分析第一周学习总结——计算机是如何工作的
LINUX内核分析第一周学习总结——计算机是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/ ...
随机推荐
- Github API
Web API web api是网站的一部分,用于与使用非常具体的URL请求特定信息的程序交互,这种请求被称为API调用.请求的数据将以易于处理的格式(如JSON或CSV)返回:依赖于外部数据源的大多 ...
- 04LaTeX学习系列之---overleafz在线编辑平台的使用
目录 目录 前言 (一)overleaf的认识 1.由来: 2.优点: 3.界面: (二)编译与查看 1.选择编译器 2.编译 (三)基本的设置与操作 1.基本设置 2.基本操作 目录 本系列是有关L ...
- Java读取properties文件工具类并解决控制台中文乱码
1.建立properts文件(error.message.properties) HTTP201= 请求成功并且服务器创建了新的资源 2.在spring-mvc.xml文件(applicationCo ...
- 英语初级学习系列-00-Name-介绍自己
1. 询问名字 常用句子 1. Hi, may I have your name, please? 2. Could you please tell me your name? 3. Will it ...
- [项目实践] python文件路径引用的规则,记一次使用sys.path[0]的问题,及如何区分 ../与 ./的使用场景
下面是一个获取配置的代码 def getValue(self,section,option): """ @file: string,the name of the con ...
- 【CSS3】transition过渡和animation动画
转自:http://blog.csdn.net/XIAOZHUXMEN/article/details/52003135 写在前面的话: 最近写css动画发现把tansition和animation弄 ...
- python五十七课——正则表达式(边界字符)
演示匹配锚字符(边界字符)^:从字符串头部开始匹配,在开启多行模式下(re.M),可以尝试匹配每一行的头部数据$:从字符串尾部开始匹配,在开启多行模式下(re.M),可以尝试匹配每一行的尾部数据A:从 ...
- python五十六课——正则表达式(常用函数之search())
函数:search(regex,string,[flags=0]):参数:和match一样理解功能:从头开始匹配字符串中的数据,如果头不匹配继续往后尝试匹配,直到有第一个匹配成功的子数据,立即返回一个 ...
- MSSQL Server 数据库备份还原常用SQL语句及注意
1.备份数据库 backup database db_name to disk='d:\db_name.bak' with format --通过使用with format可以做到覆盖任何现有的备份和 ...
- (一 ) 天猫精灵接入Home Assistant-服务器搭建
()1登陆阿里云 https://ecs.console.aliyun.com/?spm=5176.2020520001.0.0.6B1Uov#/home 账号dongdongmqtt 密码***** ...