MIPS跳转指令编码:为什么左移,为什么保持PC的高4位?

Elmasry

在跳转指令中,

  1. 为什么我们将26位地址转换为28位?
  2. 为什么我们将PC中最左边的4位添加到28位?
马丁·罗森瑙

为什么我们将26位地址转换为28位?

当我们将地址移位2位时,跳转指令的参数(地址)可以在0 ... 2 ^ 28-1的范围内。

如果我们不转移地址,则只能在0 ... 2 ^ 26-1范围内。

这意味着我们只能使用地址空间的1/4。

另一方面,不转移地址的明显好处将不是真正的好处:

不移动地址将允许使用不可被4整除的地址。但是,由于指令始终位于可被4整除的地址处,因此跳转指令到不可被4整除的地址是没有意义的。

顺便说一句:其他CPU(例如MC68000)确实使用16位“分支”(跳转)指令,其中低位始终必须为零-因此,如果CPU将地址移位1,则可以寻址更多的内存。

为什么我们将PC中最左边的4位添加到28位?

PC寄存器为32位宽,跳转指令仅包含26位。所以我们必须从其他地方取6位:

PC寄存器的低2位始终为零,因此我们仍然必须考虑“左” 4位。

如果我们总是将剩余的4位设置为零,我们只能跳转到位于前256 MB内存中的某些代码。

如果我们根本不修改PC的左4位,则可以跳转到与跳转指令本身位于256 MB范围内的某些代码。

让我们考虑一个for()orwhile()循环:

在这样的循环结束时,有一个跳转指令指向循环的开始。

假定程序不必位于前256 MB内存中。

更可能的是:

循环的开始与循环的末尾(跳转指令)在相同的256 MB范围内,还是循环的开始在内存的前256 MB内部?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么分支指令比跳转指令快?

来自分类Dev

为什么在golang中没有左移64位溢出?

来自分类Dev

为什么在Python和Java中按位左移返回不同的结果?

来自分类Dev

Elixir中的左旋转按位操作/为什么缺少签名的左移?

来自分类Dev

为什么从第16位开始在无符号int上左移?

来自分类Dev

为什么在MIPS中使用bgezal和bltzal基本指令而不是伪指令?

来自分类Dev

为什么调用和跳转指令相对于下一条指令而不是当前指令使用位移?

来自分类Dev

为什么64位cpu不存在高内存?

来自分类Dev

哈希(#)链接导致内容跳转-为什么?

来自分类Dev

哈希(#)链接导致内容跳转-为什么?

来自分类Dev

MIPS:ISR为什么被rdpgpr $ sp,$ sp包围?wrpgpr $ sp,$ sp指令?

来自分类Dev

为什么霍夫曼编码好?

来自分类Dev

为什么编译器为什么要在从函数返回的MIPS“ j”指令之后放置一条指令?

来自分类Dev

为什么李比孩子高?

来自分类Dev

为什么List保持不变?

来自分类Dev

为什么mips称为加载/存储架构?

来自分类Dev

为什么将这种左移操作的结果视为不确定的?

来自分类Dev

为什么在Java中左移以更改符号值

来自分类Dev

为什么我需要左移相加结果之前?

来自分类Dev

为什么相对文本向左移动,导致溢出?

来自分类Dev

为什么 GCC 会产生跳转以跳过一条廉价指令,这是否有充分的理由?

来自分类Dev

为什么“使用命名空间”指令在C#中被接受为编码实践?

来自分类Dev

为什么添加更多变量和/或指令时程序大小保持不变?

来自分类Dev

为什么在Huffman中将这些模式编码为(Photoshop生产的)JPG文件中的位流?

来自分类Dev

为什么没有ICMP指令?

来自分类Dev

为什么要使用ROL指令?

来自分类Dev

为什么hvc使Undefined指令异常?

来自分类Dev

为什么此LEA指令无法编译?

来自分类Dev

为什么为通用发出“盒”指令?

Related 相关文章

  1. 1

    为什么分支指令比跳转指令快?

  2. 2

    为什么在golang中没有左移64位溢出?

  3. 3

    为什么在Python和Java中按位左移返回不同的结果?

  4. 4

    Elixir中的左旋转按位操作/为什么缺少签名的左移?

  5. 5

    为什么从第16位开始在无符号int上左移?

  6. 6

    为什么在MIPS中使用bgezal和bltzal基本指令而不是伪指令?

  7. 7

    为什么调用和跳转指令相对于下一条指令而不是当前指令使用位移?

  8. 8

    为什么64位cpu不存在高内存?

  9. 9

    哈希(#)链接导致内容跳转-为什么?

  10. 10

    哈希(#)链接导致内容跳转-为什么?

  11. 11

    MIPS:ISR为什么被rdpgpr $ sp,$ sp包围?wrpgpr $ sp,$ sp指令?

  12. 12

    为什么霍夫曼编码好?

  13. 13

    为什么编译器为什么要在从函数返回的MIPS“ j”指令之后放置一条指令?

  14. 14

    为什么李比孩子高?

  15. 15

    为什么List保持不变?

  16. 16

    为什么mips称为加载/存储架构?

  17. 17

    为什么将这种左移操作的结果视为不确定的?

  18. 18

    为什么在Java中左移以更改符号值

  19. 19

    为什么我需要左移相加结果之前?

  20. 20

    为什么相对文本向左移动,导致溢出?

  21. 21

    为什么 GCC 会产生跳转以跳过一条廉价指令,这是否有充分的理由?

  22. 22

    为什么“使用命名空间”指令在C#中被接受为编码实践?

  23. 23

    为什么添加更多变量和/或指令时程序大小保持不变?

  24. 24

    为什么在Huffman中将这些模式编码为(Photoshop生产的)JPG文件中的位流?

  25. 25

    为什么没有ICMP指令?

  26. 26

    为什么要使用ROL指令?

  27. 27

    为什么hvc使Undefined指令异常?

  28. 28

    为什么此LEA指令无法编译?

  29. 29

    为什么为通用发出“盒”指令?

热门标签

归档