/*
*LED闪烁
*led.s
*/
#define GPJ0CON 0xE0200240
#define GPJ0DAT 0xE0200244
.global _start //把 _start 链接属性改为外部
_start:
//第一步 :把0x1111 1111写入 0xe0200240(gpj0con)
ldr r0, =0x11111111 //这里ldr 为伪指令
ldr r1, =GPJ0CON
str r0, [r1] //寄存器间接寻址 将r0的值给ri所指地址的内存中 flash:
//第二部:把 0x0写入0xe0200244(GPJ0DAT) 点亮
//ldr r0, =0x28// 第一种 缺陷是需要人为计算设定值 可阅读型差 ldr r0, =(<<) |(<<)| (<<)// 等效于 0b0010_1000 即 0x28
ldr r1, =GPJ0DAT
str r0, [r1] //点亮
//第三步: 延迟
bl delay //使用bl进行调用可以将当前执行地址存入lr //第四部:灭
//ldr r0, =0x28// 第一种 缺陷是需要人为计算设定值 可阅读型差 ldr r0, =(<<) |(<<)| (<<)
ldr r1, =GPJ0DAT
str r0, [r1] //熄灭
bl delay
b flash b . //写一个死循环 防止CPU跑飞 delay:
ldr r2, =
ldr r3, =
delay_loop:
sub r2, r2, # //r2=r2-
cmp r2, r3 //cmp 比较r2 r3 如果相等 Z 为1
bne delay_loop //bne 为当Z为1时执行跳转 bne 为 b+后缀
mov pc, lr //函数调用返回 mov 为 寄存器间寻址

反汇编

led.elf:     file format elf32-littlearm

Disassembly of section .text:

 <_start>:
: e59f0044 ldr r0, [pc, #] ; 4c <delay_loop+0x10>
: e59f1044 ldr r1, [pc, #] ; 50 <delay_loop+0x14>
: e5810000 str r0, [r1] 0000000c <flash>:
c: e3a00000 mov r0, #
: e59f103c ldr r1, [pc, #] ; 54 <delay_loop+0x18>
: e5810000 str r0, [r1]
: eb000005 bl <delay>
1c: e3a00038 mov r0, # ; 0x38
: e59f102c ldr r1, [pc, #] ; 54 <delay_loop+0x18>
: e5810000 str r0, [r1]
: eb000001 bl <delay>
2c: eafffff6 b c <flash>
: eafffffe b <flash+0x24> <delay>:
: e59f201c ldr r2, [pc, #] ; 58 <delay_loop+0x1c>
: e3a03000 mov r3, # 0000003c <delay_loop>:
3c: e2422001 sub r2, r2, #
: e1520003 cmp r2, r3
: 1afffffc bne 3c <delay_loop>
: e1a0f00e mov pc, lr
4c: tstne r1, r1, lsl r1
: e0200240 eor r0, r0, r0, asr #
: e0200244 eor r0, r0, r4, asr #
: 000f4240 andeq r4, pc, r0, asr # Disassembly of section .ARM.attributes: <.ARM.attributes>:
: 00001a41 andeq r1, r0, r1, asr #
: cmnvs r5, r0, lsl #
: tsteq r0, r2, ror #
c: andeq r0, r0, r0, lsl r0
: ldrbmi r3, [r4, #-] ; 0x505
: stmdaeq r4, {r9, sl}
: Address 0x00000018 is out of bounds.

ARM汇编程序闪烁灯与其反汇编代码比较的更多相关文章

  1. ARM汇编程序结构

    ARM汇编程序结构 一个ARM程序可以被划分为多个代码段和数据段,在汇编的时候这些段会被形成一个可执行文件 .text ;正文段,包含程序的指令代码 .data ;数据段,包含固定的数据,如常量,字符 ...

  2. arduino--1s间隔闪烁灯

    初始使用Arduino,写了这么个小功能:1s间隔闪烁灯 void setup() { pinMode(,OUTPUT);//Set 13Pin as OUTPUT } void loop() { d ...

  3. ARM汇编程序基本知识

    ARM汇编程序基本知识 1.汇编程序的基本组成 ARM汇编语言程序中,程序是以程序段为单位组织代码的.段是相对独立的指令或者代码序列,拥有特定的名称.段的种类有代码段.数据段和通用段,代 码段的内容为 ...

  4. 51单片机和Arduino—闪烁灯实现

        技术:51单片机学习.Keil4环境安装.Arduino环境安装.闪烁灯教程   概述 本文提供51单片机.Arduino单片机入门软件安装和一些需要使用的软件介绍,为后续单片机.嵌入式开发做 ...

  5. ARM汇编程序中的伪指令

    转自http://blog.chinaunix.net/uid-13701930-id-336459.html 4.1 ARM汇编器所支持的伪指令 在ARM汇编语言程序里,有一些特殊指令助记符,这些助 ...

  6. ARM Cortex-M底层技术(2)—启动代码详解

    杂谈 工作了一天,脑袋比较乱.一直想把底层的知识写成一个系列,希望可以坚持下去.为什么要写底层的东西呢?首先,工作用到了这部分内容,最近和内部Flash打交道比较多,自然而然会接触到一些底层的东西:第 ...

  7. linux下的arm汇编程序

    1.gnu 的编译环境搭建 解压编译工具,加入环境变量PATH 2.编译相关命令的使用 编译命令 arm-linux-gcc  -g -c -o led.o main.o led.c main.c / ...

  8. C++反汇编代码分析–函数调用

    转载:http://shitouer.cn/2010/06/method-called/ 代码如下:#include “stdlib.h” int sum(int a,int b,int m,int ...

  9. C++反汇编代码分析--函数调用

    推荐阅读: C++反汇编代码分析–函数调用 C++反汇编代码分析–循环结构 C++反汇编代码分析–偷调函数 走进内存,走进汇编指令来看C/C++指针 代码如下: #include "stdl ...

随机推荐

  1. [转载]Tensorflow中reduction_indices 的用法

    Tensorflow中reduction_indices 的用法 默认时None 压缩成一维

  2. 对int类型最小值INT_MIN取负值结果不变

    在32位系统中,int类型的最大值是0x7fffffff(即除了最高的1Bit其他31位都为1),而最小值是0x80000000(除了最高1bit,其他31位都为0). 显然,对于最小值求负数是不存在 ...

  3. php5.4以上运行yii框架出现问题的解决方法

    Ubuntu Server 下安装 Mcrypt Php Extension http://blog.archean.me/2013/10/22/install-mcrypt-php-extensio ...

  4. [STL] map,multimap,unordered_map基本用法

    map的特性是,所有元素都会根据元素的键值自动被排序.map的所有元素都是pair,同时拥有键值(key)和实值(value).pair的第一元素被视为键值,第二元素被视为实值.map不允许两个元素拥 ...

  5. getline读取整行文本// isprint

    getline——读取整行文本 这个函数接受两个参数:一个输入流对象和一个string对象.getline函数从输入流的下一行读取,并保存读取的内容到string中,但不包括换行符.和输入操作符不一样 ...

  6. BZOJ 2120 数颜色(树状数组套主席树)

    1A啊,激动. 首先,不修改的情况下可以直接用主席树搞,修改的话,直接用主席树搞一次修改的情况下复杂度是O(nlogn)的. 就像你要求区间和一样,用前缀和查询是O(1),修改是O(n),只不过主席树 ...

  7. 【bzoj4326】[NOIP2015]运输计划 二分答案+LCA

    题目描述 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球.小 P 掌管一家物流公司, 该 ...

  8. 【bzoj1131】[POI2008]Sta 树形dp

    题目描述 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 输入 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. 输出 输出你所找到的点,如果具有 ...

  9. Python:树的遍历

    各种遍历顺序如下图所示: 树的最大深度  # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = ...

  10. 【hackerrank】Week of Code 26

    在jxzz上发现的一个做题网站,每周都有训练题,题目质量……前三题比较水,后面好神啊,而且类型差不多,这周似乎是计数专题…… Army Game 然后给出n*m,问需要多少个小红点能全部占领 解法:乘 ...