打印
[AVR单片机]

求解AVR GCC汇编中一句rjmp .+0这句语句里.+0的意思

[复制链接]
2428|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
keyosa|  楼主 | 2014-8-7 12:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
rjmp .+0这句我是从某个内嵌汇编的C程序看到的,里面的注释是说这个语句相当于执行了两次nop指令。rjmp需要花费2个时钟周期。
rjmp是相对跳转指令,我翻看了avrgcc手册里面的没有讲关于这个小圆点"."的用法,这里的.+0我就实在理解不到他要表达什么,我看其他地方还有rjmp .+2的,"+"加号表示可读可写,那么前边那个"."又代表什么呢。
求汇编大神解答一下,感激不尽。

相关帖子

沙发
john_lee| | 2014-8-8 01:27 | 只看该作者
. 表示当前 pc 值,+ 就是加,跟什么“可读可写”风马牛不相及。
rjmp .+0是死循环了。
rjmp .+2是跳转到下一条指令,因为rjmp 指令本身长度是两字节,这个rjmp实际上啥也没做,这才是相当于两个nop,跟这个写法完全一样:
    rjmp .L1
.L1:

使用特权

评论回复
板凳
匿名  2014-8-8 01:49
老师我不知道 你教教我被

使用特权

评论回复
地板
匿名  2014-8-8 03:27
aad三四岁飒飒的

使用特权

评论回复
5
keyosa|  楼主 | 2014-8-8 12:20 | 只看该作者
john_lee 发表于 2014-8-8 01:27
. 表示当前 pc 值,+ 就是加,跟什么“可读可写”风马牛不相及。
rjmp .+0是死循环了。
rjmp .+2是跳转到下 ...

rjmp .+0确实可以起到跑2个nop的作用,然后执行完会紧接着跑下一条指令。
我用AVR stdio仿真测试过了。不会进入死循环。
还有的就是这句rjmp .+0我是在一个控制灯的时序的程序里找到的,他是在C里面嵌套汇编。
然后程序并没有任何卡住的现象,可以一直跑下去。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝