【发布时间】: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