[英]Understanding jump address calculation for different bit ISA
我试图了解跳转地址是如何计算的。 到目前为止,使用 MIPS 指令结构(32 位 ISA),我能够理解这一点。 阅读我得到的一些材料后的解决方案是:连接以下内容:
现在如果我得到一个不同的位 ISA 比如说 8 位。 其中 J 指令格式为:
目标地址会以相同的方式计算还是以不同的方式计算?
请帮我理解。
如果没有记录,您必须从一些示例机器代码或工作汇编程序对 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.