arm-elf-gcc汇编代码个人理解
arm-elf-gcc汇编代码个人理解
有关arm-elf-gcc的安装使用问题请参照本人博客的另一篇文章http://www.cnblogs.com/wsine/p/4664503.html
由于各种对齐问题,cnblogs的格式难以控制,故贴图片,谅解。




分析:第三份代码Clear3.c的效率是最快的。在Clear1中,要获得array[i]这个变量的值,就需要多花几部去计算从&array[0]开始,偏移i位之后的地址,然后才能得到array[i]这个地址,效率慢。在Clear2中,用了指针,修复了取地址的这个问题,但是也产生了另一个问题,&array[size]的获得也是类似与Clear1中的array[i]的获得,也是需要每次都计算偏移量,才能比较,效率慢。而在Clear3中,也是用了指针,虽然多使用了一个栈的空间,但是用了保存了&array[size]这个变量,因此只需要计算一次就可以,每次需要比较的时候再从栈中读取,不用每次计算,大大节省的重复运算的消耗。综上所述,Clear3.c的效率是最快的。
刚开头的栈指针和帧指针尤其不懂编译器为何要这样做。通过搜索,我发现了答案。

注:图片来自51CTO.com
这个是我对栈指针和帧指针的最大的理解。两者虽然指向同一片区域,但是一个是栈的起始位置,一个栈顶,不一样的,访问的时候通过fp指针的偏移量来访问。
arm-elf-gcc汇编代码个人理解的更多相关文章
- ARM汇编初探---汇编代码中都有哪几类指令---ARM伪指令介绍
要学习一个东西首先要把概念搞清楚,以下仅仅是自己的一些关于汇编的理解. 可运行文件里的01码是机器码,机器码不等于汇编码,尽管机器码能够非常easy翻译成汇编码. 汇编码中包括非常多汇编指令.伪指令和 ...
- 【嵌入式开发】裸机引导操作系统和ARM 内存操作 ( DRAM SRAM 类型 简介 | Logical Bank | 内存地址空间介绍 | 内存芯片连接方式 | 内存初始化 | 汇编代码示例 )
[嵌入式开发]ARM 内存操作 ( DRAM SRAM 类型 简介 | Logical Bank | 内存地址空间介绍 | 内存芯片连接方式 | 内存初始化 | 汇编代码示例 ) 一. 内存 ...
- linux内核分析作业:以一简单C程序为例,分析汇编代码理解计算机如何工作
一.实验 使用gcc –S –o main.s main.c -m32 命令编译成汇编代码,如下代码中的数字请自行修改以防与他人雷同 int g(int x) { return x + 3; } in ...
- GCC 嵌入汇编代码
The format of basic inline assembly is very much straight forward. Its basic form is 基本汇编嵌入格式如下: asm ...
- 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
实验一:通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 学号:20135114 姓名:王朝宪 注: 原创作品转载请注明出处 <Linux内核分析>MOOC课程http: ...
- 如何在C或C++代码中嵌入ARM汇编代码
转载自:http://blog.csdn.net/roland_sun/article/details/42921131 大家知道,用C或者C++等高级语言编写的程序,会被编译器编译成最终的机器指令. ...
- -fomit-frame-pointer 编译选项在gcc 4.8.2版本中的汇编代码研究
#include void fun(void) { printf("fun"); } int main(int argc, char *argv[]){ fun(); return ...
- GCC生成的汇编代码
假设我们写了一个C代码文件 code.c包含下面代码: int accum = 0; int sum(int x, int y){ int t = x + y; accum += t; return ...
- 理解ATL中的一些汇编代码(通过Thunk技术来调用类成员函数)
我们知道ATL(活动模板库)是一套很小巧高效的COM开发库,它本身的核心文件其实没几个,COM相关的(主要是atlbase.h, atlcom.h),另外还有一个窗口相关的(atlwin.h), 所以 ...
随机推荐
- ax 的错误处理范例
#OCCRetryCount ; try { ttsbegin; //example as insert or update or delete record ttscommit; } catch(E ...
- HiveSQL解析过程详解 | 学步园
HiveSQL解析过程详解 | 学步园 http://www.xuebuyuan.com/2210261.html
- IE CSS HACK
IE 属性值 HACK .test { background:blue; /*所有浏览器*/ background:yellow\9; /*所有IE浏览器*/ background:green\0; ...
- 跨域请求之JSONP 二
续上篇,加两个实用功能 1,增加data属性,请求参数2,增加scope属性,可以让回调函数在指定的上下文中执行 接口如下 1 2 3 4 5 6 Sjax.load(url, { data ...
- ctags对部分目录生成tags
最近在研究Tiny6410上的uboot移植,看uboot源码时,生成tags文件用的是最粗暴的方法:“ctags -R *”,由于某些函数在各个平台下都有实现,导致在用“g+]”跳转到该函数的定义时 ...
- Data Being Added Conflicts with Existing Data
While developing a page with multiple scrolls levels, and especially when using a grid, you may get ...
- 在Entity Framework 中执行T-sql语句
从Entity Framework 4开始在ObjectContext对象上提供了2个方法可以直接执行SQL语句:ExecuteStoreQuery<T> 和 ExecuteStoreC ...
- PHP常用函数和常见疑难问题解答
PHP常用库函数介绍 一.PHP字符串操作常用函数 1.确定字符串长度 int strlen(string str) 2.比较两个字符串 a. strcmp函数对两个字符串进行二进制安全的比较,并区 ...
- phpcms v9 中get的mysql查询表某字段最大值数据,表某字段不重复数据
直切正题 1.表tb中字段num最大的数据 {pc:get $sql="select * from tb where num=(select MAX(num) from tb)"} ...
- css3圆角边框,边框阴影
border-radius向元素添加圆角边框,css3中的.IE9+ chrome safari5+ firefox4+ 现在都支持.可以向input div等设置边框.与border相似,可以四个角 ...