ldr,str,ldm,stm的命名规律:

这几个指令命名看起来不易记住,现在找找规律。

指令 样本 效果 归纳名称解释
ldr Rd,addressing ldr r1,[r0] addressing to Rd [mem to reg] load to register
str Rd,addressing str r1,[r0] Rd ro addressing [reg to mem] store register
ldm Rn,reglist ldmfd sp!,{r0-r7,pc} *sp to reglist[mem to reg] load to reglist
stm Rn,reglist stmfd sp!,{r0-r7,lr} reglist to *sp[reg to mem] store reglist

因此ldr,str,ldm,stm的命名均是以reg寄存器为主体,ld表示load装载寄存器,st表示store保存寄存器。

装载的源头、保存的去处就是内存了。

ldr同时还是伪指令,这时必然形为:  ldr reg, =expr 。expr可以是一个32位立即数,也可以是一个标号。

ldr意为大范围地址读取指令,并且读的是基于pc的相对偏移的地址值。

adr为小范围地址读取伪指令,将基于PC相对偏移的地址值读取到寄存器中。adr register,exper

可用于进行程序跳转,也可用于在数据池中查找数据。

adr r0,DispTab   ;加载转换表地址到r0。
; DispTab编译后是一个固定的地址,这个地址后的空间存放了N个单位的数据。程序运行起来后的地址和编译地址或有不同。这个指令加载的是运行时的地址。
ldrb r1,[r0,r2] ;以r2的值为偏移量,读取转化表中的数据到r1中。 .... DispTab  
  DCB 0xc0,0xf9,0xa4,0xb0

adlr为中范围地址读取伪指令,比adr可读取的地址范围更大。

;=================
; Memory control
;=================
BWSCON EQU 0x48000000 ;Bus width & wait status
BANKCON0 EQU 0x48000004 ;Boot ROM control
BANKCON1 EQU 0x48000008 ;BANK1 control
BANKCON2 EQU 0x4800000c ;BANK2 control
BANKCON3 EQU 0x48000010 ;BANK3 control
BANKCON4 EQU 0x48000014 ;BANK4 control
BANKCON5 EQU 0x48000018 ;BANK5 control
BANKCON6 EQU 0x4800001c ;BANK6 control
BANKCON7 EQU 0x48000020 ;BANK7 control
REFRESH EQU 0x48000024 ;DRAM/SDRAM refresh
BANKSIZE EQU 0x48000028 ;Flexible Bank Size
MRSRB6 EQU 0x4800002c ;Mode register set for SDRAM Bank6
MRSRB7 EQU 0x48000030 ;Mode register set for SDRAM Bank7
;要设置的mem控制寄存器,共13个。
;*******************************************
;
;in init.s   .
  .
  .
SetMemController
  adrl    r0, SMRDATA
ldr r1,=BWSCON ;BWSCON Address
add r2, r0, # ;End address of SMRDATA ldr r3, [r0], # ;unsigned int *pValue = (unsigned int*)SMRDATA ; r3 = pValue[0] , pValue+=1;
str r3, [r1], # ;unsigned int *reg_addr = (unsigned int*)BWSCON ; *reg_addr = r3 ; reg_addr+=1;
cmp r2, r0 ;if(pValue != SMRDATA+52) {loop };
bne %B0
;end of SetMemController
  .
  .
  .
LTORG
SMRDATA DATA
; Memory configuration should be optimized for best performance
; The following parameter is not optimized.
; Memory access cycle parameter strategy
; 1) The memory settings is safe parameters even at HCLK=75Mhz.
; 2) SDRAM refresh period is for HCLK<=75Mhz.
DCD (+(B1_BWSCON<<)+(B2_BWSCON<<)+(B3_BWSCON<<)+(B4_BWSCON<<)+(B5_BWSCON<<)+(B6_BWSCON<<)+(B7_BWSCON<<))
DCD ((B0_Tacs<<)+(B0_Tcos<<)+(B0_Tacc<<)+(B0_Tcoh<<)+(B0_Tah<<)+(B0_Tacp<<)+(B0_PMC)) ;GCS0
DCD ((B1_Tacs<<)+(B1_Tcos<<)+(B1_Tacc<<)+(B1_Tcoh<<)+(B1_Tah<<)+(B1_Tacp<<)+(B1_PMC)) ;GCS1
DCD ((B2_Tacs<<)+(B2_Tcos<<)+(B2_Tacc<<)+(B2_Tcoh<<)+(B2_Tah<<)+(B2_Tacp<<)+(B2_PMC)) ;GCS2
DCD ((B3_Tacs<<)+(B3_Tcos<<)+(B3_Tacc<<)+(B3_Tcoh<<)+(B3_Tah<<)+(B3_Tacp<<)+(B3_PMC)) ;GCS3
DCD ((B4_Tacs<<)+(B4_Tcos<<)+(B4_Tacc<<)+(B4_Tcoh<<)+(B4_Tah<<)+(B4_Tacp<<)+(B4_PMC)) ;GCS4
DCD ((B5_Tacs<<)+(B5_Tcos<<)+(B5_Tacc<<)+(B5_Tcoh<<)+(B5_Tah<<)+(B5_Tacp<<)+(B5_PMC)) ;GCS5
DCD ((B6_MT<<)+(B6_Trcd<<)+(B6_SCAN)) ;GCS6
DCD ((B7_MT<<)+(B7_Trcd<<)+(B7_SCAN)) ;GCS7
DCD ((REFEN<<)+(TREFMD<<)+(Trp<<)+(Tsrc<<)+(Tchr<<)+REFCNT)
DCD 0x32 ;SCLK power saving mode, BANKSIZE 128M/128M
DCD 0x20 ;MRSR6 CL=2clk
DCD 0x20 ;MRSR7 CL=2clk
;mem设置参数值的数据池。共13*4bytes。
;*********************************************************   .
  .
  .

arm汇编:ldr,str,ldm,stm,伪指令ldr的更多相关文章

  1. ARM LDR/STR, LDM/STM 指令

    这里比较下容易混淆的四条指令,已经在这4条指令的混淆上花费了很多精力,现在做个小结,LDR,STR,LDM,STM这四条指令, 关于LDM和STM的说明,见另外一个说明文件,说明了这两个文件用于栈操作 ...

  2. arm汇编指令--str ldr

    STR :把寄存器中的字保存到存储器(寄存器到存储器) 示例: STR R0,[R1],#8             :将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1.STR ...

  3. ARM汇编指令集3

    常用ARM指令1:数据处理指令 •数据传输指令  mov mvn       mov r1,  r0        @两个寄存器之间数据传递       mov       r1,  #0xff   ...

  4. ARM汇编1

    一. 指令和伪指令 1.1. 指令 a. (汇编)指令是CPU机器指令的助记符,经过编译后会得到一串10组成的机器码,可以由CPU读取执行. 1.2. 伪指令 b. (汇编)伪指令本质上不是指令(只是 ...

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

    转自:http://blog.csdn.net/ce123_zhouwei/article/details/7182756 ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成, ...

  6. ARM汇编初探---汇编代码中都有哪几类指令---ARM伪指令介绍

    要学习一个东西首先要把概念搞清楚,以下仅仅是自己的一些关于汇编的理解. 可运行文件里的01码是机器码,机器码不等于汇编码,尽管机器码能够非常easy翻译成汇编码. 汇编码中包括非常多汇编指令.伪指令和 ...

  7. mov和ldr/str的区别

    ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令.比如想把数据从内存中某处读取到寄存器中,只能使用ldr比如:ldr r0, 0x12345678就 ...

  8. 【嵌入式开发】 ARM 汇编 (指令分类 | 伪指令 | 协处理器访问指令)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42408137 转载请著名出处 本博客相关文档下载 :  -- AR ...

  9. 常用ARM汇编指令

    常用ARM汇编指令 [日期:2012-07-14] 来源:Linux社区  作者:xuyuanfan77 [字体:大 中 小]     在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时初 ...

随机推荐

  1. Xvfb+YSlow+ShowSlow搭建前端性能测试框架 - 前端技术 | TaoBaoUED

    Xvfb+YSlow+ShowSlow搭建前端性能测试框架 - 前端技术 | TaoBaoUED Xvfb+YSlow+ShowSlow搭建前端性能测试框架 作者:黑三 | 时间:2010-07-07 ...

  2. JavaScript中的事件处理程序

    JavaScript和HTML之间的交互是通过事件实现的.事件,就是文档或者浏览器窗口中发生的一些特定的交互瞬间.可以使用事件处理程序来预订事件,以便在事件发生的时候执行响应的代码.这种观察者模式的模 ...

  3. Maven导入时,Cannot change version of project facet Dynamic Web Module to 3.0.

    今天手贱,在eclipse里面把项目删掉了,重新maven导入时,报出Cannot change version of project facet Dynamic Web Module to 3.0. ...

  4. 数据层使用DBHelper.dll来减少工作量

    目前在需求确定了以后进行开发的步骤一般是这样的:建立数据表,建立model,构建数据操作层,最后在页面中进行调用.关于数据操作层,因为大量的操作都集中在增加.更新.删除等简易操作,而我之前的写法是每次 ...

  5. 使用JS进行pc端、手机端判断

     <script type="text/javascript">            (function(){                var ua = nav ...

  6. 数组排序-Objectivec

    发表于昨天(23:33)(2013-11-03 23:33) ,已有15次阅读 ,共0个评论 摘要: 总结OC中数组排序3种方法:sortedArrayUsingSelector:;sortedArr ...

  7. 数据切分——Atlas读写分离Mysql集群的搭建

    关于数据切分的原理可以参见博客: http://blog.csdn.net/jhq0113/article/details/44226789 关于Atlas的介绍可以参见博客: http://blog ...

  8. 谷歌三大核心技术(三)Google BigTable中文版

    谷歌三大核心技术(三)Google BigTable中文版 Bigtable:一个分布式的结构化数据存储系统 译者:alex 摘要 Bigtable是一个分布式的结构化数据存储系统,它被设计用来处理海 ...

  9. Centos 5.5 安装Mysql5.5过程

    这几天在centos下装mysql,这里记录一下安装的过程,方便以后查阅 Mysql5.5.37安装须要cmake,5.6版本号開始都须要cmake来编译,5.5以后的版本号应该也要装这个. 安装cm ...

  10. C#个人笔记

    1.扩展方法:类名前面加static ,方法参数前 加this,如:对string类进行扩展 public static class string    {        public static ...