【问题标题】:How to make Most Significant Bit of a binary number= 1如何使二进制数的最高有效位= 1
【发布时间】:2012-10-14 14:36:31
【问题描述】:

如何在 MIPS 中使二进制数的 MSB 等于 1?我尝试使用屏蔽来做到这一点,但出现错误,还有其他方法吗?

通过掩码使 MSB=1 的代码给了我错误。

srl $s3,$s3,1

// error out of range

ori $s3,$s3,2147483648       # making MSB = 1

问候

【问题讨论】:

    标签: assembly mips 32-bit pcspim bitwise-or


    【解决方案1】:

    用于立即数操作数的指令的 MIPS 操作码格式只有 16 位可用于立即数。

    这 16 位通常用于表示用于逻辑运算(例如此处的 ori)的无符号 16 位值(即 0 到 65535,或 0x0000 - 0xFFFF 十六进制)或有符号 16 位值(-32768 到 32767,或 0xFFFF8000 到 0x00007FFF)用于算术运算。

    因此,您不能在此处直接使用 2147483648 (0x80000000) 作为立即值 - 因此会出现“超出范围”错误。

    但是有一条指令可以将 16 位立即数加载到寄存器的 top 16 位中(将最低位设置为 0):lui(加载高位立即数)。

    因此,您可以将 0x80000000 加载到这样的寄存器中,然后使用您的值 or 它:

    lui  $t0, 0x8000
    or   $t0, $t0, $s3
    

    【讨论】:

    • 我将一个数组初始化为 .byte 'a','b','c' 当我尝试访问它时,我得到内存超出范围的错误。这是我的问题的链接,请检查它。stackoverflow.com/questions/12881850/…
    猜你喜欢
    • 1970-01-01
    • 2021-07-11
    • 2014-02-22
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多