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

    千次阅读 2018-12-14 22:38:37
    LDR指令的格式为: LDR{条件} 目的寄存器,<存储器地址> LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取32位的字数据到通用寄存器,然后对数据进行处理...

    LDR指令的格式为:

    LDR{条件} 目的寄存器,<存储器地址>

    LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取32位的字数据到通用寄存器,然后对数据进行处理。当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。该指令在程序设计中比较常用,且寻址方式灵活多样,请读者认真掌握。

    指令示例:

    LDR R0,[R1] ;将存储器地址为R1的字数据读入寄存器R0。

    LDR R0,[R1,R2] ;将存储器地址为R1+R2的字数据读入寄存器R0。

    LDR R0,[R1,#8] ;将存储器地址为R1+8的字数据读入寄存器R0。

    LDR R0,[R1,R2]! ;将存储器地址为R1+R2的字数据读入寄存器R0,并将新地址R1+R2写入R1。

    LDR R0,[R1,#8]! ;将存储器地址为R1+8的字数据读入寄存器R0,并将新地址R1+8写入R1。

    LDR R0,[R1],R2 ;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2写入R1。

    LDR R0,[R1,R2,LSL#2]! ;将存储器地址为R1+R2×4的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。

    LDRR0,[R1],R2,LSL#2 ;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。”

    http://www.pczpg.com/a/2010/0607/11062.html

    ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。

    比如想把数据从内存中某处读取到寄存器中,只能使用ldr

    比如:

    ldr r0, 0x12345678

    就是把0x12345678这个地址中的值存放到r0中。

    展开全文
  • LDR指令和LDR伪指令区别 芯创电子XC2017-12-27 22:02:411724收藏3 ARM指令集中,LDR通常都是作加载指令,但是它也可以作伪指令。 初学者一般不会注意到它们的区别,其实在嵌入式开发过程中,这两条指令时非常...

    LDR指令和LDR伪指令区别

    芯创电子XC 2017-12-27 22:02:41  1724  收藏 3

    ARM指令集中,LDR通常都是作加载指令,但是它也可以作伪指令。

    初学者一般不会注意到它们的区别,其实在嵌入式开发过程中,这两条指令时非常常用的!我们应该了解他们的区别。

    LDR伪指令的形式是“LDR Rn,=expr”。作用是装载一个32bit常数或一个地址到寄存器
    下面举一个例子来说明它的用法。

    COUNT EQU 0x56000054
    LDR R1,=COUNT
    MOV R0,#0
    STR R0,[R1]

    COUNT是我们定义的一个符号,  值为0x56000054。

    LDR R1,=COUNT 是将COUNT这个符号的值,也就是0x56000054放到R1中。
    MOV R0,#0是将立即数0放到R0中。

    STR R0,[R1] 是一个典型的存储指令,将R0中的值放到以R1中的值为地址的存储单元去。
    实际就是将0放到地址为0x56000054的存储单元中去。
    可见这三条指令是为了完成对变量COUNT赋值。

    再举一个例子
    LDR R1,=COUNT ;这条伪指令,是将COUNT的地址赋给R1
    LDR R0,[R1] ;将COUNT的值赋给R0

    ARM是RISC结构,数据从内存到CPU之间的移动只能通过LDR/STR指令来完成。 
    比如想把数据从内存中某处读取到寄存器中,只能使用ldr 
    比如: 
    ldr r0, 0x12345678 ;就是把0x12345678这个地址中的值存放到r0中

    而mov不能干这个活,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中,这个和x86这种CISC架构的芯片区别最大的地方。 
    x86中没有ldr这种指令,因为x86的mov指令可以将数据从内存中移动到寄存器中。 
    MOV是从一个寄存器或者移位的寄存器或者立即数的值传递到另外一个寄存器。
    从本质上是寄存器到寄存器的传递,为什么会有立即数,其实也是有限制的立即数,不是所有立即数都可以传递的
    这个立即数要符合一个8位数循环右移偶数位的取值。
    原因是,MOV本身就是一条32bit指令,除了指令码本身,它不可能再带一个可以表示32bit的数字,所以用了其中的12bit来表示立即数,其中4bit表示移位的位数(循环右移,且数值x2),8bit用来表示要移位的一个基数。

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

     

    转载http://www.eeworld.com.cn/mcu/article_2016051126271.html

    展开全文
  • LDR指令与LDR伪指令

    2014-03-13 10:56:52
    ARMv5以上的架构都提供LDR指令和LDR伪指令 LDR指令和LDR伪指令所在参考1中的章节位置如下: 2、二者的区别就是LDR伪指令带等于号 = ,而LDR 非伪指令不带等于号 LDR r8,[r10] 以及 LDR

    参考:

    1、Realview Assembler User Guide


    正文:

    1、简介

    ARMv5以上的架构都提供LDR指令和LDR伪指令


    LDR指令和LDR伪指令所在参考1中的章节位置如下:




    2、二者的区别就是LDR伪指令带等于号 = ,而LDR 非伪指令不带等于号

    LDR     r8,[r10]   

    以及

            LDR     r2,=place    ; loads the address of
                                 ; place into r2
                                 ; =>  LDR r2,[pc,offset_to_litpool]
                                 ;     ...
                                 ;     litpool DCD place
    

    展开全文
  • ARM汇编中LDR伪指令和LDR指令

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                   

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

               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指令的。
               
             
            其实ldr指令可以装载一个32bit立即数的说法并不确切,因为实际上并不是这一条语句装载了一个32bit立即数,真正的汇编代码是将某个地址的值传递给r1,就是说需要一个地址存放0x12345678这个立即数。而且如果这个立即数可以用mov指令的形式来表达,会被编译器实际用mov来代替比如:
    ldr r1,=0x10
    会变成
    mov r1,#0x10 

            综述所述:ldr伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇编编译源程序时,ldr伪指令被编译器替换成一条合适的指令。若加载的常数未超出mov或mvn的范围,则使用mov或mvn指令代替该ldr伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的ldr指令从文字池读出常量。
            ldr伪指令和ldr指令不是一个同东西。
               

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    展开全文
  • 2.LDR指令 就是将地址中的值存放到寄存器中 比如想把数据从内存中某处读取到寄存器中,只能使用ldr,比如: ldr r0, 0x12345678 就是把0x12345678这个地址中的值存放到r0中。 而mov不能干这个活,mov只能在寄存器...
  • 汇编LDR指令

    万次阅读 2019-05-29 20:22:02
    一个是LDR伪指令,一个是LDR指令,名字相同却不是一个东西。 区分的方法就是看第二个参数,如果有等号,就是伪指令。 LDR指令: 例1: ldr r0, 0x12345678 // 就是把0x12345678这个地址中的值存放到r0中。而mov不能...
  • LDR 加载指令是 CPU 指令,完成实质性的数据传送。用于从内存中加载数据到寄存器中。 LDR 指令是字加载指令,用于从存储器中将一个 32 位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取 32 位的字数据...
  • arm指令--ldr指令

    2020-01-19 17:45:25
    ldr指令 ldr作为指令、伪指令在arm汇编中。 ldr指令格式: LDR{条件} 目的寄存器,<存储器地址> LDR R0,[R1] ;将存储器地址为R1的字数据读入寄存器R0。 LDR R0,[R1,R2] ;将存储器地址为R1+R2的字数据...
  • arm ldr 指令

    2019-09-24 09:58:38
    ldr 指令格式:(读取概念) ldr{条件} 1目的寄存器,2存储器地址 eg: ldr r0,[r1]; 把r1中数据值读取到r0中; ldr r0,[r1,r2];把r1+r2的数值 读取到r0中; ldr r0,[r1,#1024]把 r1+1024的数值读取到r0中; LDR ...
  • 一、 ldr指令的两种用法: 1、 ldr pc,=label 。 即把label标号后的数据或者指令的运行地址赋值为pc。运行地址 = 链接地址 + 这些数据或指令相对于程序起始地址的偏移。 2、 ldr pc, label。 即把label后的数据...
  • LDR指令和LDR伪指令

    2010-10-18 10:23:00
    LDR指令和LDR伪指令热3已有 1930 次阅读 2009-10-19 15:06 标签: 汇编 指令  ARM指令集中,LDR通常都是作加载指令,但是它也可以作伪指令。 <br />初学者一般不会注意到它们的区别,其实在嵌入式开发...
  • LDR作为ARM的伪指令,作用:另外还有一个就是ldr伪指令,虽然ldr伪指令和ARM的ldr指令很像,但是作用不太一样。ldr伪指令可以在立即数前加上=,以表示把一个地址写到某寄存器中,比如: ldr r0, =0x12345678

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,382
精华内容 552
关键字:

ldr指令