免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1315 | 回复: 0
打印 上一主题 下一主题

arm汇编(一) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-17 18:16 |只看该作者 |倒序浏览
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 ; bit clear
         tst    r0,#0x1
         bne %F1
(省略一些语句)
;Clear SDRAM End
1
                ;Initialize stacks
         bl      InitStacks
%B, %F可以这样理解: B表示before,向前。F表示after,向后

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/66024/showart_2124238.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP