0

我正在MARS 模拟器(Assembly)中做作业,但我被困在一个部分。

我们必须将一个 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。对吗?

4

1 回答 1

1

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

查找位移

在类似 C 的语言中,它会像

(0x0C << 8) | 0x08

(0x0C << 8) gives 0x0C00
于 2012-04-06T16:47:56.097 回答