2014-12-07 83 views
0

我无法确定哪些指令将被链接器修改,哪些不会。我的教科书说,那些将被修改的是那些其值被定义为程序起始地址+ - 常数的那些。它提供了以下2点MIPS的例子:链接器实际修改了什么?

  1. Ĵ有#在源程序一些标签
  2. SW $ 5导致#WHERE结果是计划内的标签

则说,这些不需要修改是那些表达式是独立的程序的起始地址的

  1. 李$ L2,buffend缓冲#bufend和缓冲的标签
  2. BNE $ 2,$ 0时,出口

我,因为我认为BNE是PC相对寻址,所以我认为这将需要一个连接中号特别困惑。我认为我对链接器的理解是缺乏的,如果有人能够帮助我获得一些理解,我会非常感激。

感谢,

回答

0

的链接...链接...对象斑点汇集成最终的二进制。物体在可能的位置独立。硬编码地址很好,但是基于标签的编译/汇编时间不依赖于位置,或者链接器在链接时解析它们。还有其他标签,如外部函数和全局变量,在汇编/编译时也无法解析,必须由链接器解析。

这不仅仅是被修改的指令。根据指令集和指令,绝对地址可能会被添加,然后在.text内部作为.rodata被解析,因此不仅可以插入指令,还可以插入地址或其他解决方案。根据工具链,链接器可能会添加说明以及数据。

由于可能使用外部标签,因此您的文本/讲师可能会说中断向量表,因此这些标签(地址)必须由链接器解析。但这只是一个更大局面的简单例子。

相关问题