流水线和PC

 

 PC代表程序计数器,流水线使用三个阶段,因此指令分为三个阶段执行:1.取指(从存储器装载一条指令);2.译码(识别将要被执行的指令);3.执行(处理指令并将结果写回寄存器)。而R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。一般来说,人们习惯性约定将“正在执行的指令作为参考点”,称之为当前(第一条)指令,因此PC总是指向第三条指令。当ARM状态时,每条指令为4字节长,所以PC始终指向该指令地址加8字节的地址,即:PC值=当前指令执行位置+8;

    ARM指令是三级流水线,取指,译指,执行时同时执行的,现在PC指向的是正在取指的地址,那么cpu正在译指的指令地址是PC-4(假设在ARM状态下,一个指令占4个字节),cpu正在执行的指令地址是PC-8,也就是说PC所指向的地址和当前所执行的指令地址相差8。
    当突然发生中断的时候,保存的是PC的地址
    这样你就知道了,如果返回的时候返回PC,那么中间就有一个指令没有执行,所以用SUB pc lr-irq #4。

 

    但是在ADS中PC确实是指向即将执行的指令处,这个是软件处理后的结果,主要是为了用户调试程序方便.

   需要注意的是,当前使用指令STM/STR保存R15时候,保存的可能是当前指令地址值+8字节,也可能保存的是当前的指令地址+12字节.到底是哪种,取决于芯片的具体的设计方式。无论如何,在同一芯片中,要么采用当前的指令地址+8,要么采用当前的指令地址+12。因此对于用户来讲,尽量避免使用STM/STR指令来保存R15的值。但是可以在开始的时候用一段程序对芯片的offset进行测试!

 代码如下:
SUB R1, PC, #4  ;获得下面的存放下面存放STR指令的地址
STR PC,[R0]
LDR R0,[RO]
SUB R0, R0, R1

ARM7中断与PC、LR的问题:

1,假设当前是PC,PC-4,PC-8(三级流水
2,发生IRQ异常,执行保护操作,LR中保存由于FIQ或IRQ占先而没有被执行的指令的地址(即有些资料上把这个地址写成PC或者当前地址,很费解甚至误解)的下一条地址
3,清空流水线
4,进入中断服务程序
5,待流水线填满,执行操作才被重新挂起(解释了ARM7为什么是0.9MIPS)
6,中断返回前,对LR处理,LR=LR-4,指向之前被清空的已译码但没被执行的指令的地址
7,清空流水线,返回
8,重新对丢弃的前一次已译码指令取指
9,待流水线满,开始继续执行

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jenkins流水线有两种语法,分别是声明式流水线和脚本化流水线。 声明式流水线是Jenkins流水线的核心语法之一。它采用了更简单、更有主见的语法来编写Jenkins流水线。在声明式流水线中,流水线定义被放置在一个外层的pipeline块中,而步骤则被定义在stage块中。通过使用不同的指令和参数,您可以定义不同的阶段和步骤,以构建和部署您的应用程序。 脚本化流水线是Jenkins流水线的另一种语法。它提供了一个功能丰富的编程环境,使用Groovy脚本来编写Jenkins流水线。脚本化流水线提供了更大的灵活性和可扩展性,但也需要对Groovy编程有一定的了解。 在Jenkins流水线中,步骤是流水线的基本构建块,它告诉Jenkins要做什么。您可以使用各种内置的步骤来执行不同的任务,例如构建代码、运行测试、部署应用程序等。在声明式流水线中,步骤可以通过stage块来定义,在脚本化流水线中,则可以直接在Groovy脚本中编写步骤。 总结来说,Jenkins流水线的基本语法包括声明式流水线和脚本化流水线。声明式流水线采用更简单、更有主见的语法,而脚本化流水线提供了更大的灵活性和可扩展性。无论选择哪种语法,步骤都是构建流水线的基本单位。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [2.2 Jenkins流水线语法](https://blog.csdn.net/hackermmm/article/details/106140519)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Jenkins 流水线语法](https://blog.csdn.net/wadeltf/article/details/90287339)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值