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中怎么对enum类型循环取其中每一个值
static void test(Args _args) { DictEnum dictEnum; int i,nextPos; EnumId enumId; ; enumId = EnumNum(S ...
- 复杂的sql 一对多查询
SELECT distinct u.Name as UserName, a.OrderId, ( select d.SignCity from T_O ...
- SID与GUID的区别
1.在AD里面创建一个用户或者组都会为其分配一个SID,同时也会为这些对象分配一个GUID,GUID是一个128位的字符串,一个标识符,GUID不仅在整个域里面是唯一的,并且在全世界的范围内都是唯一的 ...
- javaSE第四天
第四天 18 1. switch语句(掌握) 18 (1)格式: 18 (2)面试题 19 (3)执行流程: 19 (4)注意事项: 19 (5)案例: 19 ...
- Ubuntu 14.04 – How to install xrdp in Ubuntu 14.04
http://c-nergy.be/blog/?p=5305 Hello World, Ubuntu 14.04 has been released on April 17th 2014 and we ...
- 搭建高性能计算环境(六)、应用软件的安装之lammps
1,上传需要的软件包lammps-stable.tar.gz. 2,解压缩并进入安装目录 tar xvf lammps-stable.tar.gz cd lammps-30Oct14 3,如果需要re ...
- Java应用架构的演化之路
Java应用架构的演化之路 当我们架设一个系统的时候通常需要考虑到如何与其他系统交互,所以我们首先需要知道各种系统之间是如何交互的,使用何种技术实现. 1. 不同系统不同语言之间的交互 现 在我们常见 ...
- JSON,JSONP
http://blog.csdn.net/huaishuming/article/details/40046729 说明: 在做2个系统间传值时出现: 已阻止交叉源请求:同源策略不允许读取 http: ...
- Resources are low on NN. Please add or free up more resources then turn off safe mode manually.
提交spark应用到yarn集群上的时候在跑一段时间就会出现这个报错: 根据上面的报错原因分析是因为集群资源不够,集群的自我保护机制使hdfs处于安全模式,然后我用"hdfs dfsadmi ...
- web.xml中的url-pattern映射规则
Servlet和filter是J2EE开发中常用的技术,使用方便,配置简单.servlet和filter中的url-pattern有一些文章在里面的,总结了一些东西,以免遇到问题又要浪费时间. 一,s ...