美文网首页
计组2-10 MIPS中32位立即数和寻址

计组2-10 MIPS中32位立即数和寻址

作者: 这个杀手蹲了半天有点冷 | 来源:发表于2018-11-28 17:34 被阅读0次

    32位立即数

    一般来讲常量不会多余16位,以防万一所以出现了lui(高位)和ori(低位)的指令

    lui $s0, 61把61加载到高16位
    ori $s0, 52把52加载到低16位

    注意:指令addi是将指令最左边的16位立即数复制到高16位去

    分支和跳转中的寻址

    MIPS的跳转指令j是最简单的寻址方式,除了6位操作码其余26位为地址
    分支指令除地址外还须指定两个操作数
    bne $s, $s1, Exit
    分别占6位、5位、5位、16位,其中程序地址为16位太小,意味着程序不能大于2^16
    解决办法是指定一个加到分支地址的寄存器
    程序计数器(PC) = 寄存器 + 分支地址
    PC包含了原有的16位当前指令地址,其余的16位作为下一个指令地址,这样转移2^15个字到达下一指令
    这就是PC相对寻址。

    Loop:
      bne $t0, $s5, Exit//这里的Exit是一个分支地址2个字或者8个字节
      xxxxxxxxxxxxxxx//不会执行本行代码,因为PC收到上一行的2个或8个字节的地址,所以本行地址 + 2字 或 8字节,直接跳到Exit
      j Loop
    Exit:
    

    此过程中没用使用(+12跳转)也没有用完整目的地址。

    如果要跳转很远距离,可在跳转指令附近加一个j Exit

    相关文章

      网友评论

          本文标题:计组2-10 MIPS中32位立即数和寻址

          本文链接:https://www.haomeiwen.com/subject/tskzqqtx.html