zoukankan      html  css  js  c++  java
  • ARM汇编 beq和bne

    1、
    前阵子看cpu从sleep模式唤醒时,对tst bne和tst beq有些模糊。先记录:
    摘抄如下:

    TST     R0, #0X8
    BNE    SuspendUp ;BNE指令是“不相等(或不为0)跳转指令”:

    LDR   R1,#0x00000000

    先进行and运算,如果R0的第四位不为1,则结果为零,则设置zero=1(继续下面的LDR指令);

    否则,zero=0(跳到SuspendUp处执行)。

    还有:

    有点模糊,在此记下。

    tst r0,#02

    bne sleep

    ldr  r1,#0

    解释:位比较,先进行and运算,如果r0第2位不为1,则与的结果为0,设置标志位zero=1,继续下面的ldr指令。反之,zero=0,跳转到sleep执行。

    bne指令: 非零则跳转

    个人总结:tst 和bne连用: 先是用tst进行位与运算,然后将位与的结果与0比较,如果不为0,则跳到bne紧跟着的标记(如bne sleep,则跳到sleep处)。

    tst 和beq连用: 先是用tst进行位与运算,然后将位与的结果与0比较,如果为0,则跳到beq紧跟着的标记(如bne AAAA,则跳到AAAA处)。

    2、

    昨天在看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

    %B, %F可以这样理解: B表示before,向前。F表示after,向后
  • 相关阅读:
    移动 Web 开发技巧
    判断手机是苹果还是安卓,并且判断安卓的高低版本
    JavaScript判断移动端及pc端访问不同的网站
    input实时监控和获取焦点的问题,oninput,ononfocus
    几个CSS3动画
    canvas加载进度条
    animation动画兼容所有手机
    背景渐变,兼容所有手机端
    文字动画和文字镂空
    前端面试题
  • 原文地址:https://www.cnblogs.com/LoongEmbedded/p/5298852.html
Copyright © 2011-2022 走看看