SPARC中的呼叫与JMPL

时间:2014-01-31 07:11:56

标签: assembly return call sparc

SPARC中Call和JMPL有什么区别?我知道这两条指令都可以用来实现函数调用。

我还想知道返回机制如何受到影响,具体取决于Call或JMPL的选择。我知道如果我们使用JMPL,我们应该使用RETURN指令从函数调用返回,但我不知道Call指令的相应指令。

1 个答案:

答案 0 :(得分:0)

CALL仅获取相对地址(标签)并自动将当前PC(稍后用于计算返回地址)保存到%o7。另一方面,JMPL只接受寄存器中的绝对地址,并且可以将当前PC存储在任意寄存器中。

在两种情况下,函数调用约定都是相同的。 CALL对于标签更方便,JMPL对于函数指针更方便。后者可以通过首先将目标地址加载到寄存器来模拟前者。

对于返回,RETRETL都是合成指令,汇编程序将使用正确的返回寄存器将其转换为JMPLRET变为{ {1}}和JMPL %i7+8,%g0变为RETLJMPL %o7+8,%g0假设您已设置了一个新的注册窗口(因此原始的RET现在为%o7),您应该在延迟槽中使用%i7指令进行操作。< / p>

<强>更新RESTORE指令显然已在sparc v9中引入,它结合了RETURN(具有第二个操作数JMPL)和%g0(没有操作数)。因此,它可以方便地用于结束非叶函数,通常使用RESTORE对。