汇编bne的问题 汇编中的标号1: 以及bne 1b解释
来源:互联网 发布:php是最好的编程语言 编辑:程序博客网 时间:2024/06/05 18:45
我也遇到了这个疑惑,正好看到了有前辈写过,非常感谢,先转载给大家。希望能帮助初学者,学习内核中的汇编点击打开链接
下面一段程序摘自《嵌入式Linux应用开发完全手册》page-95
memsetup:
@ 设置存储控制器以便使用SDRAM等外设
mov r1, #MEM_CTL_BASE @ 存储控制器的13个寄存器的开始地址
adrl r2, mem_cfg_val @ 这13个值的起始存储地址
add r3, r1, #52 @ 13*4 = 54
1:
ldr r4, [r2], #4 @ 读取设置值,并让r2加4
str r4, [r1], #4 @ 将此值写入寄存器,并让r1加4
cmp r1, r3 @ 判断是否设置完所有13个寄存器
bne 1b @ 若没有写成,继续
mov pc, lr @ 返回
bne 1b什么意思呢?一开始老是在找1b的标号处,找了些许时间也没有发现哪里有这个标号。
后来查找相关资料发现,原来0~9的数字为局部标签。局部标签可以重复使用,语法为:
xf:往前跳的意思,就是还未执行的程序,x代表0~9的某个标签,f代表forward的意思。
xb:往后跳的意思,回到原来已经执行过的语句,x达标0~9的某个标签,b代表backward的意思。
上面bne 1b 的意思是,如果r1!=r3 即r1的地址的不等于r3的地址,也就是还没设置完
这13个寄存器,就要重新跳到
1:
ldr r4, [r2], #4 @ 读取设置值,并让r2加4
str r4, [r1], #4 @ 将此值写入寄存器,并让r1加4
......
处执行;直到r1=r3,即设置好这13个寄存器。才会结束这个局部循环。
——————————————————————————————————————
eg:
1: ;A
cmp r0, #0
beq 1f ; @ r0==0那么向前跳转到B处执行
bne 1b ; @ 否则向后跳转到A处执行
1: ;B
——————————————————————————————————————
有趣的是:
1:b 1b @无限循环的意思,与while(1)等效
- 汇编bne的问题 汇编中的标号1: 以及bne 1b解释
- 汇编bne的问题 汇编中的标号1: 以及bne 1b解释
- 汇编 bne 1b 的问题
- 汇编bne的问题
- 汇编 bne 1b和bne 1f浅析
- bne 1b什么意思
- ARM汇编 beq和bne
- ARM汇编 beq和bne
- ARM汇编 beq和bne
- ARM汇编 beq和bne
- arm汇编语言中bne 1b的意思
- arm汇编语言中bne 1b
- arm汇编指令bne、beq和tst
- arm汇编之 bne与beq
- cmp bne 以及sub指令的详解
- ARM汇编指令——TST和BNE、BEQ解析
- 智能小车35:从汇编指令bne聊起
- bne %B0的理解
- Android 中基本界面布局
- 康托展开&逆康托展开
- poj1631(最长上升子序列 nlogn)
- LeetCode Weekly Contest 30解题思路
- SpringBoot非官方教程 | 第十八篇: 定时任务(Scheduling Tasks)
- 汇编bne的问题 汇编中的标号1: 以及bne 1b解释
- 【pygame入门】-- 字体
- 米磊博士:下一个风口就是硬科技,抓住机遇,中国能重返世界之巅
- Comet[翻译]
- 我的java学习路之选择和循环
- 好用的chrome插件:鼠标手势、阅读视图、onetab
- linux CLK时钟驱动
- 位图 BitMap
- spark报错---安装系列八