搜索
bottom↓
回复: 1

关于转移指令、自修改代码与隔离指令

[复制链接]

出0入0汤圆

发表于 2009-4-6 14:06:28 | 显示全部楼层 |阅读模式
看到宋版主cortex-m3权威指南72页关于指令隔离指令的介绍,有一点迷惑,在这里请教一下

下面是我的理解,不知道正确不正确,请各位指教!

由于流水线机制,所以每条指令在执行的时候实际上已经预取后面的几条指令(是不是N级流水线就会预取N-1条)

这都是建立在程序代码都是连续的基础上的,如果出现了转移指令,在译指过程就会发现是转移指令,处理器就会自己清洗预取的代码,并从转移到的地址重新

开始预取指令,这样造成了额外的开销,但是还不会出现问题。

如果使是修改代码,也就是程序手动修改了PC值,而又想马上立刻执行新的PC值地方的指令,就会出乱子。这种情况,处理器不会自己清洗预取的代码,(自己

不知道需要清洗流水线)需要手动清洗(ISB),否则处理器还是会执行已经预取了的指令。(也就是修改PC值指令后面的两条指令)


是不是可以这么理解,处理器执行的指令都是预取到的指令(如果预取到的指令都被清洗了,就需要从新预取然后才能执行),PC只是为指令预取提供一个地

址。

aaa1982

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2009-4-6 21:07:41 | 显示全部楼层
这个话题其实已经是有点研究计算机体系结构了,指令预取我也差不多是这么理解的。修改了程序代码并不是指修改PC的值,而是修改指令区的数据。比如,用STR等指令写入数据。如果写的地址存储着刚刚预取的指令,则预取的指令就会无效,此时可以使用ISB(我的理解)。
这其实有些太过理论化,但是对于带cache的机器这却是实践中要注意的。很可能取指时把32字节的指令都读到了指令cache中,但是后来STR等指令把被缓存数据的原件给改了,然而处理器执行的还是cache中的旧数据,这就会发生不一致问题
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-17 05:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表