讨论:有了CALL(JMP)为什么还要RCALL(RJMP)?

[复制链接]
9381|7
 楼主| 柳叶飞仙 发表于 2012-10-4 08:46 | 显示全部楼层 |阅读模式
CALL和RCALL的区别:1、指令长度不同;2、指令执行所需机器周期不同;3、寻址范围不同。
       难道说在小范围内寻址用RCALL代替CALL,仅是节省了ROM空间和CPU执行时间?以前看微机书的时候,里面有说:尽量使用相对寻址,以便于程序的移植。不知道类似RCALL一类的指令是否因此而被设计出来?
NE5532 发表于 2012-10-4 11:53 | 显示全部楼层
指令长度不同,从汇编的角度看,这两条指令用得非常多,不分青红皂白地换成长指令,目标代码就非常大了。
NE5532 发表于 2012-10-4 11:53 | 显示全部楼层
另外你说的编程里面的绝对寻址和相对寻址跟这个指令是两码事。
 楼主| 柳叶飞仙 发表于 2012-10-4 12:27 | 显示全部楼层
3# NE5532

但今天看AVR汇编指令介绍说,RCALL指令属于ROM空间的相对寻址范畴,CALL属于ROM空间的直接寻址范畴
 楼主| 柳叶飞仙 发表于 2012-10-4 12:32 | 显示全部楼层
假设有如下程序代码:
    org 0x0100
      rcall   ?
      nop
      ...
  
      org 0x0200
Fun1:
      ...
      ret

上面代码中的?应该是Fun1呢?还是 (0x0200-0x100-2)呢?
NE5532 发表于 2012-10-4 15:46 | 显示全部楼层
其实是一码事,让你从3楼上1层楼和直接告诉你去4楼是一样的。

你的程序应该写

rcall fun1

看来你还是没彻底搞懂相对寻址
与时俱进 发表于 2012-10-4 16:59 | 显示全部楼层
相对寻址,操作数是地址的偏移量;
绝对寻址,操作数是绝对地址。
hjs1618 发表于 2012-10-4 20:24 | 显示全部楼层
相对寻址,操作数是地址的偏移量;这时还要加上一个固定地址,才能得到绝对地址
绝对寻址,操作数是绝对地址。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部