首页 > 编程知识 正文

ldr指令和ldr伪指令有什么不同,arm汇编中ldr的用法

时间:2023-05-05 05:20:06 阅读:44258 作者:889

虽然在ARM组件中经常使用LDR,但我们来总结一下其使用方法。 1 .存储器访问指令LDR指令可以从存储器向寄存器读取数据。

将ldr r1、[r2,#4] /*地址r2 4的存储单元数据读出到r1,将*/ldr r1、[r2]、#4 /*地址r2的存储单元数据读出到r1,r2=r2 4*/2 .

ldr r1,=label label :获取label的绝对地址并将其分配给r1。 让我们来看看以下两个例子

例1 LDR R0,=0x56000010 MOV R1,#0x00004000STR R1,[R0]以上的三个汇编语句的功能是将0x00004000的值存储在以0x56000010为地址的存储单元中。

其反汇编代码如下

0: e59f0044 ldr r0,[pc,#68];0x4c 4: e3a01901 mov r1,#16384;0x4000 8: e5801000 str r1,[R0].4c:56000010undefined可以看到LDR R0,=0x56000010被转换为ldr指令并执行

例2 LDR R0,=0x56000000 MOV R1,#0x00004000STR R1,[R0]其反汇编代码如下

0: e3a00456 mov r0,#1442840576;0x56000000 4: e3a01901 mov r1,#16384;0x4000 8: e5801000 str r1,[r0]其中LDR R0,=0x56000000被转换为mov r0,#1442840576

根据这两个例子,可以看出,LDR伪指令基于地址值来确定要转换为LDR指令或MOV指令来执行。

在u-boot中使用_ text _ base :wordtext _ base.globl low level _ init low level _ init 3360/* memorycontrolconfigure make */ldr r0,=smRDATA/*smRDATA的绝对地址,即链接地址,0x33F8xxxx */ldr r1, _TEXT_BASE /*读取_TEXT_BASE的内容,即_TEXT_BASE r1/*smrdata的执行地址,即当前PC的地址*/ldr r1,=bws con /。 #13*40: /*使用数据池中的数字*/ldr r3、[r0]、#4 str r3、[r1]、#4 cmp r2、r0bn e0b/* everythingisfinenow */lr.lt org/* theliteralpoolsorigin */sm rdata :word (0(B1 _ bws con4) B2_BWSCON8) B3_BWSCON12 ) B4 (B7 (B1_Tcoh6 ) B1_Tah4 ) B1_Tacp2) B1_PMC ).word ) ) B2_TACS13 ) B2_Tcos11 ) B2_Tacc8 ) B2 (B3 _ TCO ) TACP2) ).word(B5_TACS13 ) B5_Tcos11 ) B5_Tacc8 ) B5_Tcoh6 ) B5_Tah4 ) b5 _ tacp2(b5 _ PMC ) ) .

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。