【问题标题】:Bit arithmetic - concatenate two results in one bit位算术 - 将两个结果连接到一位
【发布时间】:2012-04-20 05:41:06
【问题描述】:

我正在MARS simulator(大会)做作业,但我被困在一个部分。

我们必须将一个 32 位字加载到寄存器中。

0 到 7 位表示蓝色,8 到 15 位表示绿色,16 到 23 位表示红色。其余位设置为零。

例如,黄色为 0x00ffff00。

 [31]       [24]|[23]         [16]|[15]         [8] | [7]         [0]
+----+-   -+----+----+- ... -+----+----+- ... -+----+----+- ... -+----+
| 0  | ... | 0  |    RED COLOR    |   GREEN COLOR   |   BLUE COLOR    |
+----+-   -+----+----+- ... -+----+----+- ... -+----+----+- ... -+----+

即内存顺序中的 BGR0 颜色格式,或本地字节序机器字中的 0RGB。

作业分为三个任务,我在做最后一个。我们有一个 64 x 64 像素的显示器(每个像素为 4*4,因此总宽度和高度为 256)。红色始终设置为 0,绿色为 4 * 行数,蓝色为 4 * 列数。假设我们在 2 行和 3 行,绿色值为 2*4,蓝色值为 3*4。所以,在这个例子中,在十六进制中,12 是 0xc,8 是 0x08,应该加载到寄存器中的数字是 0x00000c08。

所以我的第一个问题是如何使用位代数来连接 2 次乘法的结果?

我的第二个问题是:假设我们在最后一个像素行和列:64 * 4 和 64 * 4。结果是 256,我们不能只使用 8 位来表示这个数字,所以我应该不使用像素 1 到 64,而是使用 0 到 63。对吗?

【问题讨论】:

  • 使用二进制移位或乘以 2^n。顺便问一下哪个处理器?
  • 认为 0-63 而不是 1-64。 63 = 0x3F 63 * 4 = 0x3F
  • 带有 x64 处理器的 Windows。提供的示例中的 n 是什么?对不起,我不明白。
  • 是的,在计算中,您通常从 0 开始计数,而不是 1,因此您不会浪费 0 位模式。

标签: assembly binary bit-manipulation mips mars-simulator


【解决方案1】:

所以你有 0x08 和 0x0C 并且你想要 0x0C08 ?

查找位移

在类似 C 的语言中,它会是这样的

(0x0C << 8) | 0x08

(0x0C << 8) gives 0x0C00

【讨论】:

  • 你不是说(0x0C &lt;&lt; 8) | 0x08吗?
  • 是的,我的意思是,很高兴看到有人关注
  • @TonyHopkinson 谢谢。你的建议解决了我的问题:)
猜你喜欢
  • 2013-12-04
  • 2011-09-19
  • 1970-01-01
  • 2013-09-18
  • 1970-01-01
  • 1970-01-01
  • 2013-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多