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>
时间: 2024-09-30 15:44:09

ARM7ldr指令与ldr伪指令的相关文章

ARM汇编- LDR加载指令,LDR伪指令

1,ldr加载指令LDR指令的格式为:LDR{条件}  目的寄存器,<存储器地址>LDR指令用亍从存储器中将一个32位的字数据传送到目的寄存器中.该指令通常用亍从存储器中读取32位的字数据到通用寄存器,然后对数据迕行处理.当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转.该指令在程序设计中比较常用,丏寻址方式灵活多样,请读者认真掌握.指令示例: LDR R0,[R1]                                     

【转】arm汇编—ldr加载指令,ldr伪指令

1,ldr加载指令 LDR指令的格式为:LDR{条件}  目的寄存器,<存储器地址>LDR指令用亍从存储器中将一个32位的字数据传送到目的寄存器中.该指令通常用亍从存储器中读取32位的字数据到通用寄存器,然后对数据迕行处理.当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转.该指令在程序设计中比较常用,丏寻址方式灵活多样,请读者认真掌握.指令示例:LDR R0,[R1]         :将存储器地址为R1的字数据读入寄存器R0.LDR R0

arm汇编—ldr加载指令,ldr伪指令

分类: 嵌入式 2014-01-17 17:15:20 操作系统:ubuntu10.04汇编语言:arm 1,ldr加载指令LDR指令的格式为:LDR{条件}  目的寄存器,<存储器地址>LDR指令用亍从存储器中将一个32位的字数据传送到目的寄存器中.该指令通常用亍从存储器中读取32位的字数据到通用寄存器,然后对数据迕行处理.当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转.该指令在程序设计中比较常用,丏寻址方式灵活多样,请读者认真掌握.指

ARM中LDR伪指令与LDR加载指令

ARM指令集中,LDR通常都是作加载指令的,但是它也可以作伪指令. LDR伪指令的形式是“LDR Rn,=expr”.下面举一个例子来说明它的用法. COUNT EQU       0x40003100 …… LDR       R1,=COUNT MOV      R0,#0 STR       R0,[R1] COUNT是我们定义的一个变量,地址为0x40003100.这中定义方法在汇编语言中是很常见的,如果使用过单片机的话,应该都熟悉这种用法. LDR       R1,=COUNT是将C

ARM汇编中LDR伪指令和LDR指令

ARM汇编语言是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/s tr 指令. 比如想把数据从内存中某处读取到寄存器中,只能使用ldr比如: ldr r0, 0x12345678 就是把 0x12345678这个地址中的值存放到r0中 . 而mov不能实现这个功能,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中, 这个和x86这种CISC 架构 的芯片区别最大的地方.x86中没有ldr这种指令,因为x86的mov指令可以将数据从内存中移动到寄存器中

ARM汇编中ldr伪指令和ldr指令(转载)

转自:http://blog.csdn.net/ce123_zhouwei/article/details/7182756 ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令.比如想把数据从内存中某处读取到寄存器中,只能使用ldr比如: ldr r0, 0x12345678 就是把0x12345678这个地址中的值存放到r0中.而mov不能实现这个功 能,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中,这个和x86这种CISC架构的芯

ARM LDR伪指令用法详解

LDR伪指令 10.45 LDR pseudo-instruction   功能:把一个32位立即数或一个32位的内存地址加载到一个寄存器中. 注意:这里描述的是LDR伪指令,而不是LDR指令   语法:               LDR{cond}{.W} Rt, =expr LDR{cond}{.W} Rt, =label_expr *   cond是一个可选的条件码 *  .W是可选的指令宽度说明符 *   Rt是要加载的寄存器 *   expr是一个数字表达式 *   label_ex

ARM常用重要的寄存器及指令解释 和 指令英文全称

一.常用的寄存器 r0 -r3    临时变量  用于传递参数,传递返回指,当传递参数的参数大于4个时,用栈空间.即开辟sp fp:frame pointer  记录回溯sp ip: 很少用 ,临时存放sp sp:指向栈顶 lr:link register 用于跳转时记录返回地址 pc:记录cpu运行指令的地址     因为arm采用流水线方式   取值  译码  执行等   pc=pc+8,     即pc指向当前执行的指令的下两条. cpsr :状态寄存器,每种工作模式有自己的cpsr,记录

chengdongyue的笔记

---------------------------------------- Linux 基础 --------------------------------1.Linux的诞生 1.unix两大分支:BSD和system V 2.GUN计划:允许软件自由复制更改移植 3.Linux发行版本:red_hat(red_hat) Debian(ubuntu) 系列 4.Linux 用户界面 1.图形界面 2.用户界面 5.Linux操作系统的构建: 硬件--内核--系统调用(保护内核的软件)-