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 ...
随机推荐
- Java学习笔记-11.运行期间类型鉴定
1.Class对象的getClasses()方法获取的是该类中所有的公共的内部类,以及从父类,父接口继承来的内部类.getinterfaces()方法返回类继承的所有接口. import javax. ...
- vmware centOS上网配置笔记
⦁ 修改/etc/sysconfig/network-scripts/ifcfg-eth0文件 (首先查看本机vmware 虚拟网络编辑器中的网关) 重启网络 使用命令:service net ...
- VBS简明教程
VBS简明教程 一.输出 VBS的输出使用函数Msgbox调用对话框进行输出. Msgbox(message) Message为要输出的信息 二.输入 VBS的输入,调用函数Inputbox()进 ...
- TensorFlow | ReluGrad input is not finite. Tensor had NaN values
问题的出现 Question 这个问题是我基于TensorFlow使用CNN训练MNIST数据集的时候遇到的.关键的相关代码是以下这部分: cross_entropy = -tf.reduce_sum ...
- UVA 11922 Permutation Transformer(平衡二叉树)
Description Write a program to transform the permutation 1, 2, 3,..., n according to m instructions. ...
- php中array_map和array_walk的使用对比
一.array_map() 1.array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组,若函数作用后无返回值,则对应的新值数组中为空. 2.回调 ...
- UVALive - 6864 Strange Antennas 扫描线
题目链接: http://acm.hust.edu.cn/vjudge/problem/87213 Strange Antennas Time Limit: 3000MS 题意 一个雷达能够辐射到的范 ...
- .net下将exe改造为既能双击独立运行又能注册为windows服务
最近项目中需要将一些业务的处理程序改造为windows服务,但是考虑到实际需求,也需要能够直接双击运行这些处理程序.首先第一步想到的就是原来的项目不变,只需要在加一个windows服务的项目就行.但是 ...
- WE团队团队汇总
WE团队目录 一.博客汇总 团队展示 选题报告 二.文档汇总 选题报告
- nginx 设置默认虚拟 host
nginx 设置默认虚拟 host listren 80 default_server