Mips 计算分支目标地址时,为什么需要乘以4进行偏移?

Mips 计算分支目标地址时,为什么需要乘以4进行偏移?,mips,Mips,首先为我的英语道歉,我是来自韩国的学生 我明白当我把C代码翻译成MIPS语言时,地址需要乘以4。 i、 e)int x=A[1]=>加载t1 1*4(A的地址) 但我不知道为什么分支机构目标地址也是如此 从这个问答 我读到偏移量需要字对齐,因为PC地址是如此。 但是,偏移地址不需要除以4吗,因为PC是字对齐的,偏移地址是字节对齐的 我想我在这里有一些误解。MIPS指令都是4字节长的,而且它们总是位于偶数字边界上。因此,这适用于所有指令地址-分支源和分支目标-因此所有分支偏移量的低位2位为0,因为

首先为我的英语道歉,我是来自韩国的学生

我明白当我把C代码翻译成MIPS语言时,地址需要乘以4。 i、 e)int x=A[1]=>加载t1 1*4(A的地址)

但我不知道为什么分支机构目标地址也是如此

从这个问答

我读到偏移量需要字对齐,因为PC地址是如此。 但是,偏移地址不需要除以4吗,因为PC是字对齐的,偏移地址是字节对齐的


我想我在这里有一些误解。

MIPS指令都是4字节长的,而且它们总是位于偶数字边界上。因此,这适用于所有指令地址-分支源和分支目标-因此所有分支偏移量的低位2位为0,因为它们是两个字对齐指令地址之间的差异

对指令中始终为0的位进行编码是浪费的,因此会忽略它们

这两个位被重新调整用途,以允许更大的分支立即移位,而不是将已知始终为零的位编码到指令字段中。这就是为什么根据编码还是解码,存在a/4或*4


(事实上,PC寄存器将始终为低两位保留零,因此硬件甚至不需要PC的32位寄存器,30位寄存器就足够了,增量为+1而不是+4-如果是我,我会尝试在内部设置硬件。)

谢谢您的回答!所以,乘法只是为了重现两个0。。。?向左移位?是的,没错,那两个总是零位。可能是通过左移位,但由于移位量是恒定的,所以可以仅通过接线来完成,或者,作为另一种方法,但根本不需要它们。那么为什么我的教科书和上面的问答链接没有这样解释呢?我不明白为什么它被称为“单词对齐”,它们只是展示了原始的机制/公式,相当恰当地激发了为什么这样做或为什么这样做。这个链接确实试图解释它,但它没有在故事的开头开始解释;它开始解释基本的公式,并开始深入其背后的推理。单词对齐就是我们所说的地址,其低位2位为零,也就是可以被4整除的地址。