※ 引述《gglk (锦州挖挖)》之铭言:
: 老师,不好意思,可以麻烦再解释一次
: PC-relative的好处(relocatable code)吗?
: A档案说
: we can move the code from one block of memory to another without changing
: the target addresses
: 并不是很懂(move 什么 code?? code 不是一直那里给你读吗?),
: PC-relative 跟 Absolute address 不是只有“计算下一个指令在哪”的方式不同而已?
: 算完以后还是都把PC移过去了不是嘛?
: 谢谢您。
恩,老师很忙,那我把今天老师回答的打在下面,如果理解的不对,
麻烦老师指出来谢谢。
假如现在PC指到Instructuin A
要从Instructuin A 跳到Instructuin B有两种跳法,
1.一种是告诉它B的绝对位址(Absolute address),
2.一种是告诉他B离现在的PC多远(PC relative),
差别就在于当整个程式码的位置有调动
(即A档案所谓:move the code from one block of memory to another)时,
若当初采的是第一种方法,我必须重新计算B的绝对位址,
若是第二种,B离A多远并不会因为整个程式码位置改了而有变动,
不用重算。
所以A档案说 without changing the target addresses
这就是relocatable code。
不过还是有一些地方我想再确认:
1.所以说,B离A多远这个资讯,他是在程式执行时会被保存起来囉?
2.所谓 整个程式码位置改变 是指“程式在跑的时候”,程式码不会固定放在那里给你读,
而是有可能位置变来变去这样吗? 还是说“每次打开这个程式的时候”它的被放的
位置都不同这样?
应该不会是后者因为执行完应该早就没有B离A多远的资讯了吧?可是又觉得执行时整个
CODE会移来移去很怪...
谢谢