zoukankan      html  css  js  c++  java
  • ARM7ldr指令与ldr伪指令

    ldr伪指令的第二个操作数之前有个=,意思是第一个操作书 = 第二个操作数,相当明了

    核心就在于对于用.word指令在.text段里另外定义一段内存,用ldr r0,[pc + x(可以算出.text段里的内存地址)]这种基于PC的偏移量方式加载内存里的内容到寄存器

    看下源代码和反汇编的结果就清楚了

    伪指令用于大的常数:

     源代码:

    1 top:
    2 ldr r0,=12345678
    3 add r1,r2,r3
    4 eor r1,r2,r3
    5 eor r1,r2,r3
    6 bottom:
    7 b top

    反汇编:

    prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin$ ./arm-eabi-objdump -d test.o 
    
    test.o:     file format elf32-littlearm
    
    
    Disassembly of section .text:
    
    00000000 <top>:
       0:    e59f000c     ldr    r0, [pc, #12]    ; 14 <bottom+0x4>
       4:    e0821003     add    r1, r2, r3
       8:    e0221003     eor    r1, r2, r3
       c:    e0221003     eor    r1, r2, r3
    
    00000010 <bottom>:
      10:    eafffffa     b    0 <top>
      14:    00bc614e     .word    0x00bc614e

    伪指令用于标签:

    源代码:

    1 top:
    2 ldr r0,=bottom
    3 add r1,r2,r3
    4 eor r1,r2,r3
    5 eor r1,r2,r3
    6 bottom:
    7 b top

    反汇编:

    prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin$ ./arm-eabi-objdump -d test.o 
    
    test.o:     file format elf32-littlearm
    
    
    Disassembly of section .text:
    
    00000000 <top>:
       0:    e59f000c     ldr    r0, [pc, #12]    ; 14 <bottom+0x4>
        4:    e0821003     add    r1, r2, r3
        8:    e0221003     eor    r1, r2, r3
        c:    e0221003     eor    r1, r2, r3
     
     00000010 <bottom>:
       10:    eafffffa     b    0 <top>
       14:    00000010     .word    0x00000010

    ldr指令用于常数:

     源代码:

    1 top:
    2 ldr r0,[r0]
    3 add r1,r2,r3
    4 eor r1,r2,r3
    5 eor r1,r2,r3
    6 bottom:
    7 b top

    反汇编:

    prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin$ ./arm-eabi-objdump -d test.o 
    
    test.o:     file format elf32-littlearm
    
    
    Disassembly of section .text:
    
    00000000 <top>:
       0:    e5900000     ldr    r0, [r0]
       4:    e0821003     add    r1, r2, r3
       8:    e0221003     eor    r1, r2, r3
       c:    e0221003     eor    r1, r2, r3
    
    00000010 <bottom>:
      10:    eafffffa     b    0 <top>

    ldr指令用于标签:

    源代码:

    1 top:
    2 ldr r0,bottom
    3 add r1,r2,r3
    4 eor r1,r2,r3
    5 eor r1,r2,r3
    6 bottom:
    7 b top

    反汇编:

    prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin$ ./arm-eabi-objdump -d test.o 
    
    test.o:     file format elf32-littlearm
    
    
    Disassembly of section .text:
    
    00000000 <top>:
       0:    e59f0008     ldr    r0, [pc, #8]    ; 10 <bottom>
       4:    e0821003     add    r1, r2, r3
       8:    e0221003     eor    r1, r2, r3
       c:    e0221003     eor    r1, r2, r3
    
    00000010 <bottom>:
      10:    eafffffa     b    0 <top>
  • 相关阅读:
    创建类以及引用一个类
    修改hosts文件
    微信第三方登录接口开发
    Android定位
    Leetcode 102. Binary Tree Level Order Traversal
    Leetcode 725. Split Linked List in Parts
    Leetcode 445. Add Two Numbers II
    Leetcode 328. Odd Even Linked List
    Leetcode 237. Delete Node in a Linked List
    Leetcode 234. Palindrome Linked List
  • 原文地址:https://www.cnblogs.com/cascle/p/5035207.html
Copyright © 2011-2022 走看看