ARM的STRB和LDRB指令分析
一、SDRAM
1、存储结构
SDRAM的内部是一个存储阵列。阵列就如同表格一样,将数据“填”进去。在数据读写时和表格的检索原理一样,先指定一个行(Row),再指定一个列 (Column),我们就可以准确地找到所需要的单元格,这就是内存芯片寻址的基本原理

这个单元格(存储阵列)就叫逻辑 Bank(Logical Bank,下文简称 L-Bank)。 由于技术、成本等原因,不可能只做一个全容量的 L-Bank,而且最重要的是,由于 SDRAM的工作原理限制,单一的 L-Ban k将会造成非常严重的寻址冲突,大幅降低内存效率。所以人们在 SDRAM内部分割成多个 L-Bank,目前基本都是 4个(这也是SDRAM规范中的最高L-Bank数量),由此可见,在进行寻址时就要先确定是哪个 L-Bank,然后在这个选定的 L-Bank中选择相应的行与列进行寻址。
2、引脚说明

DQM可以阻塞其对应的空间长度(8位)的有效性。例如,当LDQM有效时,如果输出时,将输出的[7,0]位置成高阻态;如果输入,则阻碍[7,0]的输入,也就是不能修改[7,0]的数据。当UDQM有效时,如果输出时,将输出的[15,8]位置成高阻态;如果输入,则阻碍[15,8]的输入,也就是不能修改[15,8]的数据。
3、S3C2440与内存相关的硬件电路图
SDRAM以两片32M的K4S561632构成64M的RAM存储为例进行说明。


4、对SDRAM访问的步骤
(1) CPU发出片选信号nSCS0有效,选中SDRAM芯片
(2) SDRAM中有4个L-Bank,需要2根地址信号选中一个,利用的是ADDR24和ADDR25
(3) 先后发出行地址信号和列地址信号。K4S561632的行地址数是13,列地址数是9。所以,当nSRAS有效时,ADDR2~ADDR14上发出的是行地址信号,它对应32位地址空间的bit[23:11];当nSCAS有效时,ADDR2~ADDR10上发出的是列地址信号,它对应32位地址空间的bit[10:2]。由于BANK6以32位宽度外接SDRAM,ADDR0、ADDR1恒为0,不参与译码。
(4) 找到存储单元后,被选中的芯片就要进行统一的数据传输了。
二、分析ldrb/strb指令
1、S3C2440有关ldrb/strb指令的描述

2、LDRB
ldrb指令会根据提供的地址,从数据总线中选择需要的字节。例如:
ldrb r0,0x30000000取的是0x30000000这个字的[7,0]
ldrb r0,0x30000001取的是0x30000000这个字的[15,8]
ldrb r0,0x30000002取的是0x30000000这个字的[23,16]
ldrb r0,0x30000003取的是0x30000000这个字的[31,24]
也就是说ldrb指令会先把0x30000000这个地址的字取出来,然后根据ldrb指令提供的地址选择合适的字节。
ldrb指令接下来要把取到的数据放在目的寄存器的低8位,然后将高24位填充为0。
3、STRB
STRB指令首先数据总线(整个字的四个字节)都填充上要写入的一个字节的数据。然后,外部存储系统激活合适的字节存储子系统去存储这一个字节的数据。
“外部存储系统激活合适的字节存储子系统去存储这一个字节的数据”这句话,我是这样理解的,以"strb r3,[r4]"为例进行说明。
假设r3 = 0x12 ,r4 = 0x30000001
STRB指令首先数据总线上都填充上要写入的一个字节的数据,也就是数据总线为0x12121212,访问的字地址是0x30000000。因为要存储一个字节的数据到0x30000001,而0x30000000这个字的其他单元不能更改,所以就将DQM0、DQM2、DQM3都有效,而不屏蔽DQM。这样在写入的过程中,只将0x12写入到0x30000001单元中,而其他三个单元不修改,从而完成strb指令规定的任务。
参考资料:编译器对变量存储地址的处理
ARM的STRB和LDRB指令分析的更多相关文章
- ARM上电启动及Uboot代码分析
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qianlong4526888/article/details/27698707 注意:由于文档是去年 ...
- [转]ARM平台下独占访问指令LDREX和STREX
参考:ARM平台下独占访问指令LDREX和STREX的原理与使用详解 全文转载如下: 为了实现线程间同步,一般都要在执行关键代码段之前加互斥(Mutex)锁,且在执行完关键代码段之后解锁.为了实现所谓 ...
- 实践中的Git常用指令分析
从工作开始,一直都在使用为知笔记(作为程序员需要知道的内容很多---不需要很深入理解,一段时不使用的东西可能就会忘记).但本周一同步不同PC端时,了解到为知会在2017/1/1开始收费! 既然收费了, ...
- [转帖]Linux中的find(-atime、-ctime、-mtime)指令分析
Linux中的find(-atime.-ctime.-mtime)指令分析 https://www.cnblogs.com/zhangjinjin01/p/5505970.html https://w ...
- 浅析ARM协处理器CP15寄存器有关指令:MCR\MRC
ref:http://blog.csdn.net/gameit/article/details/13169405 背景: 在uboot中,start.s中涉及到了 CP15 的有关操作.查阅有关资料, ...
- Linux中的find(-atime、-ctime、-mtime)指令分析
本篇主要对find -atime(-ctime..mtime)指令的用法.参数.运行情况进行分析 用法: find . {-atime/-ctime/-mtime/-amin/-cmin/-mmin} ...
- linux性能指令分析进阶篇
作为刚刚走入测试领域的我来说,对性能测试了解的也不是很深,只不过自己平常一直在收集资料,性能测试也没有那么神秘,也请广大测试小白不要陷入误区,其实性能测试跟功能测试关系并不大,即使你做10年功能测试, ...
- ARM学习笔记7——乘法指令
ARM乘法指令完成两个数据的乘法,两个32位二进制数相乘的结果是64位的4积. 其中: 1.“RadHi:RdLo”是由RdHi(最高有效32位)和RdLo(最低有效32位)链接形成的64位数,“[3 ...
- Nginx源码研究七:nginx的location指令分析
在nginx的配置文件nginx.conf中,我们在配置server的时候,会配置一下location指令,这个location指令是提供给用户来配置对于符合指令的http请求,采用该指令内部的处理方 ...
随机推荐
- 最简单的基于FFMPEG的视频编码器(YUV编码为H.264)
本文介绍一个最简单的基于FFMPEG的视频编码器.该编码器实现了YUV420P的像素数据编码为H.264的压缩编码数据.编码器代码十分简单,可是每一行代码都非常重要,适合好好研究一下.弄清楚了本代码也 ...
- AFNetworking 新版本3.0的迁移
AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持.如果项目以前使用过这些API,那么我们需要升级到基于 NSURLSession 的API的AFNet ...
- Windows Python 2.7 安装 Numpy
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/ShiJiaqi. http://www.cnblogs.com/shijiaqi1066/p/4846093. ...
- fseek()
原文地址:fseek()作者:xiaoxin 意思是把文件指针指向文件的开头 fseek 函数名: fseek 功 能: 重定位流上的文件指针 用 法: int fseek(FILE *s ...
- jQuery 取值、赋值的基本方法【转藏】
/*获得TEXT.AREATEXT的值*/ var textval = $("#text_id").attr("value"); //或者 var textva ...
- jq版本更新后无live函数的处理.
之前你的代码如果是$("#ele").live("click", function() { //...});现在要写成$("#ele" ...
- 微信公众平台开发(一)——接入指南(asp.net)
第一步:申请消息接口 在公众平台网站的高级功能 – 开发模式页,点击“成为开发者”按钮,填写URL和Token,其中URL是开发者用来接收微信服务器数据的接口URL.Token可由开发者任意填写,用作 ...
- Python编写相关注意事项
1.# -*- coding: utf-8 -*-代码首部添加这个,不然会报Non_ASCII charater错误 python闭包:实际应用场景1.保持闭包运行完后的环境: 2.根据外部作用域的局 ...
- [HttpException (0x80004005): Failed to Execute URL.]之画蛇添足之痛
最近很悲惨,发布的一个mvc站点,所有的静态内容,如js.css.图片都不能正常加载,服务器给出的响应是一个如下的异常黄页: Server Error in '/ua' Application.Fai ...
- 利用SpringMVC参数绑定实现动态插入数据
javabean代码:public class User { private String firstName; private String lastName; public String getF ...