从C到汇编:栈是计算机工作的基础
int a(int x)
{
return x + ;
} int b(int x)
{
return a(x);
} int main(void)
{
return b() - ;
}
gcc -S -o main.s main.c -m32
命令生成汇编代码。结果如下图。后面加-m32是为了让其按照32位的方式反汇编。

我们只需要看汇编代码的关键部分,可以把点开头的语句全部删去,得到如下的汇编指令。
 a:
     pushl    %ebp
     movl    %esp, %ebp
     movl    (%ebp), %eax
     addl    $, %eax
     popl    %ebp
     ret
 b:
     pushl    %ebp
     movl    %esp, %ebp
     subl    $, %esp
     movl    (%ebp), %eax
     movl    %eax, (%esp)
     call    a
     leave
     ret
 main:
     pushl    %ebp
     movl    %esp, %ebp
     subl    $, %esp
     movl    $, (%esp)
     call    b
     subl    $, %eax
     leave
     ret

从C到汇编:栈是计算机工作的基础的更多相关文章
- linux内核分析作业:以一简单C程序为例,分析汇编代码理解计算机如何工作
		
一.实验 使用gcc –S –o main.s main.c -m32 命令编译成汇编代码,如下代码中的数字请自行修改以防与他人雷同 int g(int x) { return x + 3; } in ...
 - 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
		
秦鼎涛 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验一 通过汇编一个简单的C程序,分析汇编代码 ...
 - 从C简单程序的汇编代码入手,以理解计算机工作原理。
		
贺邦 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000#/info 知识准备 ...
 - 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
		
实验一:通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 学号:20135114 姓名:王朝宪 注: 原创作品转载请注明出处 <Linux内核分析>MOOC课程http: ...
 - Linux内核设计(第一周)——从汇编语言出发理解计算机工作原理
		
Linux内核设计(第一周)——从汇编语言出发理解计算机工作原理 计算机工作原理 汇编指令 C语言代码汇编分析 by苏正生 原创作品转载请注明出处 <Linux内核分析>MOOC课程htt ...
 - Linux内核设计第一周  ——从汇编语言出发理解计算机工作原理
		
Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理 作者:宋宸宁(20135315) 一.实验过程 图1 编写songchenning5315.c文件 图2 将c文件汇编成32位机器语言 ...
 - Linux内核分析第一周学习博客     ---     通过反汇编方式学习计算机工作过程
		
Linux内核分析第一周学习博客 通过反汇编方式学习计算机工作过程 总结: 通过这次对一个简单C程序的反汇编学习,我了解到计算机在实际工作工程中要涉及大量的跳转指针操作.计算机通常是顺序执行一条一条的 ...
 - Linux操作系统工作的基础
		
简介: 本文根据 Linux™ 系统工作基础的分析,对存储程序计算机.堆栈(函数调用堆栈)机制和中断机制进行概述.文中将为您提供操作系统(内核)如何工作的细节,进一步从宏观概述结合关键点进行微观(CS ...
 - 浅析Linux操作系统工作的基础
		
环境:lubuntu 13.04 kernel 3.9.7 作者:SA12226265 katao 简介: 本文根据 Linux™ 系统工作基础的分析,对存储程序计算机.堆栈(函数调用堆栈)机制和 ...
 
随机推荐
- js操作Cookie,实现历史浏览记录
			
/** * history_teacher.jsp中的js,最近浏览名师 * @version: 1.0 * @author: mingming */ $(function(){ getHistory ...
 - bzoj3637: Query on a tree VI
			
Description You are given a tree (an acyclic undirected connected graph) with n nodes. The tree node ...
 - 【Java】Java垃圾回收机制
			
Java垃圾回收机制 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联系起来.在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给 ...
 - ASP.NET页面不被缓存
			
设置ASP.NET页面不被缓存分类:ASP.NET (3531) (1) /// <summary> /// 设置页面不被缓存 /// </summa ...
 - java学习面向对象值static
			
讲完了this这个关键字,我们继续前进,这节我们讲另外一个比较重要的东东,java当中的static,在main函数前面这个家伙都在那里一直挺着,你瞅见了么,你就不好奇么,你就不想知道他杵在那里做什么 ...
 - C++中的 new / delete
			
new的3种形态: new operator , operator new , placement new 1.new operator: new操作符,像 + - * / && . ...
 - open和fopen的区别(转)
			
转载自:http://www.cnblogs.com/joeblackzqq/archive/2011/04/11/2013010.html open和fopen的区别: 1.缓冲文件系统缓 冲文件系 ...
 - 快速傅里叶变换(FFT):COGS 2216. 你猜是不是KMP
			
2216. 你猜是不是KMP ★★★☆ 输入文件:guess.in 输出文件:guess.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] XX在玩两个串的游戏. ...
 - 【模拟】Codeforces 710C Magic Odd Square
			
题目链接: http://codeforces.com/problemset/problem/710/C 题目大意: 构造一个N*N的幻方.任意可行解. 幻方就是每一行,每一列,两条对角线的和都相等. ...
 - 【最小生成树】Codeforces 707B Bakery
			
题目链接: http://codeforces.com/problemset/problem/707/B 题目大意: 给你N个点M条无向边,其中有K个面粉站,现在一个人要在不是面粉站的点上开店,问到面 ...