简单C程序生成的汇编代码分析】的更多相关文章

首先给出完整的C代码: int g(int x) { ; } int f(int x) { return g(x); } int main(void) { )+; } 使用命令:gcc –S –o hw001.s hw001.c -m32 对应生成的IA32汇编代码如图所示: 暂不分析以“.”开头的行,得到程序如下: g: pushl %ebp movl %esp ,%ebp movl (%ebp) ,%eax addl $ ,%eax popl %ebp ret f: pushl %ebp m…
几个重要的寄存器 eip - 用于存放当前所执行的指令地址 esp - 栈(顶)指针寄存器 ebp - 基址(栈底)指针寄存器 简单的C程序 int g(int x) { ; } int f(int x) { return g(x); } int main(void) { ) + ; } 汇编代码分析 g: pushl %ebp movl %esp, %ebp :下面两条指令的含义是:将传入的参数7和10相加并保存在寄存器eax中 movl (%ebp), %eax addl $, %eax p…
1.C语言源码 #include <stdio.h> int g(int x){ ; } int f(int x){ return g(x); } int main(){ )+; } 2.生成汇编代码 gcc命令 gcc -S -o main.s main.c -m32 3.汇编代码分析 首先程序从main函数开始运行 pushl %ebp movl %esp,%ebp 这两步是建立自己的堆栈, subl $,%esp movl $,(%esp) 这两步是将数值8放入%esp所指的栈内存中.…
start_kernel之前的汇编代码分析 Boot中执行下面两句话之后,进入uclinux内核. theKernel = (void (*)(int, int, unsigned int))((uint32_t)0x08003001); theKernel(0, 2189, ((uint32_t)0x20000100)); 首先来到0x0800 3000处,此时携带有三个参数,R0.R1.R2,分别是0,2189,0x2000 0100. 0x0800 3000对应着下面stext的汇编代码.…
start_kernel之前的汇编代码分析 Boot中执行下面两句话之后,进入uclinux内核. theKernel = (void (*)(int, int, unsigned int))((uint32_t)0x08003001); theKernel(0, 2189, ((uint32_t)0x20000100)); 首先来到0x0800 3000处,此时携带有三个参数,R0.R1.R2,分别是0,2189,0x2000 0100. 0x0800 3000对应着下面stext的汇编代码.…
署名信息 郭春阳 原创作品转载请注明出处 :<Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 C源码 这里为了防止重复,修改了部分源码 int g(int x) { return x + 99; } int f(int x) { return g(x); } int main(void) { return f(22) + 36; } 运行 gcc -S -o foo.s -m32 foo.c后,生成的汇编代码为…
转载:http://blog.csdn.net/u010093140/article/details/50021897使用STVD建立完汇编工程项目之后(具本建立方法可以看我的另一篇博文http://blog.csdn.net/u010093140/article/details/49983397),可以看到这个目录结构(以STM8S105C6芯片为例)   其中.asm文件是汇编代码的源文件,.inc文件是包含文件,类似于C语言当在的.c文件和.h文件.接下来让我们来分析一下这三个文件.(分析…
  本文使用了rt-thread自带的钩子函数和显示函数进行了实验,从rt-thread自带的延时函数rt_thread_delay()函数入手,对rt-thread系统的调度器进行分析.主要参考资料是野火的rt-thread手册和rt-thread官方文档,汇编部分的指令是参考的cortex-M3权威参考手册,实验版本是rt-thread3.1.5 1.实验准备 1.使用三个线程,内部调用延时函数,每个线程内部延时1s. 2.使用系统自带的钩子函数,在调度器实现调度的时候打印线程状态和名称.…
秦鼎涛  <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验一 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 一.C语言源代码: int g(int x) { return x + 3; } int f(int x) { return g(x); } int main(void) { return f(8) + 1; } 二.实验楼截图: 三.分析汇编代码的工作过程中堆栈的变化: 跟C语言一样…
姓名:吕松鸿 学号:20135229 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ) 一.存储程序计算机 1.1冯诺依曼体系结构:即具有存储程序的计算机体系结构 目前大多数拥有计算和存储功能的设备(智能手机.平板.计算机等)其核心构造均为冯诺依曼体系结构 从硬件来看 CPU与内存通过主线连接,CPU上的IP(可能是16.32.64位)总指向内存的某一块区域:I…