又来麻烦大家了。
学习中,阅读head.S (vivi里的)文件,有这样一个重复使用达14次之多的语句:
1: b 1b @ infinite loop
我这样理解这个语句的意思:无条件跳转到原标号1:。于是进入一个无限循环--infinite loop。
我想请教的问题是:
Q1、 上面的理解对不对?
Q2、 b 1b 中,1后面的那个b,表示什么?【搜寻了两天了,没找到答案】,和标号1:多处出现(按理说多次出现同一标号是不允许的)有什么关系。
谢谢!
[ 本帖最后由 xiaoxif 于 2009-12-2 16:01 编辑 ]
为什么总用3/4号仿宋? 答:大点清楚‘,仿宋是工程图的标准字体。
这个意思是无限循环。。
1: b 1b
1:是标号
b 是跳转
1b:就是1,b表示二进制
引用: 原帖由 daicheng 于 2009-12-2 16:42 发表
这个意思是无限循环。。
1: b 1b
1:是标号
b 是跳转
1b:就是1,b表示二进制
补充下,b代表branch,在RISC处理器中branch是条件跳转
谢谢二楼、三楼
感谢沙发、板凳上二位热心精炼的指点。
语法本身就是法条的规定,本无需多问为什么,我接受就是了。虽然总觉得这个写法与传统Assembly语言习惯写法相比,新鲜的有些别扭----有所偏离,心里老不踏实。因为:
ARM指令系统说明:B指令有两种常用格式和一个无操作数的特例:
b lebelxx ;跳转到 lebelxx标号处
b 0x1234 ;跳转到绝对地址 0x1234处
b ;不带操作数,表示跳转到本地址。
那么:既然用第三种表述【B 】就可以表示这种至本地址的跳转(实现上也就是PC数减 x 操作),那为什么非要加上1b,而且要配上 1:那样多次出现、而且首个字符为数字的“不规范”的“标号”?这是否是这个编译/汇编程序的特点,或者说是特定的语法要求,例如在一行里只有一个孤零零的B,容易出错?
一边想。一边写,一会就写了这么多,……可不敢再继续打扰各位了,原谅,如此钻角尖浪费大家的时间。
再次感谢各位!
[ 本帖最后由 xiaoxif 于 2009-12-2 21:38 编辑 ]
为什么总用3/4号仿宋? 答:大点清楚‘,仿宋是工程图的标准字体。
回复 5楼 xiaoxif 的帖子
楼主看的还挺详细啊,一般人只看关键部分,楼主精神值得我们学习!
引用: 原帖由 xiaoxif 于 2009-12-2 21:22 发表
感谢沙发、板凳上二位热心精炼的指点。
语法本身就是法条的规定,本无需多问为什么,我接受就是了。虽然总觉得这个写法与传统Assembly语言习惯写法相比,新鲜的有些别扭----有所偏离,心里老不踏实。因为:
ARM指 ...
可以结合反汇编看看,源码中的这个地方会生成一条什么样的指令?