- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 ARM指令集 第3章 ARM指令集 讲授内容:ARM指令集——高速缓存预加载指令 ARM指令集是以32位二进制编码的方式给出的,大部分的指令编码中定义了第一操作数、第二操作数、目的操作数、条件标志影响位以及每条指令所对应的不同功能实现的二进制位。 每条32位ARM指令都具有不同的二进制编码方式,和不同的指令功能相对应 。 ARM指令集可以分为六大类,分别为数据处理指令、Load/Store指令、跳转指令、程序状态寄存器处理指令、协处理器指令和异常产生指令。 ARM指令使用的基本格式如下: 〈opcode〉{〈cond〉}{S} 〈Rd〉,〈Rn〉{,〈operand2〉} opcode 操作码;指令助记符,如 LDR、STR等。 cond 可选的条件码;执行条件,如EQ、 NE等。 S 可选后缀;若指定“S”,则根据指 令执行结果更新CPSR中的条件码。 Rd 目标寄存器。 Rn 存放第1操作数的寄存器。 operand2 第2个操作数 高速缓存预加载指令——PLD 高速缓存预加载指令用于告诉存储系统对一个指定地址的数据访问即将到来,其格式如下: PLD[Rn,offset] 其中的偏移量可以是无符号的12位立即数(取值范围0~4095字节)或寄存器,寄存器中可以选着以为操作。 ARM中的预取命令pld的使用 PLD( pld [r1, #0] )//因为后面要用到r0和r1,所有进行预读取,加速存储器的访问 PLD( pld [r0, #0] ) ands ip, r0, #3 bne .cfu_dest_not_aligned .cfu_dest_aligned: ands ip, r1, #3 bne .cfu_src_not_aligned ... PLD( pld [r1, #0] )//因为后面要用到r0和r1,所有进行预读取,加速存储器的访问 PLD( pld [r0, #0] ) ands ip, r0, #3 bne .cfu_dest_not_aligned .cfu_dest_aligned: ands ip, r1, #3 bne .cfu_src_not_aligned ... 功能:cache预读取(PLD,PreLoad),使用pld指示存储系统从后面几条指令所指定的存储器地址读取,存储系统可使用这种方法加速以后的存储器访问。格式:pld[Rn,{offset}]其中:Rn ? ? ? ? 存储器的基址寄存器。Offset ? ? 加在Rn上的偏移量。 pld预读取指令,pld指令只在armv5以上版本有效。 但我有一个疑问,数据已经在寄存器中了,为什么还要预读取?我认为是这样的:因为ARM 总共有两个数据cache, L1/L2,但这个内存是有限的,而arm要操作的数据很多,它需要实时的把当前用不到的数据放到外存中,也就是ram中,而不要占用cache。我认为预取就像厨师炒菜用的盘子,把暂时用不到放到冰箱里,要用到的放到盘子里,这样要是立马用的话,会很快的从盘子里拿到数据,而不要要再去冰箱里拿,因为那样浪费时间。 Cache缓存的是主存的数据,嵌入式中的主存一般是SDRAM,CPU操作寄存器的速度要快于操作Cache。 第3章 ARM指令集
文档评论(0)