您的位置 首页 IC

arm汇编:ldr,str,ldm,stm,伪指令ldr

ldr,str,ldm,stm的命名规律:这几个指令命名看起来不易记住,现在找找规律。指令样本效果归纳名称解释ldrRd,addressingldrr1,[r0]addre…

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  0x48     ;Bus width & wait statusBANKCON0    EQU  0x48004     ;Boot ROM controlBANKCON1    EQU  0x48008     ;BANK1 controlBANKCON2    EQU  0x4800c     ;BANK2 controlBANKCON3    EQU  0x48010     ;BANK3 controlBANKCON4    EQU  0x48014     ;BANK4 controlBANKCON5    EQU  0x48018     ;BANK5 controlBANKCON6    EQU  0x4801c     ;BANK6 controlBANKCON7    EQU  0x48020     ;BANK7 controlREFRESH     EQU  0x48024     ;DRAM/SDRAM refreshBANKSIZE    EQU  0x48028     ;Flexible Bank SizeMRSRB6      EQU  0x4802c     ;Mode register set for SDRAM Bank6MRSRB7      EQU  0x48030     ;Mode register set for SDRAM Bank7;要设置的mem操控寄存器,共13个。;*******************************************;;in init.s  .
  .  .SetMemController
  adrl    r0, SMRDATA    ldr    r1,=BWSCON    ;BWSCON Addressadd    r2, r0, #52    ;End address of SMRDATA0ldr    r3, [r0], #4    ;unsigned int *pValue = (unsigned int*)SMRDATA ;  r3 = pValue[0] , pValue+=1;str    r3, [r1], #4    ;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
  .
  .  .LTORGSMRDATA 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 (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))DCD ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))   ;GCS0DCD ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))   ;GCS1DCD ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))   ;GCS2DCD ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))   ;GCS3DCD ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))   ;GCS4DCD ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))   ;GCS5DCD ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))    ;GCS6DCD ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))    ;GCS7DCD ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Tsrc<<18)+(Tchr<<16)+REFCNT)DCD 0x32        ;SCLK power saving mode, BANKSIZE 128M/128MDCD 0x20        ;MRSR6 CL=2clkDCD 0x20        ;MRSR7 CL=2clk
;mem设置参数值的数据池。共13*4bytes。;*********************************************************  .  .  .

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/264070.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部