Я делаю домашнее задание в симуляторе 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.
Итак, мой первый вопрос: как я могу использовать битовую алгебру для объединения результата двух умножений?
И мой второй вопрос таков: представьте, что мы находимся в последней строке и столбце пикселей: 64 * 4 и 64 * 4. Результат равен 256, и мы не можем использовать только 8 бит для представления этого числа, поэтому, вероятно, мне не следует использовать пиксели. От 1 до 64, но от 0 до 63. Верно?
0
. - person Peter Cordes   schedule 02.08.2018