汇编指令-str存储指令(4)

str -(Store Register)存储指令

格式:

str{条件}  源寄存器,<存储器地址> 将源寄存器中数据存到存储器地址中。 

实例1:

str   r1,[r2]        ; 将r1中的值存到r2所指定的地址中

str  r1,[r2,#4]   ;将r1中的值存到r2+4所指定的地址中

str   r1,[r2],#4  ;将r1中的值存到r2所指定的地址中, 同时r2=r2+4

实例2(以u-boot中lowlevel_init函数的一段代码说明str指令的用法):

ldr r0, =SMRDATA                                 //将SMRDATA的首地址(0x33F806C8)存到r0中                          ldr r1, _TEXT_BASE                              //r1等于_TEXT_BASE内容,也就是TEXT_BASE(0x3ff80000) sub r0, r0, r1                                          //计算以0x0000 0000为标准的相对地址,因为现在程序运行在起始地址为0x0000 0000的地方 ldr r1, =BWSCON                                 //将BWSCON所指向的首地址值存到r1中 (第一个存储器寄存器首地址) add r2, r0, #13*4                                   //每个寄存器4字节,r2=r0+13*4=最后一个存储器寄存器+4 0:  ldr r3, [r0], #4                                       /将r0的内容存到r3的内容中,同时r0地址+=4;

str r3, [r1], #4                                      //将r3的内容存到r1所指的地址中,同时r1地址+=4; cmp r2, r0                                           //  判断r2和r0 bne 0b                                                //不等则跳转到第6行继续执行

mov pc, lr                                            //跳回到返回地址中继续执行

SMRDATA:

.word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28)) //设置每个BWSCON,注意BANK0由硬件连线决定了 .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC)) .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC)) .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC)) .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC)) .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC)) .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC)) //设置BANKCON0~BANKCON5 .word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN)) .word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN)) //设置BANKCON6~BANKCON7 .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT) //设置REFRESH,在S3C2440中11~17位是保留的,也即(Tchr<<16)无意义 .word 0xb1 //设置BANKSIZE,对于容量可以设置大写,多出来的空内存会被自动检测出来 .word 0x30 //设置MRSRB6 .word 0x30 //设置MRSRB7

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏彭湖湾的编程世界

【react】利用shouldComponentUpdate钩子函数优化react性能以及引入immutable库的必要性

凡是参阅过react官方英文文档的童鞋大体上都能知道对于一个组件来说,其state的改变(调用this.setState()方法)以及从父组件接受的props发...

21011
来自专栏野路子程序员

Thinkphp修改一句代码,使得foreach标签支持对象,增加变量[数组对象]混合解析法!

2798
来自专栏何俊林

Android开发基础规范(一)

【小提醒】阅读本文约耗时3分钟左右。 前言:Android中一些开发规范,避免给自己和别人少留坑。 一、工程相关 1.1 工程结构 当进行提交代码的工作时,工...

1777
来自专栏蛋未明的专栏

json_decode在php中的一些无法解析的字符串

1635
来自专栏向治洪

浅谈前端JavaScript编程风格

前言 多家公司和组织已经公开了它们的风格规范,具体可参阅jscs.info,下面的内容主要参考了Airbnb的JavaScript风格规范。当然还有google...

1927
来自专栏androidBlog

Android 代码混淆语法讲解及常用模板

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/de...

1112
来自专栏Scott_Mr 个人专栏

React Native 系列(一) -- JS入门知识

34610
来自专栏开源优测

移动测试Appium之API手册

移动测试Appium之API手册 前言 本文对Appium Python Client中webdriver.py代码进行分析说明。 笔者使用python3.6版...

3409
来自专栏向治洪

Swift 4.0 新特性

WWDC 2017 带来了很多惊喜,在这次大会上,Swift 4 也伴随着 Xcode 9 测试版来到了我们的面前,虽然正式版要8月底9月初才会公布,但很多强大...

2059
来自专栏快乐八哥

委托(一个主窗体统计多个从窗体的按钮单击的次数)

  最近在学习金老师的《.NET2.0面向对象编程揭秘》,学到了13章,委托、事件驱动和异步调用。书上有个试一试,要求:利用委托,达到一个主窗体统计多个从窗体...

1818

扫码关注云+社区