Припустимо, у нас є 64-розрядний комп'ютер, адресований словом, і ми хочемо запрограмувати його для виведення символу 5х7, який зберігається у вигляді бітового зображення бінарного зображення (такого, як показано нижче) на відображенні на карті пам'яті.
Оскільки у нас 5 х 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 циклів процесора.
Нарешті, чи є якісь хороші книги чи ресурси на машинному рівні для відображення зображень з нуля, тому що я не зміг знайти жодного, оскільки вони або замальовують цю конкретну тему, або код написаний мовою високого рівня або Асемблер, що використовує макроси, всі вони "обманюють" і не пояснюють, що принципово відбувається на найнижчому рівні.