bne %B0的理解

==============================================================

   查了一下书,0~99应该称为局部标号。

   详见 ARM体系结构与编程 第147页

============================================================

昨天在看arm汇编,其中有这样的一段语句

0

         ldr    r3, [r0], #4

         str    r3, [r1], #4

         cmp r2, r0

         bne %B0

bne:不等于则调转

但%B0 ,网上搜了一遍,还是未果。从最后的汇编语言来看,%B 代表,往前搜索 lable为0的行,换句话说,就是指本条语句前,lable为0的地址。整条语句的意思就是,如果不相等则跳转到lable为0的行。

同样,有了bne %B0,也就有了bne %F1,这是向后搜索lable为1的行。参考代码:

; check if EIN0 button is pressed

       ldr       r0,=GPFCON

         ldr    r1,=0x0

         str    r1,[r0]

         ldr    r0,=GPFUP

         ldr    r1,=0xff

         str    r1,[r0]

         ldr    r1,=GPFDAT

         ldr    r0,[r1]

       bic      r0,r0,#(0x1e<<1) ; bit clear

         tst    r0,#0x1

         bne %F1

(省略一些语句)

;Clear SDRAM End

1

                ;Initialize stacks

         bl      InitStacks

总结一下 bne %B0,如果不相等则跳到本条语句前的lable为0的行。

     bne %F1,如果不相等则跳到本条语句后的lable为1的行。

### BNE指令的作用及用法 #### 1. BNE指令的基本定义 BNE(Branch if Not Equal)是一种条件分支指令,用于当两个操作数不相等时跳转到指定的目标地址。它是RISC架构中常见的指令之一,广泛应用于现代处理器设计中[^2]。 #### 2. BNE指令的工作机制 在执行过程中,BNE会比较两个寄存器的值。如果它们的值不同,则程序计数器(PC)会被更新为目标地址;否则,继续按顺序执行下一条指令。目标地址通常由当前指令地址加上一个偏移量计算得出。这种机制允许程序员通过简单的逻辑判断来改变程序流程[^3]。 #### 3. 数据流分析 对于RISC-V架构而言,BNE属于分支类指令的一种。其具体数据路径涉及以下几个阶段: - **取指阶段 (Fetch)**:从内存读取出BNE指令。 - **译码阶段 (Decode)**:解析源寄存器rs1和rs2,并加载对应的数值。 - **执行阶段 (Execute)**:对比rs1与rs2的内容是否相同。如果不相等,则计算新的目标地址。 - **访存阶段 (Memory Access)** 和 **写回阶段 (Write Back)** 对于此类分支指令通常是空操作。 下面是一个典型的伪代码描述如何处理该指令: ```python if rs1 != rs2: PC = PC + sign_extend(offset << 1) else: PC += 4 ``` 这里`offset`是从指令编码字段提取出来的相对位移经过适当扩展后的结果。 #### 4. 实际应用案例 考虑一段简单的汇编代码片段展示BNE的实际运用场景: ```assembly addi t0, zero, 5 # 将t0设置为5 addi t1, zero, 7 # 将t1设置为7 bne t0, t1, label # 如果t0!=t1则跳至label处 ... label: nop # no operation placeholder instruction at target location ``` 在这个例子中,由于`t0`(等于5)`<>` `t1`(等于7),所以CPU将会跳跃过省略号部分直接到达'label'标记的位置[^4]。 #### 5. 性能影响因素 虽然BNE提供了灵活的控制转移能力,但它也可能引发流水线停顿(misprediction penalty)等问题。因此优化预测算法成为提高效率的关键所在。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值