位算术 - 将两个结果连接成一位

时间:2012-04-06 16:28:04

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

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

1 个答案:

答案 0 :(得分:1)

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

查找位移

在C语言中,它就像

(0x0C << 8) | 0x08

(0x0C << 8) gives 0x0C00