免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2921 | 回复: 3

[操作系统] arm程序的反汇编程序 [复制链接]

论坛徽章:
0
发表于 2012-03-27 22:23 |显示全部楼层
这是汇编源文件:
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
发表于 2012-03-28 11:08 |显示全部楼层
不合上面差不多么?

论坛徽章:
0
发表于 2012-03-28 12:10 |显示全部楼层
不一样吧,比如反汇编里的,#20,#1024,#12,0x18什么的都不知道是什么

论坛徽章:
0
发表于 2012-03-31 22:15 |显示全部楼层
   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

我帮你解读一下:
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

这两行不是指令,而是数据。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP