我正在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乘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.对吗?
答案 0 :(得分:1)
所以你有0x08和0x0C,你想要0x0C08?
查找位移
在C语言中,它就像
(0x0C << 8) | 0x08
(0x0C << 8) gives 0x0C00