我正在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。对吗?