Пространства памяти и ввода-вывода МП КР580

Адресное пространство памяти, образующее основную память МП КР580ВМ80А, представляет собой линейный одномерный массив из 64 Кб ячеек памяти, так что 16-разрядный адрес дает возможность микропроцессору непосредственно адресовать любой байт памяти. Данные в памяти могут храниться байтами или словами. Слова в памяти хранятся в двух соседних байтах (младший байт слова хранится по младшему адресу). Адресом слова является адрес его младшего байта.

В МП определено 4 способа задания месторасположения данных в памяти:

  • прямой;
  • косвенный регистровый (через 16-разрядные регистры HL, BC и DE);
  • непосредственный;
  • автоинкрементный/автодекрементный через указатель стека SP.

 

При прямой и непосредственной адресации данных могут быть доступны байты или слова, при косвенной адресации - только байты. Стековая адресация применяется только при работе со словами.

В МП ВМ80А используется изолированное адресное пространство ввода-вывода. Эта область организована в виде одномерного массива из 256 восьмиразрядных портов ввода и 256 восьмиразрядных портов вывода. Допускается только прямой способ доступа к пространству ВВ.

 

Работа с внешними устройствами МП КР580

Работа со всеми внешними устройствами эмулятора заключается в отправке или приёме на (с) соответствующий(его) устройству порт(а) МП-системы значения из (в) регистра-аккумулятора. Это осуществляется путём выполнения на эмуляторе команд ввода-вывода, таких как IN (принять из порта) и OUT (вывести в порт).

Работа с монитором

«Монитор КР580» поддерживает отдельную систему команд, обеспечивающую вывод графической или текстовой информации. Графический режим соответствует разрешению 256x256 пикселей и глубине цвета - 128 бит на пиксель, а текстовый - 39x20 символов и глубине цвета 128 бит на символ. Одновременно монитор поддерживает два этих режима, т.е. может содержать и текст и графику.

Команды засылаются в порт 00h побайтно. Различаются 3-х байтные и 2-х байтные команды:

2-х байтная. 1-ый байт: 1-ый бит - 0-текст, 1-графика; остальные 7 бит на цвет, согласно формуле: FFFFFFh(RGB) / 127 * эти_7_бит. 2-ой байт: номер символа в кодовой таблице OEM/DOS.

3-х байтная. 1-ый байт: 1-ый бит - 0-текст, 1-графика; остальные 7 бит на цвет, согласно формуле: FFFFFFh(RGB) / 127 * эти_7_бит. 2 байт: координата по X. 3 байт: координата по Y.

 

Работа с дисководом

В порт дисковода КР580 (01h) засылаются или читаются значения, что приводит к их одновременному сохранению (чтению) в (из) файл(а) реальной машины, располагающийся на дискете.

Работа с жёстким диском (порт 02h)

Аналогично работе с дисководом, только связано с жёстким диском реальной машины.

 

Работа с сетевым адаптером

Отправленные значения в порт 03h пересылаются по сети реальных машин по протоколу TCP/IP на IP-адрес, указанный в настройках.

Работа с принтером

Отправленные значения в порт 04h временно хранятся в буфере до тех пор, пока пользователь не отправит их на печать самостоятельно. Печатаемые символы на принтере реальной машины соответствуют кодировке OEM/DOS.

Практическая часть

 

Часть 1

1. Написать программу на ассемблере для МП КР580.

Занести в содержимое ячеек ОЗУ программу, начиная с ячейки 000h.

Ячейка Команда Мнемоника Комментарий
0000 3A LDA adr Прямая загрузка аккумулятора
0001 0F PRC Сдвиг содержимого аккумулятора вправо через флаг переноса
0002 00 NOP  
0003 D3 OUT N Содержимое А помещается на двунаправленную шину данных для передачи в указанный порт
0004 00 NOP  
0005 78 MOV A,B Ввод в аккумулятор кода символа
0006 D3 OUT N Вывод кода символа в монитор
0007 00 NOP  
0008 78 INR B Увеличение содержимого регистра В
0009 D3 JNC adr Условие перехода. Если указанное условие истинно, то управление передается команде, адрес которой указан во втором и третьем байтах команды перехода.
000A 00 NOP  
000B 04 NOP  
000C 76 HLT Останов
000D 00 NOP  
000E 00 NOP  
000F 15 DCR D Декремент кода символа

2. Включить отображение монитора: Меню Вид\Отобразить монитор…

4. Запустить программу на исполнение:  

- перейти на адрес ячейки 0000h (с неё будет начинаться исполнение программы);

- нажать кнопку «Выполнить программу»

 

 


- просмотреть и записать в таблицу алгоритма выполнения каждой команды (что, в какой регистр заносится и как перемещаются данные) при каждом нажатии кнопки «Выполнить команду».


Часть 2

Разработать программу вывода всех возможных символов в кодировке DOS на дисплей с изменением цвета каждого символа, провести прямую линию, каждый пиксель которой будет отличаться цветом от предыдущего.


Решение:

 

Для вывода символов на экран необходимо использовать двухбайтные команды для монитора, где 1 байт хранит информацию о цвете символа, 2 байт хранит информацию о самом символе в кодировке DOS.

Вывод на экран производится командой OUT N (где N– номер порта вывода), в нашем случае OUT 00.

Необходимо отправить 2 байта для вывода одного символа. Данные для вывода 2х байт будем располагать в регистрах B и С соответственно. После вывода 2х байт в монитор необходимо декрементировать В и С, соответственно изменится цвет и символ в следующей передаче данных.

Стартовые значения для регистров В - 7F и С –FF, после выполнения 256 циклов программы регистр С обнулится, далее необходимо вычесть его из аккумулятора, где находится также значение 00, и получить флаг Z. По команде JNZ адр16 программа будет выполнять условия цикла.

 

Ячейка Мнемоника Комментарий
0000  MVI B,7F Ввод в регистр В цвета для 1го символа
0002 MVI C,FF Ввод в регистр С кода 1го символа
0004 MOV A,B Ввод в аккумулятор цвета символа
0005 OUT 00  Вывод цвета из аккумулятора в монитор
0007 MOV A,C Ввод в аккумулятор код символа
0008 OUT 00  Вывод кода символа в монитор
000А DCR B Декремент кода цвета
000B DCR C Декремент кода символа
000С MVI A,00  Ввод в аккумулятор нуля
000E SUB C Вычитания из нуля кода символа
000F JNZ 0004 Проверка аккумулятора на ноль
0012 HLT Останов

 

Порядок занесения значений в ОЗУ:

Ячейка Мнемоника   Комментарий
0000  MVI B,7F 06 Ввод в регистр В цвета для 1го символа
0001   7F  
0002 MVI C,FF 0E Ввод в регистр С кода 1го символа
0003   FF  
0004 MOV A,B 78 Ввод в аккумулятор цвета символа
0005 OUT 00 D3  Вывод цвета из аккумулятора в монитор
0006 NOP 00  
0007 MOV A,C 79 Ввод в аккумулятор код символа
0008 OUT 00 D3  Вывод кода символа в монитор
0009 NOP 00  
000А DCR B 05 Декремент кода цвета
000B DCR C 0D Декремент кода символа
000С MVI A,00 3E  Ввод в аккумулятор нуля
000E SUB C 91 Вычитания из нуля кода символа
000F JNZ 0004   Проверка аккумулятора на ноль
0010   04  
0011   00  
0012 HLT   Останов

Просмотреть и записать в таблицу алгоритма выполнения каждой команды (что, в какой регистр заносится и как перемещаются данные) при каждом нажатии кнопки «Выполнить команду».



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: