ARM汇编程序闪烁灯与其反汇编代码比较
/*
*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汇编程序闪烁灯与其反汇编代码比较的更多相关文章
- ARM汇编程序结构
ARM汇编程序结构 一个ARM程序可以被划分为多个代码段和数据段,在汇编的时候这些段会被形成一个可执行文件 .text ;正文段,包含程序的指令代码 .data ;数据段,包含固定的数据,如常量,字符 ...
- arduino--1s间隔闪烁灯
初始使用Arduino,写了这么个小功能:1s间隔闪烁灯 void setup() { pinMode(,OUTPUT);//Set 13Pin as OUTPUT } void loop() { d ...
- ARM汇编程序基本知识
ARM汇编程序基本知识 1.汇编程序的基本组成 ARM汇编语言程序中,程序是以程序段为单位组织代码的.段是相对独立的指令或者代码序列,拥有特定的名称.段的种类有代码段.数据段和通用段,代 码段的内容为 ...
- 51单片机和Arduino—闪烁灯实现
技术:51单片机学习.Keil4环境安装.Arduino环境安装.闪烁灯教程 概述 本文提供51单片机.Arduino单片机入门软件安装和一些需要使用的软件介绍,为后续单片机.嵌入式开发做 ...
- ARM汇编程序中的伪指令
转自http://blog.chinaunix.net/uid-13701930-id-336459.html 4.1 ARM汇编器所支持的伪指令 在ARM汇编语言程序里,有一些特殊指令助记符,这些助 ...
- ARM Cortex-M底层技术(2)—启动代码详解
杂谈 工作了一天,脑袋比较乱.一直想把底层的知识写成一个系列,希望可以坚持下去.为什么要写底层的东西呢?首先,工作用到了这部分内容,最近和内部Flash打交道比较多,自然而然会接触到一些底层的东西:第 ...
- linux下的arm汇编程序
1.gnu 的编译环境搭建 解压编译工具,加入环境变量PATH 2.编译相关命令的使用 编译命令 arm-linux-gcc -g -c -o led.o main.o led.c main.c / ...
- C++反汇编代码分析–函数调用
转载:http://shitouer.cn/2010/06/method-called/ 代码如下:#include “stdlib.h” int sum(int a,int b,int m,int ...
- C++反汇编代码分析--函数调用
推荐阅读: C++反汇编代码分析–函数调用 C++反汇编代码分析–循环结构 C++反汇编代码分析–偷调函数 走进内存,走进汇编指令来看C/C++指针 代码如下: #include "stdl ...
随机推荐
- netty in action 笔记 二
netty的数据容器 网络数据的基本单位大多为字节,Java NIO 提供了ByteBuffer 作为它的字节容器,但使用起来过于复杂和繁琐.在Netty中, ByteBuffer 替代品是ByteB ...
- LeetCode 138——复制带随机指针的链表
1. 题目 2. 解答 第一次遍历链表的时候,复制旧链表的节点值建立一个新的链表,同时定义一个 unordered_map 作为哈希表,哈希表的键为旧链表的节点指针,值为新链表的节点指针. 然后,第二 ...
- SGU 176 Flow construction(有源汇上下界最小流)
Description 176. Flow construction time limit per test: 1 sec. memory limit per test: 4096 KB input: ...
- Memory及其controller芯片整体测试方案(上篇)
如果你最近想买手机,没准儿你一看价格会被吓到手机什么时候偷偷涨价啦! 其实对于手机涨价,手机制造商也是有苦难言,其中一个显著的原因是存储器芯片价格的上涨↗↗↗ >>> 存储器memo ...
- Python 零碎信息-基础 01
1. """ 可以插入多行文字. print """ abC 123' 456''" #单引号, 双引号, 也没有关系 " ...
- Unity3d学习日记(三)
使用Application.LoadLevel(Application.loadedLevel);来重新加载游戏scene的方法已经过时了,我们可以使用SceneManager.LoadScene ...
- ubuntu下修改MySQL的配置文件my.cnf
先sudo su转换成root,再用cd转到/etc/MySQL目录下,用chmod修改权限(chmod 755 my.cnf),但这样还不能修改,再用vi命令(vi my.cnf),通过上下方向键将 ...
- 软工实践原型设计——PaperRepositories
软工实践原型设计--PaperRepositories 写在前面 本次作业链接 队友(031602237吴杰婷)博客链接 pdf文件地址 原型设计地址(加载有点慢...) 结对成员:031602237 ...
- 【Linux】- Ubuntu 配置mysql远程访问
ubuntu上安装mysql非常简单只需要几条命令就可以完成. sudo apt-get install mysql-server 安装过程中会提示设置密码什么的,注意设置了不要忘了,安装完成之后 ...
- 【Python】python更新数据库脚本两种方法
最近项目的两次版本迭代中,根据业务需求的变化,需要对数据库进行更新,两次分别使用了不同的方式进行更新. 第一种:使用python的MySQLdb模块利用原生的sql语句进行更新 1 import ...