搜索
bottom↓
回复: 15

怎么理解AVR汇编指令 IJMP?

[复制链接]

出0入0汤圆

发表于 2016-9-20 09:37:28 | 显示全部楼层 |阅读模式
        IJMP – Indirect Jump(间接跳转指令)
        AVR官方说明是Z寄存器指向的地址。不太理解。
        是程序跳到这个地址执行 ? 怎么来确定这个地址对应的程序哪个地方?
        正在看汇编程序。卡在这里,不知道怎么跳转

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2016-9-20 10:02:49 | 显示全部楼层
本帖最后由 duxingkei 于 2016-9-20 10:05 编辑

自己仿真下啊,一条一条跳转,什么年代了,还用汇编啊
ijmp
把 r30 r31 组成的Z寄存器地址 放到PC指针,也就是跳转 到Z里面保存的地址执行

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2016-9-20 10:05:55 | 显示全部楼层
duxingkei 发表于 2016-9-20 10:02
自己仿真下啊,一条一条跳转,什么年代了,还用汇编啊
ijmp
估计是跳转到Z里面保存的地址执行吧?

        远古大神的CODE 可是很多ASM哦。
        手上没有硬件, 不知道这种情况下怎么去确认跳到哪去了。(Z指向的地址已知,不知道怎么转换成程序入口)       

出0入0汤圆

发表于 2016-9-20 10:07:33 | 显示全部楼层


就是跳转到Z寄存器(r31r30)到地址;
Z的值肯定是确定的,前面有没有MOVW r30,**的语句?可以找出它们的值

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2016-9-20 10:10:13 | 显示全部楼层
明白了,你是知道了PC的值,但不知道指向汇编哪里?
AVR可以软件仿真;

出0入0汤圆

发表于 2016-9-20 10:11:01 | 显示全部楼层
本帖最后由 duxingkei 于 2016-9-20 10:16 编辑
huangyiting1990 发表于 2016-9-20 10:05
远古大神的CODE 可是很多ASM哦。
        手上没有硬件, 不知道这种情况下怎么去确认跳到哪去了。(Z指向的地 ...


你的意思是Z的值知道,但是不知道跳转到具体的哪个函数?
不知道用的是什么编译器,汇编里面或者函数map里面估计有函数与地址的对应吧,自己找找,我好久都没写AVR的汇编了

我用的是 avr studio 4.16 编译汇编后,会有一个map文件,打开找找你的地址和函数对应得上不
*.map

出0入0汤圆

 楼主| 发表于 2016-9-20 10:21:50 | 显示全部楼层
您的意思是  需要用编译器 编译后才能知道具体的地址码?   
额,这要是让我写。......
我看的程序是BLHeli,关于BOOTLOADER 这部分  源程序里面是这样处理的

直接给Z赋值 0xE00 然后一个IJMP。然后我就蒙了,不知道到哪去了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2016-9-20 11:16:11 | 显示全部楼层
就是到了THIRDBOOTSTART,

PC是按字寻址的
0x1C00 >>1等于0x0E00
0x3C00 >>1等于0x1E00

出0入0汤圆

发表于 2016-9-20 11:17:52 | 显示全部楼层
本帖最后由 Hhhhhhhh 于 2016-9-20 11:27 编辑

就是Z指针指哪就跳哪。打个比方
.org $0100
ldi zl,0x51
ldi zh,0x52
ijmp
运行完IJMP程序就会跳转到0X5251这个FLASH地址。

出390入22汤圆

发表于 2016-9-20 12:27:18 来自手机 | 显示全部楼层
如果没有时序要求严格的程序就不要用汇编了,

出0入0汤圆

发表于 2016-9-20 15:01:30 来自手机 | 显示全部楼层
ijmp是间接跳转指令,跳转地址由Z寄存器确定,一般使用这个指令前会将一个程序标识符赋予Z寄存器,那么使用ijmp指令后就跳转到该标识符处的程序继续运行。另外程序标识符的地址是由编译器自动计算的,我用的AVR studio4

出0入0汤圆

发表于 2016-9-20 19:40:39 来自手机 | 显示全部楼层
仿真一下什么都明白了

出0入0汤圆

发表于 2016-9-20 20:31:47 | 显示全部楼层
没有硬件 软件仿真应该可以吧

出0入0汤圆

发表于 2016-9-21 07:31:28 来自手机 | 显示全部楼层
还用汇编?没有特殊的需要都用C了,开发简单,容易移植

出0入0汤圆

发表于 2016-9-21 08:16:12 | 显示全部楼层
条件跳转汇编语句,出处是电影《泰坦尼克号》里面的一句台词,you jump, i jump。

出0入0汤圆

发表于 2016-9-21 09:00:37 | 显示全部楼层
xihacow 发表于 2016-9-21 08:16
条件跳转汇编语句,出处是电影《泰坦尼克号》里面的一句台词,you jump, i jump。 ...

人才啊
看样子AVR的攻城狮也喜欢这部电影啊,哈哈哈
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-21 22:36

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表