Chinaunix首页 | 论坛 | 博客
  • 博客访问: 316204
  • 博文数量: 72
  • 博客积分: 3111
  • 博客等级: 中校
  • 技术积分: 668
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-30 15:45
个人简介

朝着心的方向前进

文章分类

全部博文(72)

文章存档

2014年(5)

2013年(1)

2012年(1)

2011年(1)

2010年(24)

2009年(40)

我的朋友

分类: 其他平台

2014-08-07 21:04:49

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

TST     R0, #0x8    ;          测试bit_3是否为0
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表示Forward,向后
阅读(4638) | 评论(0) | 转发(0) |
0

上一篇:ARM处理器CPSR的一些记录

下一篇:没有了

给主人留下些什么吧!~~