【BUAA_CO_LAB】Pre_MIPS指令集_MARS帮助文档整理_扩展指令

MARS帮助文档整理_扩展指令

// 在之前记录的基础指令上进行组合与扩展 → 编译时可以看到是哪些组合

// 主要是指令可以直接执行与立即数 / 地址(包括标签)/ 寄存器地址与立即数加和 / 寄存器地址与立即数与label加和的操作,取代基本操作中大量出现的$t3,也即不用分解成u、i等描述了,当然,使用也是合法的,后面不列出来了

  • add $t1, $t2, -100以及add $t1, $t2, 100000

    直接用add指令进行与16bit和32bit立即数的加和

  • and $t1, 100以及and $t1, $t2, 100

    直接用and指令进行与立即数的与运算

  • b label

    直接无条件跳转

  • beq等条件跳转指令可以直接把用于比较运算的$t2换成立即数了

  • 基础指令中二目操作的alu' $t1, $t2都可以换成alu' $t1, $t2, $t3了,即将$t2$t3运算的结果存到$t1

  • mul$t3同理更换

    mulo $t1, $t2, $t3$t1 设置为 $t2$t3 的乘积的低 32 位(考虑溢出)→ 同理$t3可更换

  • neg $t1, $t2$t1$t2的取反

  • not $t1, $t2$t1$t2的按位取反

  • rem $t1, $t2, $t3$t1$t2 / $t3的余数 (Remainder)

  • rol $t1, $t2, $t3$t1置为$t2$t3中指定的位数向左移动的值 (Rotation Left)

    • ror同理
  • 基础指令中的“小于则置”slt可以扩展成其他关系了,如seqsgesgtslesne

  • 基础指令中的sdc1可以分解成sd了:将$t1和下一个寄存器的内容存储到从有效内存字地址开始的64位

  • 基础指令中默认对齐,当未对齐时,可以使用unaligned load做符号扩展或零扩展

    ulh $t1, ($t2)ulhu $t1, ($t2):未对齐加载半字,将$t1设置为从有效内存字节地址$t2开始做符号扩展或零扩展得到的16位值

    ulw同理

    存储也同理:ushusw

  • LOAD系列

    • la $t1, ($t2)$t1地址$t2中存储的内容

      [同理]la, $t1, -100la $t1, 100la $t1, 100($t2)la $t1, label($t2)la $t1, label + 100000($t2)等等

    • lb $t1, ($t2)lb $t1, 100等等

      lb换成lhlwlwllwrll等都同理(后一个操作数的更换)

    • ld $t1, ($t2)

      Load Doubleword:将$t1下一个寄存器设置为从有效内存字地址$t2开始的 64 位值(因为一个默认只能放32bit嘛)

      • ld $t1, -100($t2)

        有效内存字节地址是$t2与有符号立即数的加和

        [同理]替换成100000($t2)label($t2)label + 100000($t2)等等

      • ldc1 $f2, ($t2) 置CP1寄存器$f2$f3为从有效内存字地址$t2开始的 64 位值

        $t2换成那老几样都同理

        lw也有lwc1操作

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值