位算术-在一位中连接两个结果



我在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乘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。正确的

那么您有0x08和0x0C,您想要0x0C08吗?

查找移位

在类C语言中,它有点像

(0x0C << 8) | 0x08
(0x0C << 8) gives 0x0C00

最新更新