gpt4 book ai didi

assembly - 为什么 ASM 6502 中的条件分支有 128 字节的限制

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

有哪些硬件原因导致例程必须位于发出的分支指令的 128 或 -127 字节之内?

最佳答案

硬件原因有两个:

  • 首先,6502是8位处理器,这意味着单个字节可以容纳0 到 255 之间的无符号值,或者如果使用第 7 位来指示符号(二进制补码),则为 -128到+127。

  • 第二,Chuck Peddle 将分支指令设计为双字节操作 - 第一个字节表示分支条件(操作码),第二个字节表示分支条件(操作码)。如果条件为真,则添加到程序计数器 [PC] 的有符号偏移值(操作数)。

现在很明显,使用单个有符号偏移字节作为分支操作数意味着 BRx 指令可以容纳的最大“跳转”范围是从当前 PC 返回 128 个位置,或前方 127 个地点。

如果您需要分支(而不是跳转,见下文)超出范围允许的范围,则克服此限制可能会很麻烦;然而,6502 汇编编程技术的实践和经验以及对代码流程和组织的深刻理解通常会允许巧妙的设计,避免需要长距离分支。

CPU 架构通过让 BRx 成为一条令人难以置信的快速指令来补偿范围限制 - 如果不采用分支,则只需 2 个周期,如果是,则只需多一个周期(即 2读取操作码和操作数并在内部寄存器中设置比较掩码,然后再循环一次以将操作数添加到 PC(如果条件为真)。

相比之下,JMP 指令允许程序流跳转到 16 位地址范围内的任何位置,因为它使用两字节地址操作数 - 但表现出平坦的 3 周期成本,并且无条件的。使用 JMP 精心构建跳转表或自修改代码并通过分支进行索引,使程序员能够利用 BRx 的速度和条件性,并且只会招致“远”当条件为真时跳转'成本。

关于assembly - 为什么 ASM 6502 中的条件分支有 128 字节的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32917880/

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