免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7877 | 回复: 6
打印 上一主题 下一主题

请教一条arm 汇编指令的意思 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-15 12:48 |只看该作者 |倒序浏览
ldr     r2, [r3, r2, lsl #2]


这个是不是说把r2中的内容逻辑左移2位,然后存到r3中,再然后把r3中的内容存到r2中?


还有:
movge   r2, r0
这个是什么意思呢?


mov是移动r0到r2中,但movge呢? 难道r0 >= r2就移,否则就不移?

类似的还有 ldmeq   sp, {fp, sp, pc}

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
2 [报告]
发表于 2011-09-15 13:00 |只看该作者
回复 1# kernelinside


    这里是内核版,大哥是不是发错地方了阿。


1.[r3+r2*4]mem -> r2
2.ge 应该是条件码标志位,如果ge成立,则r0 -> r2
3.同理2

论坛徽章:
0
3 [报告]
发表于 2011-09-15 13:09 |只看该作者
谢谢万兄,我发的代码是,内核中的

tick_check_oneshot_broadcast() 反汇编的结果。。。就发到内核版上来了。

那到 movge   r2, r0 这里面的条件 是什么呢?
我推测ge代表great than,但是什么东西great than什么东西呢?

。。。
谢谢

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
4 [报告]
发表于 2011-09-15 13:14 |只看该作者
回复 3# kernelinside


    这个当时学arm时学过,至于ge是什么意思请查一下arm书。之前可能有一个比较,比如cmp r0, r1,此cmp不会保存比较结果,而是修改条件码标志位。就产生了大于,等于,小于。怎么用呢,这时就可以在mov后边加上条件,比如当cmp的结果是大于即r0>r1时,执行mov这条指令,如果不满足条件,就不执行mov,执行下一条。

论坛徽章:
0
5 [报告]
发表于 2011-09-15 20:48 |只看该作者
subhi   r5, r5, r8, asr lr

这个指令是什么意思啊。网上找了好多,有sub, 但没有subhi啊。
或者给推荐本讲arm汇编指令的书啊。

  1. 80086a20 <tick_check_oneshot_broadcast>:
  2. 80086a20:       e1a0c00d        mov     ip, sp
  3. 80086a24:       e92dd800        push    {fp, ip, lr, pc}
  4. 80086a28:       e24cb004        sub     fp, ip, #4
  5. 80086a2c:       e92d4000        push    {lr}
  6. 80086a30:       ebfec7f3        bl      80038a04 <__gnu_mcount_nc>
  7. 80086a34:       e3500000        cmp     r0, #0
  8. 80086a38:       e280201f        add     r2, r0, #31
  9. 80086a3c:       a1a02000        movge   r2, r0
  10. 80086a40:       e59f3030        ldr     r3, [pc, #48]   ; 80086a78 <tick_check_oneshot_broadcast+0x58>
  11. 80086a44:       e1a022c2        asr     r2, r2, #5
  12. 80086a48:       e7932102        ldr     r2, [r3, r2, lsl #2]
  13. 80086a4c:       e200301f        and     r3, r0, #31
  14. 80086a50:       e1a03332        lsr     r3, r2, r3
  15. 80086a54:       e3130001        tst     r3, #1
  16. 80086a58:       089da800        ldmeq   sp, {fp, sp, pc}
  17. 80086a5c:       e59f2018        ldr     r2, [pc, #24]   ; 80086a7c <tick_check_oneshot_broadcast+0x5c>
  18. 80086a60:       e3a01003        mov     r1, #3
  19. 80086a64:       e59f3014        ldr     r3, [pc, #20]   ; 80086a80 <tick_check_oneshot_broadcast+0x60>
  20. 80086a68:       e7922100        ldr     r2, [r2, r0, lsl #2]
  21. 80086a6c:       e7930002        ldr     r0, [r3, r2]
  22. 80086a70:       ebfffb6d        bl      8008582c <clockevents_set_mode>
  23. 80086a74:       e89da800        ldm     sp, {fp, sp, pc}
  24. 80086a78:       80455e58        subhi   r5, r5, r8, asr lr
  25. 80086a7c:       8047ccec        subhi   ip, r7, ip, ror #25
  26. 80086a80:       80034320        andhi   r4, r3, r0, lsr #6
复制代码

论坛徽章:
0
6 [报告]
发表于 2011-09-15 21:34 |只看该作者
上面第20行导致我的kernel oops

论坛徽章:
0
7 [报告]
发表于 2011-09-15 21:40 |只看该作者
我的kernel, 每次都出现oops, 但每次crashed的函数不一样:
这次居然说pc=0,这怎么可能?!

2.6.35+arm

  1. Unable to handle kernel NULL pointer dereference at virtual address 00000000
  2. pgd = 80004000
  3. [00000000] *pgd=00000000
  4. Internal error: Oops: 80000007 [#1] PREEMPT SMP
  5. last sysfs file:
  6. Modules linked in:
  7. CPU: 0    Not tainted  
  8. PC is at 0x0
  9. LR is at __rcu_process_callbacks+0x220/0x33c
  10. pc : [<00000000>]    lr : [<80098a14>]    psr: 60000113
  11. sp : 80405e60  ip : 80405e60  fp : 80405e9c
  12. r10: 805c5424  r9 : 00000000  r8 : 805c5424
  13. r7 : 80404000  r6 : 87c05424  r5 : 8041bde0  r4 : 805c540c
  14. r3 : 00000000  r2 : 80000113  r1 : 804309c0  r0 : 87c05424
  15. Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
  16. Control: 10c5387d  Table: 4822404a  DAC: 00000015
  17. Process swapper (pid: 0, stack limit = 0x804042f0)
  18. Stack: (0x80405e60 to 0x80406000)
  19. 5e60: 8006be24 803171e4 881c7110 00000000 80405ebc 80404000 8041bde0 8047ccec
  20. 5ea00000 00000000
  21. Backtrace:
  22. [<800987f4>] (__rcu_process_callbacks+0x0/0x33c) from [<80098b7c>] (rcu_process_callbacks+0x4c/0x74)
  23. [<80098b30>] (rcu_process_callbacks+0x0/0x74) from [<80064c7c>] (__do_softirq+0x130/0x248)
  24. r7:00000001 r6:00000202 r5:80406064 r4:80404000
  25. [<80064b4c>] (__do_softirq+0x0/0x248) from [<80065264>] (irq_exit+0x5c/0xc4)
  26. [<80065208>] (irq_exit+0x0/0xc4) from [<80038098>] (asm_do_IRQ+0x98/0xd0)
  27. r4:00000054 r3:80096a68
  28. [<80038000>] (asm_do_IRQ+0x0/0xd0) from [<80317e48>] (__irq_svc+0x48/0xbc)
  29. Exception stack(0x80405f38 to 0x80405f80)
  30. 5f20:                                                       00000000 60000013
  31. 5f40: f300a000 00000000 80404000 80414038 804332a4 805c2080 40022388 411fc092
  32. 5f60: 00000000 80405f8c 80405f90 80405f80 80039698 8003969c 60000013 ffffffff
  33. r5:f0020000 r4:ffffffff
  34. [<80039668>] (default_idle+0x0/0x38) from [<800398d8>] (cpu_idle+0x58/0xb0)
  35. [<80039880>] (cpu_idle+0x0/0xb0) from [<8031106c>] (rest_init+0xc8/0xe8)   r6:800237f4 r5:80433040 r4:80404000 r3:00000001
  36. [<80310fa4>] (rest_init+0x0/0xe8) from [<80008994>] (start_kernel+0x264/0x2bc)  r4:8047c978 r3:80023d98
  37. [<80008730>] (start_kernel+0x0/0x2bc) from [<40008034>] (0x40008034)  r7:80414030 r6:800237f0 r5:80433390 r4:10c5387d
  38. Code: bad PC value
  39. ---[ end trace 2a82b2d2a82235d8 ]---
  40. Kernel panic - not syncing: Fatal exception in interrupt

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP