繁体   English   中英

了解不同位 ISA 的跳转地址计算

[英]Understanding jump address calculation for different bit ISA

我试图了解跳转地址是如何计算的。 到目前为止,使用 MIPS 指令结构(32 位 ISA),我能够理解这一点。 阅读我得到的一些材料后的解决方案是:连接以下内容:

  1. PC 的高 4 位
  2. 目标地址
  3. 低00后

现在如果我得到一个不同的位 ISA 比如说 8 位。 其中 J 指令格式为:

  1. 操作码 - 2 位
  2. 目标地址 - 6 位

目标地址会以相同的方式计算还是以不同的方式计算?

请帮我理解。

如果没有记录,您必须从一些示例机器代码或工作汇编程序对 ISA 设计进行逆向工程 所有商业 ISA记录了它们的机器代码是如何工作的,在你期望使用机器代码的地方教授 ISA 也是如此,而不仅仅是 asm 源代码。


根据您的建议,我们可以尝试猜测:

如果有一条 1 字节指令,则不能假定指令与 4 字节边界对齐,尽管它几乎不可能要求跳转目标仍然对齐。 但是,如果不需要 alignment,那么您就不会左移立即数来创建低 2 位归零的地址。

在 1 字节跳转指令中,我希望 6 位用作相对偏移量(如 MIPS b ,例如beq $zero,$zero, target ),而不是像 MIPS j那样的绝对段,因为 6 位segment-absolute 经常会遇到无法跳过附近边界的问题。 (64 字节的块非常小,在j内,你经常有一个无法跨越的边界。)我假设还有一个更长的跳转指令,范围更大,以便可以尾调用其他指令超过 -32..+31 字节的函数

但是当然任何设计都是可能的,甚至可能使用立即数作为 2 的幂来跳转多远,所以你可以向前或向后跳跃 2、4、8、16、.. 字节。 或者到一个段内的那个 position。 这将很难利用,但至少可以设计。

我提到最后一种可能性主要是为了表明如果没有您正在使用的 ISA 的文档,您将无法做出任何假设。 (如果它在商业上取得成功,您通常可以猜到大部分设计都是合理的,但有时在考虑整个设计时,它们本身看起来很疯狂的事情是有道理的。或者只是祖传设计的遗留包袱,例如 x86。 )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM