打印

跳转指令B的疑问

[复制链接]
3099|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lyf9908|  楼主 | 2010-12-30 20:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
wljs012| | 2010-12-31 16:55 | 只看该作者
上面的LDR不是已经给PC赋了值了。

XX B XX

就是 while(1);

使用特权

评论回复
板凳
lyf9908|  楼主 | 2010-12-31 20:33 | 只看该作者
这是一个RAM的BOOT 初始化程序里面的:
  就是不明白,前面给PC赋值了,程序转向RAM的起始地址去执行。
   再来一个光秃秃的  B
    再来个死循环,
   就是搞不懂,为什么要这么样写。
   哪段程序是一本书“ARM嵌入式应用系统开发典型实例”附带光盘第六章:生物识别系统实例;里的BOOT.S,难道是作者搞错了?

使用特权

评论回复
地板
a2b3c4ddd| | 2011-1-2 19:43 | 只看该作者
主要是ARM是多级流水线结构,LDR下的几句是进行指令填补

使用特权

评论回复
5
lyf9908|  楼主 | 2011-1-2 21:24 | 只看该作者
指令填补?有什么好处?
    楼主说得太高深了,可不可以具体解说下?

使用特权

评论回复
6
wljs012| | 2011-1-4 09:59 | 只看该作者
4楼正解。

ARM7三级流水线结构,取指、译码、执行。

执行LDR命令时候,已经对后面的两条指令进行预取指处理。

不定义指令会产生异常进入中断。

使用特权

评论回复
7
wljs012| | 2011-1-4 11:26 | 只看该作者
另外,倒数第二行是B . 吧?

使用特权

评论回复
8
lyf9908|  楼主 | 2011-1-6 21:01 | 只看该作者
三级流水线结构的解说,还是有些不明白啊,得找相关书看看。
  谢谢!

使用特权

评论回复
9
new1988| | 2011-1-10 11:23 | 只看该作者
三级流水就是在执行本条指令的同时,CPU已经开始对下条指令进行译码,对下下条指令进行取指了。
照LZ的程序看,其实在执行LDR这条指令的时候,CPU已经对B这条指令进行译码,对99 B %99进行取指了。
如果不加下面两条指令,那么CPU在执行LDR指令的上一条指令的时候会取指错误,产生异常,进入中断。

使用特权

评论回复
10
xinzha| | 2011-1-10 14:49 | 只看该作者
ARM手册中明确指出发生未定义指令异常的点是该指令的执行阶段而不是取指或者译码阶段,如果在执行阶段之前就发生未定义异常,那么协处理器的指令扩展将很难做。

使用特权

评论回复
11
wljs012| | 2011-1-10 16:44 | 只看该作者
楼上的说法是说后面的两句根本就没用吧?

其实我也从来没做过指令填充这种事情,我觉得是不是和编译环境有关,起码KEIL就用不到。

使用特权

评论回复
12
xinzha| | 2011-1-10 17:22 | 只看该作者
楼主贴出的只是部分,说不定后面两句的用处就是执行失败挂起时用的,当然也有可能是原作者随意加着玩的。
arm不是纯risc,没有延迟槽这个概念,指令填充了意义也不大。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

133

主题

176

帖子

0

粉丝