这是汇编源文件:
MCU:S3C2440(arm920T)
代码实现点亮个led小灯
.text
.global _start
_start:
ldr r0,=0x56000010 @GPBCON
mov r1,#0x00000400 @
str r1,[r0] @GPB5_out=01
ldr r0,=0x56000014 @GPBDAT
mov r1,#0x0
str r1,[r0] @GPBDAT[5]=0,len_off
main_loop:
b main_loop
反汇编文件:
led_on.bin: file format binary
Disassembly of section .data:
00000000 <.data>:
0: e59f0014 ldr r0, [pc, #20] ; 0x1c
4: e3a01b01 mov r1, #1024 ; 0x400
8: e5801000 str r1, [r0]
c: e59f000c ldr r0, [pc, #12] ; 0x20
10: e3a01000 mov r1, #0 ; 0x0
14: e5801000 str r1, [r0]
18: eafffffe b 0x18
1c: 56000010 undefined
20: 56000014 undefined
接下来让我们分析下这小小的反汇编程序吧!
0: e59f0014 ldr r0, [pc, #20] ; 0x1c
这条指令就是把内存单元 pc+20 的值load 到r0 中,而根据ARM 架构指南所讲,pc 的值读取得时候是当前指令的地址 +8 ,
所以就是把地址28 (也就是16进制的1c)的值load 到r0中,r0 现在变成了0x56000010.
4: e3a01b01 mov r1, #1024 ; 0x400
这条指令是把1024(ARM汇编At&T语法要在立即数前加#), 也即是16进制的0x400 移到r1中。
8: e5801000 str r1, [r0]
这个就是通过str 指令把r1内容存到r0 寄存器所指向的内存单元。 也就是把1024 存到0x56000000 中。
c: e59f000c ldr r0, [pc, #12] ; 0x20
10: e3a01000 mov r1, #0 ; 0x0
14: e5801000 str r1, [r0]
这三条指令一样的道理
18: eafffffe b 0x18
这个是死循环
1c: 56000010 undefined
20: 56000014 undefined
这两行不是指令,而是数据。
上一篇:ADS+AXD调试,配置H-JTAG(华恒2410)
下一篇:arm-linux-gnueabi和arm-linux-gnueabihf 的区别
推荐阅读最新更新时间:2024-11-13 19:07
设计资源 培训 开发板 精华推荐
- AM3G-4803SZ 3.3V 3 瓦 DC-DC 转换器的典型应用
- 三相直流无刷电器驱动器(BLDC)
- 具有无源平衡功能的 6 节 EV/HEV 集成电池监视器和保护器参考设计
- [视频]万粉UP疑似盗平台IP6518模块设计资料流出
- LTC3265MPDHC 低噪声 +7V/-2V 电源的典型应用电路来自一个单端 5V 输入电源(频率 = 200kHz)
- STEVAL-ILL046V2,基于 ST1CC40 HB LED 驱动器的评估板,采用 SO-8 BW 封装
- LTC4071EDDB 演示板,具有低电池电量断开连接的锂离子/聚合物并联电池充电器系统
- OP113FSZ-REEL精密K型热电偶放大器典型应用
- LT3089IR 负载均分不带镇流电阻器的典型应用电路
- #第六届立创电赛#我是龙泉舟