精华内容
下载资源
问答
  • 汇编LDR指令

    万次阅读 2019-05-29 20:22:02
    接下来是LDR,首先要说的是有两个家伙,他们都叫LDR。 一个是LDR伪指令,一个是LDR指令,名字相同却不是一个东西。 区分的方法就是看第二个参数,如果有等号,就是伪指令。 LDR指令: 例1: ldr r0, 0x12345678 // ...

    接下来是LDR,首先要说的是有两个家伙,他们都叫LDR。
    一个是LDR伪指令,一个是LDR指令,名字相同却不是一个东西。
    区分的方法就是看第二个参数,如果有等号,就是伪指令。

    LDR指令:
    例1: ldr r0, 0x12345678 // 就是把0x12345678这个地址中的值存放到r0中。而mov不能干这个活,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中。
    例2:ldr r0,r1 //表示把r1寄存器中的值放入r0
    例3:ldr r0,[r1] // [r1]表示r1中值对应内存的地址,所以是把r1中的数当作一个地址,把这个地址中的值放入r0.

    LDR伪指令:
    例1(立即数): ldr r0, =0x12345678
    这样,就把0x12345678这个地址写到r0中了。所以,ldr伪指令和mov是比较相似的。只不过mov指令限制了立即数的长度为8位,也就是不能超过512。而ldr伪指令没有这个限制。如果使用ldr伪指令时,后面跟的立即数没有超过8位,那么在实际汇编的时候该ldr伪指令是被转换为mov指令的。
    例2(标号): ldr r0, =_start :将指定标号的值赋给r0
    这里取得的是标号 _start 的绝对地址,这个绝对地址(链接地址)是在链接的时候确定的。它要占用 2 个 32bit的空间,一条是指令,另一条是文字池中存放_start 的绝对地址。
    这里对比一下,adr r0, _start,和 ldr r0, =_start
    它们的目的是一样的,想把标签的地址给r0,区别是一个是相对地址,一个是绝对地址。目的一样,但是得到的结果不一定相同。结果是否相同,就要看这个PC的值,是否和链接地址相同了。

    转载:https://www.cnblogs.com/douzi2/p/4934237.html

    展开全文
  • arm汇编ldr用法

    2016-09-03 10:49:15
    ADS的工程1.2,经过本人调试可用,
  • 汇编LDR、STR

    2015-04-10 18:22:05
    1、LDR R0, [R1]LDR是把R1中的值取出放到寄存器R0中LDR:load R0 from register R12、STR R0, [R1]STR是把R0中的值存入寄存器R1中,STR:store R0 to register R1 STR指令的格式为:STR{条件} 源寄存器,STR指令用...
    1、LDR R0, [R1]
    LDR是把R1中的值取出放到寄存器R0中LDR:load  R0 from register R1
    2、STR R0, [R1]
    STR是把R0中的值存入寄存器R1中,STR:store R0 to register R1
    STR指令的格式为:
    STR{条件}  源寄存器,<存储器地址>
    STR指令用亍从源寄存器中将一个32位的字数据传送到存储器中。该指令在程序设计中比较常
    用,丏寻址方式灵活多样,使用方式可参考指令LDR。

    指令示例:
    STR R0,[R1],#8             ;将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1。
    STR R0,[R1,#8]             ;将R0中的字数据写入以R1+8为地址的存储器中。”


    str     r1, [r0]                       ;将r1寄存器的值,传送到地址值为r0的(存储器)内存中
    展开全文
  • 汇编LDR使用学习

    2014-07-01 19:01:31
    adr adrl ldr伪指令的使用   1、ADR伪指令--- 小范围的地址读取 ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条...

    adr adrl ldr伪指令的使用  转自http://blog.csdn.net/fjiale/article/details/5089090

     

    1、ADR伪指令--- 小范围的地址读取 ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。

    ADR伪指令格式 :ADR{cond} register, expr 地址表达式expr的取值范围: 当地址值是字节对齐时,其取指范围为: +255 ~255B; 当地址值是字对齐时,其取指范围为: -1020 ~ 1020B;

     

     

    2、ADRL伪指令----中等范围的地址读取 ADRL伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中,比ADR伪指令可以读取更大范围的地址。在汇编编译器编译源程序时,ADRL伪指令被编译器替换成两条合适的指令。若不能用两条指令实现,则产生错误,编译失败。

    ADRL伪指令格式:ADRL{cond} register, expr 地址表达式expr的取值范围: 当地址值是字节对齐时,其取指范围为: -64K~64K; 当地址值是字对齐时,其取指范围为: -256K~256K;

     

     

    3、LDR伪指令-----大范围的地址读取 LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇编编译源程序时,LDR伪指令被编译器替换成一条合适的指令。若加载的常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替该LDR伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的LDR指令从文字池读出常量。

    展开全文
  • ARM 汇编 LDR STR MOV

    千次阅读 2012-02-27 14:43:19
    ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。比如想把数据从内存中某处读取到寄存器中,只能使用ldr比如:ldr r0, 0x12345678就是把0x12345678这个地址中的值存放到r0中。...

     ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。比如想把数据从内存中某处读取到寄存器中,只能使用ldr比如:ldr r0, 0x12345678就是把0x12345678这个地址中的值存放到r0中。而mov不能干这个活,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中,这个和x86这种CISC架构的芯片区别最大的地方。x86中没有ldr这种指令,因为x86的mov指令可以将数据从内存中移动到寄存器中。另外还有一个就是ldr伪指令,虽然ldr伪指令和ARM的ldr指令很像,但是作用不太一样。ldr伪指令可以在立即数前加上=,以表示把一个地址写到某寄存器中,比如:ldr r0, =0x12345678这样,就把0x12345678这个地址写到r0中了。所以,ldr伪指令和mov是比较相似的。只不过mov指令限制了立即数的长度为8位,也就是不能超过512。而ldr伪指令没有这个限制。如果使用ldr伪指令时,后面跟的立即数没有超过8位,那么在实际汇编的时候该ldr伪指令是被转换为mov指令的。

    RISC 架构

    MOV 指令 只能在寄存器之间移动数据,或者把立即数移到寄存器中

    LDR :加载指令(将数据从内存中移到寄存器)将数据从内存中移动到寄存器中

    比如:ldr r0, 0x12345678就是把0x12345678这个地址中的值存放到r0中。

    ldr伪指令可以在立即数前加上=,以表示把一个地址写到某寄存器中,比如:ldr r0, =0x12345678这样,就把0x12345678这个地址写到r0中了。所以,ldr伪指令和mov是比较相似的。只不过mov指令限制了立即数的长度为8位,也就是不能超过512。而ldr伪指令没有这个限制。如果使用ldr伪指令时,后面跟的立即数没有超过8位,那么在实际汇编的时候该ldr伪指令是被转换为mov指令的。

    STR :存储指令(将数据存储到内存中) 如  STR  R0,[R1],将R0的值存储到以R1为地址的内存单元中

    CISC架构的芯片

    x86中没有ldr这种指令,因为x86的mov指令可以将数据从内存中移动到寄存器中。

     

    例子:汇编语言对变量赋值

    1.COUNT EQU       0x40003100

    ……

    LDR       R1,=COUNT

    MOV      R0,#0

    STR       R0,[R1]

    COUNT是我们定义的一个变量,地址为0x40003100。这中定义方法在汇编语言中是很常见的,如果使用过单片机的话,应该都熟悉这种用法。

    LDR       R1,=COUNT是将COUNT这个变量的地址,也就是0x40003100放到R1中。

    MOV      R0,#0是将立即数0放到R0中。最后一句STR      R0,[R1]是一个典型的存储指令,将R0中的值放到以R1中的值为地址的存储单元去。实际就是将0放到地址为0x40003100的存储单元中去。可见这三条指令是为了完成对变量COUNT赋值。用三条指令来完成对一个变量的赋值,看起来有点不太舒服。这可能跟ARM的采用RISC有关。

    2.入栈:

    比如:STMFD sp!{R0-R5,LR} 进栈顺序是:过程中SP递减,LR先入栈

    高地址

    LR

    R5

    R4

    ```````

    R0   <-sp

    低地址

    相应的,存储器的低地址的数据对应于编号低的寄存器。这样做可以保证:最后出栈的是lr,把lr赋给pc,实现在程序跳转前完成寄存器的恢复。

    出栈:

    LDMFD   SP!, {R0-R3, R12, PC}^

     

    展开全文
  • 汇编LDR、LDM和STR、STM的区别

    千次阅读 2017-03-17 12:40:38
    (1)LDR:L表示LOAD,LOAD的含义应该理解为:Load from memory into register。下面这条语句就说明的很清楚: LDR R1, [R2] R1——[R2] 就是把R2所指向的存储单元的内容的值(一个memory地址内的值),
  • arm汇编ldr,str,b,bl指令

    千次阅读 2012-09-06 22:46:27
    如果不在MOV范围中,汇编器把该常量放在程序后面,用LDR来读取,PC和该常量的偏移量不能超过 4KB。 然后说一下跳转指令。ARM有两种跳转方式。 (1) mov pc <跳转地址〉 这种向程序计数器PC直接写跳转地址,能...
  • ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。 比如想把数据从内存中某处读取到寄存器中,只能使用ldr 比如: ldr r0, 0x12345678 就是把0x12345678这个地址中的值存放到r0...
  • arm是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。比如想把数据从内存中某处读取到寄存器中,只能使用ldr
  • 本文给大家介绍了ARM汇编ldr与adr的区别。
  • ARM汇编LDR伪指令和LDR指令  (2012-08-02 16:49:25) 转载▼ 标签:  ldr   arm汇编   it 分类: NSN_BspDriver ARM是RISC结构,数据从内存到CPU之间的移动只能...
  • ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。比如想把数据从内存中某处读取到寄存器中,只能使用ldr比如: ldr r0, 0x12345678  就是把0x12345678这个地址中的值存放...
  • LDR 加载指令是 CPU 指令,完成实质性的数据传送。用于从内存中加载数据到寄存器中。 LDR 指令是字加载指令,用于从存储器中将一个 32 位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取 32 位的字数据...
  • 关于汇编指令ldr和str的理解

    千次阅读 2018-03-16 22:01:23
    (1)..ldr指令:(load装载) 外存---&gt;&gt;&gt;内存 ldr 指令传数据(将数据传入寄存器) 无论是否是立即数,都可以进行传 格式:ldr 寄存器,=数字 若数字式立即数:ldr 指令(ldr 寄存器,=数字)和 ...
  • 1,ldr加载指令 LDR指令的格式为: LDR{条件} 目的寄存器, LDR指令用亍从存储器中将一个32位的字数据传送到目的寄存器中。该指令通常用亍从存储器 中读取32位的字数据到通用寄存器,然后对数据迕行处理。当程序...
  • arm中LDR伪指令与LDR加载指令LDR伪指令的形式是“LDR Rn,=expr”。下面举一个例子来说明它的用法。 COUNT EQU 0x40003100 …… ...这中定义方法在汇编语言中是很常见的,如果使用过单片机的话,应该都熟悉这种用法。
  • ARM汇编LDR操作符

    2021-05-09 18:44:15
    LDR指令相关 概念 LDR既是ARM指令、也是ARM伪指令的助记符。 区分方法:带”=”的是伪指令,用”[]”的是指令。 LDR内存访问指令: 语法: 有很多种方式,如:immediate offset/register offset等等,访问的是 ...
  • ARM汇编-LDR指令学习

    2015-04-26 15:08:39
    arm汇编ldr加载指令,ldr伪指令  1,ldr加载指令 LDR指令的格式为: LDR{条件} 目的寄存器, LDR指令用亍从存储器中将一个32位的字数据传送到目的寄存器中。该指令通常用亍从存储器中读取32位的字...
  • 汇编指令ldr str stm ldm

    2020-08-16 15:39:37
    ldr命令:把数据从内存加载到寄存器 ldr r0, =addr ;r0 = addr ldr r1, [r0] ; r1 = *r0 ldr r1, [r0, #4] ; r1 = *(r0+4) ldr r1, [r0, #4] ! ; r1 = *(r0+4);r0=r0+4; ldr r1, [r0], #4 ; r1 = *(r0);r0=r0+4; ...
  • arm汇编指令ldr用法总结

    万次阅读 2016-01-02 12:03:20
    一、ldr的两种用法:  1、 ldr pc, =label . 即把label后的数据或者指令的运行地址赋值为pc。运行地址 = 链接地址 + 这些数据或指令相对于程序起始地址的偏移。  2、 ldr pc, label, 即把label后的数据或者指令...
  • 汇编ldr 和 str指令

    2019-08-08 00:25:46
    ldr命令:把数据从内存加载到寄存器。 ldr r0, =addr ;r0 = addr ldr r1, [r0] ; r1 = *r0 ldr r1, [r0, #4] ; r1 = *(r0+4) ldr r1, [r0, #4] ! ; r1 = *(r0+4);r0=r0+4; ldr r1, [r0], #4 ; r1 = *(r0);r0=r0+...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,074
精华内容 6,829
关键字:

汇编ldr