我在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