【问题标题】:Can someone tell me what this mips question means in english?有人能告诉我这个 mips 问题在英语中是什么意思吗?
【发布时间】:2018-10-06 23:00:58
【问题描述】:

找到最短的 MIPS 指令序列,从寄存器 $t0 中提取第 16 位到第 11 位,并使用该字段的值替换寄存器 $t1 中的第 31 位到第 26 位,而不更改寄存器 $t1 的其他 26 位。 你能帮助更清楚地解释这一点吗?还是帮我做?

【问题讨论】:

  • 哪一部分不清楚?
  • 全部,我什至不知道从哪里开始

标签: byte mips


【解决方案1】:

找到最短的 MIPS 指令序列,从寄存器 $t0 中提取第 16 位到第 11 位,并使用该字段的值替换寄存器 $t1 中的第 31 位到第 26 位,而不更改寄存器 $t1 的其他 26 位。你能帮助更清楚地解释这一点吗?还是帮我做?

它表示在 32 位 MIPS 寄存器 $t0 中,位索引为 31(最高有效位)-0(最低有效位)采用范围 16-11(含)索引的位子集.所以,

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 (16 15 14 13 12 11) 10 9 8 7 6 5 4 3 2 1 0

然后,将它们复制到寄存器$t1 的位由范围“31 到 26”索引,

(31 30 29 28 27 26) 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

$t1 (25-0) 中的其余位不应更改。

你能想出用srl, sll, or(右移、左移或)的方法吗?

srl $t0, $t0, 11 # t0 = t0 >> 11
sll $t0, $t0, 26 # t0 = t0 sll $t1, $t1, 5
srl $t1, $t1, 5
或 $t1、$t1、$t0

你看到我们在这里做了什么吗?

【讨论】:

    【解决方案2】:

    我不知道 MIPS,但这都是关于位操作的:

    看起来 MIPS 中的寄存器是 32 位的。 假设位编号为 0 到 31,最重要的一位是最左边的一位,它是位号 31。

    要提取第 16..11 位(总共 6 位),您必须执行 6 位与运算,例如 $t0 & 0b00000000 00000001 11111000 00000000。

    要替换 $t1 中的位比较棘手:首先您必须将位 31..26 设置为零,例如 $t1 & 0b00000011 11111111 11111111 11111111

    接下来,您必须将源左移 15 位(从 16 到 31 有 15 位),例如 $t0

    最后你需要 OR'em,比如 $t1 = $t1 | $t0

    【讨论】: