Различия между версиями 1 и 2
Версия 1 от 2020-04-10 19:42:39
Размер: 3724
Редактор: FrBrGeorge
Комментарий:
Версия 2 от 2020-04-10 19:52:21
Размер: 3725
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 49: Строка 49:
{{{#!highlight asm {{{#!highlight nasm

Задачка для самостоятельного решения по MIPS

На устройстве «MARS Bitmap Display», настроенным так:

display.png

Вывести своё имя-фамилию-отчество (можно не своё, но чтобы отличалось от других) в виде растровой картинки, смасштабированной до размера 512×256

Предполагается это делать примерно так.

Сначала получите растровый вариант ФИО. Например, такой:

........#####.............
.......##..##.............
.......##..##.##...##.....
.......##..##.##..###.....
.......##..##.##.#.##.....
.......##..##.###..##.....
......##...##.##...##.....
..........................
.......#####..............
......##...##.............
......##......##...##.....
......##......##..###.....
......##......##.#.##.....
......##...##.###..##.....
.......#####..##...##.....
..........................
..##..##..................
..##..##..................
..##..##..##...##.##...##.
..##..##..##...##.##...##.
..##..##..####..#.#######.
..##..##..##..#.#.##...##.
..#######.####..#.##...##.
........#.................

Это можно сделать, например, с помощью питоньего модуля pyfiglet:

$ python3 -m pyfiglet -w 28 -j center -f banner "Ли
Си
Цын"

или любым другим способом.

Затем превратите это в ассемблерный код, описывающий двумерный массив байтов:

   1 .data
   2 Name:
   3         .asciiz "........#####............."
   4         .asciiz ".......##..##............."
   5         .asciiz ".......##..##.##...##....."
   6         .asciiz ".......##..##.##..###....."
   7         .asciiz ".......##..##.##.#.##....."
   8         .asciiz ".......##..##.###..##....."
   9         .asciiz "......##...##.##...##....."
  10         .asciiz ".........................."
  11         .asciiz ".......#####.............."
  12         .asciiz "......##...##............."
  13         .asciiz "......##......##...##....."
  14         .asciiz "......##......##..###....."
  15         .asciiz "......##......##.#.##....."
  16         .asciiz "......##...##.###..##....."
  17         .asciiz ".......#####..##...##....."
  18         .asciiz ".........................."
  19         .asciiz "..##..##.................."
  20         .asciiz "..##..##.................."
  21         .asciiz "..##..##..##...##.##...##."
  22         .asciiz "..##..##..##...##.##...##."
  23         .asciiz "..##..##..####..#.#######."
  24         .asciiz "..##..##..##..#.#.##...##."
  25         .asciiz "..#######.####..#.##...##."
  26         .asciiz "........#................."
  27 Endname:
  • Все строки одинаковой ширины (26)
  • В конце каждой строки есть нулевой байт (27-й)
  • Endname означает адрес конца массива (может пригодиться)

Далее пишем к нему программу, которая для каждой точки графического дисплея

  • определяет её X и Y-координату
  • с помощью функции масштабирования, описанной на лекции, определяет, какму символу в Name эта точка экрана соответствует

  • Записывает туда один из двух цветов

Должно получиться что-то вроде этого: result

FrBrGeorge/Misc/TaskArch2020 (последним исправлял пользователь FrBrGeorge 2020-04-12 22:33:28)