搜索
bottom↓
回复: 0

ARM中断返回地址地址和3级流水线

[复制链接]

出0入0汤圆

发表于 2010-8-16 15:10:58 | 显示全部楼层 |阅读模式
地址     指令
0x3000     A
0x3004     B
0x3008     C
0x300c     D
(1)SWI和未定义指令异常
此时正在执行指令A(此时PC=0x3008)的同时在译码阶段发生SWI或未定义指令异常,等指令A执行完后(此时PC还没有发生改变PC=0x3008)进行SWI或未定义指令粗合理,同时把当前PC值赋给寄存器LR(LR=0x3008)然后再进行自动调整LR=LR-0x04(此时LR=0x3004),这样当异常返回时就到地址为0x3004的指令处执行。所以再进入异常的时候LR不需要修改
(2)IRQ和FIQ异常
此时正在执行指令A(此时PC=0x3008)的同时发生IRQ和FIQ异常,等指令A执行完后(此时PC发生改变PC=0x300c)进行IRQ和FIQ异常响应,同时把当前PC值赋给寄存器LR(LR=0x300c)然后再进行自动调整LR=LR-0x04(此时LR=0x3008),这样当异常返回时就到地址为0x3008的指令C处执行(可以看出跳过了执行指令B),所以当进入异常的时候要执行“SUB LR,LR,#4”(此时LR=0x3004),当异常返回时就到地址为0x3004的指令B处执行。
(3)预取指令中止
此时正在执行指令A(此时PC=0x3008)发生预取指令中止异常,(此时PC没有发生改变PC=0x3008)进入预取指令中止异常响应,同时把当前PC值赋给寄存器LR(LR=0x3008)然后再进行自动调整LR=LR-0x04(此时LR=0x3004),这样当异常返回时就到地址为0x3004的指令B处执行,但是当发生指令预取中止异常时,程序要返回到该有问题的指令处,重新读取并执行该指令。异常指令预取中止异常中断程序应该返回到产生该指令预取中止异常中断的指令处。所以当进入异常的时候要执行“SUB LR,LR,#4”(此时LR=0x3000),当异常返回时就到地址为0x3000的指令A处重新执行
(4)数据中止异常
此时正在执行指令A(此时PC=0x3008)的同时发生数据中止异常,等指令A执行完后进入下一条指令时(此时PC发生改变PC=0x300c)发生数据中止异常响应,同时把当前PC值赋给寄存器LR(LR=0x300c)然后再进行自动调整LR=LR-0x04(此时LR=0x3008),这样当异常返回时就到地址为0x3008的指令c处执行,但是发生数据访问中止异常中断时,程序要返回到该有问题的数据访问处,重新访问该数据。因此数据访问中止异常中断程序应该返回到产生该数据访问中止异常中断的指令处所以当进入异常的时候要执行“SUB LR,LR,#8”(此时LR=0x3000),当异常返回时就到地址为0x3000的指令A处重新执行
小弟刚刚学ARM觉得好像哪里理解还不对,请高手多多指出
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-10 12:51

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

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