gpt4 book ai didi

assembly - 为什么 MIPS 中 bgezal 和 bltzal 是基本指令而不是伪指令?

转载 作者:行者123 更新时间:2023-12-03 06:31:03 24 4
gpt4 key购买 nike

根据this MIPS instruction reference ,有两条指令(bgezalbltzal),它们执行相对跳转和链接,而不仅仅是在分支被采用时执行相对跳转。

这些指令可以分别使用 bgezbltz 进行模拟,后跟 jal,这意味着 bgezalbltzal 应归类为伪指令。然而,两者都分配有操作码,因此它们被归类为基本指令。

将它们添加到基本指令集中而不是使它们成为伪指令的理由是什么?另外,为什么指令集中只包含 bgezalbltzal 而不是,例如 blezalbgzal 等?

最佳答案

jal使用半绝对目标编码(替换PC的低28位),而bgezal/bltzal是相对的(添加 18 位有符号位移 imm16<<2 )。 How to Calculate Jump Target Address and Branch Target Address?

它们是经典 MIPS 唯一的分支链接(而不是跳转链接),因此对于位置无关的可重定位代码很重要。(您甚至可以使用它来获取当前PC 进入寄存器并找出您正在执行的位置,这与 jal 不同)。

您可以编码bal (无条件相对函数调用)为 bgezal $zero, target .

您可以获得$ra=PC与未采取的bltzal $zero, anywhere无需任何其他设置。使用 bgezal 执行此操作需要一个小于零的输入寄存器,需要一个insn来创建。 b...al说明总是$ra即使分支没有被占用。您希望将其用于与 PC 相关的代码,直到 MIPS32r6 给我们 addiupc为了更好地生成 PC 相关地址。

因为它们像其他的一样使用 I 型指令格式 b ranch 指令,一个寄存器的编码中有空间,因此将其设置为可选条件是有意义的,而不是仅仅具有 bal操作说明。用于执行“与链接”的硬件逻辑已经存在,并且所有其他相关分支指令都是有条件的。另外,有一个不属于 $zero 的条件可以方便阅读pc .

请记住,MIPS 指令编码在早期 MIPS 硬件中直接用作内部控制信号,因此它们之间不同的编码中的一位可能会连接到异或门,该异或门反转(或不反转)符号位检查。 (正如 Konrad 的回答所指出的,这些分支条件仅取决于寄存器的 MSB,因为它始终与零相对,因此不会有等待 32 位加法器产生比较结果的延迟。)

来自http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html

0000 01ss sss1 0001 iiii iiii iiii iiii   BGEZAL
0000 01ss sss1 0000 iiii iiii iiii iiii BLTZAL

指令编码缺乏灵 active (因为它直接驱动内部控制信号,而不需要在解码中进行大量转换)也许就是为什么不只有一个bal的原因。具有 28 位范围(来自 26 位相对位移)。相关分支的硬件设置为具有16位立即数的I型指令。

<小时/>

TL:DR:有 2 个条件分支链接指令,因为很自然地实现无条件 bal就其中一个而言,另一个几乎是免费的。

MIPS b (无链接的无条件相对分支)也是 beq $zero, $zero, target 的伪指令,或者由汇编器选择,对于 bgez $zero, target 。 (What is the difference between unconditional branch and unconditional jump (instructions in MIPS)?)。 MIPS R3000 manual建议beq $zero,$zero 。 (更清楚地记录了 $ra=PC 无论分支如何都会发生;从我最初编写此答案时查看的快速引用表中并不清楚这一点。)

与零比较的编码只有一个 5 位寄存器字段,因此它们比 beq 消耗更少的编码空间。/bne 。这可能是选择 bgezal 的原因而不是beqal作为要提供的一对条件分支之一。

关于assembly - 为什么 MIPS 中 bgezal 和 bltzal 是基本指令而不是伪指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20680218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com