Предположим, у нас есть 64-битный адресно-словачный компьютер, и мы хотим запрограммировать его для вывода символа 5x7, хранящегося в виде двоичного изображения (например, приведенного ниже), на отображение с отображением в памяти.
Поскольку у нас есть 5 x 7 = 35 пикселей на символ, мы можем сохранить символ, используя 35 бит в одном слове. С младшим значащим битом, начинающимся с левой стороны слова, и с каждым пикселем в изображении, представленным n- м битом, как показано выше, число «3» выше будет сохранено в памяти как: 01110100010000100110000011000101110, за которым следуют 29 неиспользованных биты установлены в 0.
Это как символы были / хранятся на старых / современных компьютерах? Или вместо этого они используют один байт / слово на пиксель?
Если они хранятся таким образом, то какая бы подпрограмма в сборке / машинном коде (использующая не более чем элементарные инструкции, такие как побитовые, арифметические операции и операции передачи данных из архитектуры набора команд компьютера) использовалась для преобразования этих данных в изображение на как выглядит дисплей? Будет ли это что-то вроде:
- Сохраните координаты отображения x и y для текущего пикселя, который будет обновлен в определенном регистре.
- Сохраните два выбранных значения RGB (в данном случае 0,255,0 для зеленого и 0,0,0 для черного) в двух других отдельных регистрах.
- Пусть еще два регистра действуют как счетчики, инициализированные 5 и 7, чтобы отслеживать текущую строку и столбец визуализируемого изображения.
- Проверьте, не равен ли регистр столбца 0. Если это не так, проверьте, установлен ли LSB для битовой карты на 1, затем И соответствующий регистр значений RGB с регистром координат x и y в зависимости от результата, затем MOV этот результат на дисплей выходного регистра.
- Уменьшите регистр счетчика строк на 1, проверьте, равен ли он 0. Если это так, установите его обратно в 5, увеличьте координату y на 1 и уменьшите счетчик столбцов на 1.
- Сдвиньте регистр, удерживающий растровое изображение на 1 бит влево.
- JMP к инструкции 4.
Есть ли более простой или эффективный способ сделать это? Кажется, что даже такая простая вещь, как рендеринг одного небольшого текстового символа, занимает довольно большое количество операций и занимает около 200 циклов ЦП.
Наконец, есть ли какие-нибудь хорошие книги или ресурсы по машинному коду для отображения изображений с нуля, потому что я не смог их найти, поскольку они либо затушевывают этот конкретный предмет, либо код написан на языке высокого уровня или ассемблер использует макросы, которые все «обманывают» и не объясняют, что в основном происходит на самом низком уровне.