最近比较一下KEIL和IAR两个编译器产生的代码,基于Cortex-M3处理器的,然后发现了一几个奇怪的地方. 很简单的一个C的for循环 void fun_for_add_65535(void) { int i; for (i=; i<65535; i++) ; } void fun_for_add_65536(void) { int i; for (i=; i<65536; i++) ; } 按道理这两个函数除了for的终止值不同之外,产生的汇编代码应该不会有什么差异.但是不是. 先看一下…
Cortex-m3启动代码分析笔记 启动代码文件名是STM32F10X.S,它的作用先总结下,然后再分析. 启动代码作用一般是: 1)堆和栈的初始化: 2)中断向量表定义: 3)地址重映射及中断向量表的转移: 4)设置系统时钟频率: 5)中断寄存器的初始化: 6)进入C应用程序. (1)按启动代码的次序,先看堆和栈的初始化: Stack_Size EQU 0x00000200 ;定义Stack_Size为0x00000200 AREA STACK, NOINIT, READWRITE, ALIG…
STM32学习之路入门篇之指令集及cortex——m3的存储系统 一.汇编语言基础 一).汇编语言:基本语法 1.汇编指令最典型的书写模式: 标号 操作码        操作数1, 操作数2,... :注释 1).标号是可选的,如果有,它必须顶格写.标号的作用是让汇编器来计算程序转移的地址. 2).操作码是指令的助记符,它的前面必须有至少一个空白符,通常使用提个Tab键来产生. 3).操作码后面往往跟若干个操作数,而第一个操作数,通常都给出本指令执行结果的存储地.不同指令需要不同数目的操作数,并…
转自:http://www.cnblogs.com/mddblog/p/4920063.html 阅读目录 概述 1.堆栈空间定义 2.存放中断向量表 3. 复位中断函数(Reset_Handler) 4.其它中断异常服务函数,以及弱[WEAK]声明 5.将堆栈地址传递给库函数 原文在此:http://www.cnblogs.com/mddblog/p/4920063.html 概述 在嵌入式系统中,启动文件是整个系统非常关键的部分,它会进行一些底层的初始化,构建程序运行必要的环境,比如堆栈初始…
浅析VS2010反汇编 2015年07月25日 21:53:11 阅读数:4374 第一篇 1. 如何进行反汇编 在调试的环境下,我们可以很方便地通过反汇编窗口查看程序生成的反汇编信息.如下图所示. 记得中断程序的运行,不然看不到反汇编的指令 看一个简单的程序及其生成的汇编指令 #include<stdio.h> #include<windows.h> const long Lenth=5060000/5; int main(){ while(true){ for(long i=0…
转载:http://blog.csdn.net/u010093140/article/details/50021897使用STVD建立完汇编工程项目之后(具本建立方法可以看我的另一篇博文http://blog.csdn.net/u010093140/article/details/49983397),可以看到这个目录结构(以STM8S105C6芯片为例)   其中.asm文件是汇编代码的源文件,.inc文件是包含文件,类似于C语言当在的.c文件和.h文件.接下来让我们来分析一下这三个文件.(分析…
要学习一个东西首先要把概念搞清楚,以下仅仅是自己的一些关于汇编的理解. 可运行文件里的01码是机器码,机器码不等于汇编码,尽管机器码能够非常easy翻译成汇编码. 汇编码中包括非常多汇编指令.伪指令和宏指令等.这些是不能够直接在机器上执行的. 机器指令是ARM指令集和Thumb指令集这些arm硬件支持的指令集组成的. 汇编码中的伪指令和宏指令这些都是汇编语言这个级别的指令,在汇编文件编译的时候汇编编译器as会去处理这些指令.在编译期间也会对宏进行展开,类似于gcc编译的时候对C代码中的宏展开一样…
[嵌入式开发]ARM 内存操作 ( DRAM SRAM 类型 简介 | Logical Bank | 内存地址空间介绍 | 内存芯片连接方式 | 内存初始化 | 汇编代码示例 )     一. 内存 简介 1. 两大内存分类 ( 1 ) DRAM 简介 ( 定期刷新 | 速度慢 | 成本低 ) DRAM 简介 : 1.硬件描述 : DRAM 基本由一个个小电容基本原件组成, 电容的两端保留电荷; 2.优缺点描述 : ① 优点 : 成本很低, 很便宜; ② 缺点 : 需要 定期刷新数据, 速度较慢…
目录 前言 posix 标准接口层设计 模拟器的系统心跳 模拟器的task底层实质 模拟器的任务切换原理 cortex M3/M4异常处理 双堆栈指针 双操作模式 栈帧 EXC_RETURN 前言 如果对硬件任务内核切换不感兴趣的同学可以跳过. 由于任务源码分析开始涉及到接口层,所以在学习源码前,先了解下posix接口层的设计. 本系列接口层会讲解两个: posix标准接口.因为本教程demo在linux上跑freertos时实际使用的就是这个接口. cortex m3/m4架构接口.因为这才是…
一.实验 使用gcc –S –o main.s main.c -m32 命令编译成汇编代码,如下代码中的数字请自行修改以防与他人雷同 int g(int x) { return x + 3; } int f(int x) { return g(x); } int main(void) { return f(8) + 1; } 源代码: 汇编代码: 去点.开头的代码后 堆栈变化: 我对“计算机是如何工作的”理解 通过以上一个小例子,清楚地展示了计算机是如何在堆栈中进行数据流的变化的.我的理解是,当…