You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在这段MIPS汇编代码中使用ori指令?

为什么这段MIPS汇编用ori指令加载50000?

先明确核心背景:50000转十六进制是0xC350,刚好是16位无符号数。

MIPS的I型指令(比如ori、addi)的立即数字段只有16位,而寄存器是32位,所以加载时必须把16位立即数扩展到32位,这里的关键是两种扩展方式的区别:

  • addi这类算术指令会做符号扩展:如果16位立即数的最高位是1(0xC350的最高位就是1),高16位会被填满1,最终得到0xFFFFC350,这对应十进制的-15536,完全不是我们要的50000。
  • ori是逻辑或指令,它做零扩展:不管立即数最高位是什么,高16位都填0,0xC350扩展后就是0x0000C350,正好是十进制的50000,符合赋值需求。

再看指令本身:$zero寄存器的值永远是0,ori $t0, $zero, 0xC350就相当于把零扩展后的32位数值直接写入$t0,刚好完成了加载目标数的操作。

要是不用ori,对于超过16位的数才需要用lui(加载高位)加ori组合,但这里50000刚好能放进16位,单条ori就足够高效。

内容的提问来源于stack exchange,提问作者Loylis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 06:10:28