博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ARM汇编程序闪烁灯与其反汇编代码比较
阅读量:6368 次
发布时间:2019-06-23

本文共 2445 字,大约阅读时间需要 8 分钟。

/**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, =(0<<3) |(0<<4)| (0<<5)// 等效于 0b0010_1000 即 0x28    ldr r1, =GPJ0DAT    str r0, [r1]            //点亮    //第三步: 延迟    bl delay                //使用bl进行调用可以将当前执行地址存入lr        //第四部:灭    //ldr r0, =0x28//  第一种 缺陷是需要人为计算设定值  可阅读型差            ldr r0, =(1<<3) |(1<<4)| (1<<5)    ldr r1, =GPJ0DAT    str r0, [r1]            //熄灭    bl delay        b flash                           b .                       //写一个死循环 防止CPU跑飞    delay:    ldr r2, =1000000    ldr r3, =0delay_loop:    sub r2, r2, #1      //r2=r2-1    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-littlearmDisassembly of section .text:00000000 <_start>:   0:    e59f0044     ldr    r0, [pc, #68]    ; 4c 
4: e59f1044 ldr r1, [pc, #68] ; 50
8: e5810000 str r0, [r1]0000000c
: c: e3a00000 mov r0, #0 10: e59f103c ldr r1, [pc, #60] ; 54
14: e5810000 str r0, [r1] 18: eb000005 bl 34
1c: e3a00038 mov r0, #56 ; 0x38 20: e59f102c ldr r1, [pc, #44] ; 54
24: e5810000 str r0, [r1] 28: eb000001 bl 34
2c: eafffff6 b c
30: eafffffe b 30
00000034
: 34: e59f201c ldr r2, [pc, #28] ; 58
38: e3a03000 mov r3, #00000003c
: 3c: e2422001 sub r2, r2, #1 40: e1520003 cmp r2, r3 44: 1afffffc bne 3c
48: e1a0f00e mov pc, lr 4c: 11111111 tstne r1, r1, lsl r1 50: e0200240 eor r0, r0, r0, asr #4 54: e0200244 eor r0, r0, r4, asr #4 58: 000f4240 andeq r4, pc, r0, asr #4Disassembly of section .ARM.attributes:00000000 <.ARM.attributes>: 0: 00001a41 andeq r1, r0, r1, asr #20 4: 61656100 cmnvs r5, r0, lsl #2 8: 01006962 tsteq r0, r2, ror #18 c: 00000010 andeq r0, r0, r0, lsl r0 10: 45543505 ldrbmi r3, [r4, #-1285] ; 0x505 14: 08040600 stmdaeq r4, {r9, sl} 18: Address 0x00000018 is out of bounds.

 

转载于:https://www.cnblogs.com/PengfeiSong/p/6338974.html

你可能感兴趣的文章
环球花木网的目标就是致力于打造成为“园林相关行业的专业性门户网站
查看>>
《编写高质量代码:改善c程序代码的125个建议》—— 建议14-1:尽量避免对未知的有符号数执行位操作...
查看>>
《C语言编程魔法书:基于C11标准》——2.2 整数在计算机中的表示
查看>>
全球程序员编程水平排行榜TOP50,中国排名第一
查看>>
HDFS 进化,Hadoop 即将拥抱对象存储?
查看>>
Edge 浏览器奇葩 bug:“123456”打印成“114447”
查看>>
Sirius —— 开源版的 Siri ,由 Google 支持
查看>>
《OpenGL ES应用开发实践指南:Android卷》—— 2.7 小结
查看>>
《Windows Server 2012活动目录管理实践》——第 2 章 部署第一台域控制器2.1 案例任务...
查看>>
Java Date Time 教程-时间测量
查看>>
Selector.wakeup实现注记
查看>>
《Java EE 7精粹》—— 第1章 Java EE 1.1 简介
查看>>
《Exchange Server 2013 SP1管理实践》——导读
查看>>
syslog:类Unix系统常用的log服务
查看>>
使用Annotation设计持久层
查看>>
深入实践Spring Boot2.4.1 Neo4j依赖配置
查看>>
Zen Cart 如何添加地址栏上的小图标
查看>>
SecureCrt 连接Redhat linux
查看>>
[NHibernate]持久化类(Persistent Classes)
查看>>
如何在Hive中使用Json格式数据
查看>>