arm汇编:ldr,str,ldm,stm,伪指令ldr
时间:11-20
来源:互联网
点击:
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。;********************************************************* . . .
arm汇编ldrstrldmstm伪指令ld 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)