- •Учебная дисциплина: "Организация эвм и Систем" Пояснительная записка к курсовому проекту. Вариант 18.
- •2. Описание программы-эмулятора___________________________________________8
- •1. Аналитическая часть.
- •1.1 Двоично-десятичное кодирование.
- •1.2 Арифметические действия над дд – кодами.
- •1.3 Стандарты кодирования текстов:
- •2. Описание программы-эмулятора.
- •3.Практическая разработка.
- •3.1 Описание алгоритма программы.
- •3.2 Листинг программы.
3.Практическая разработка.
3.1 Описание алгоритма программы.
Как известно, цифра, закодированная при помощи кода КОИ-7, отличается от незакодированной на число 30, а буквенное обозначение шестнадцатеричного числа – на 3716. Исходя из этой информации, принцип работы данной программы заключается в том, что константы из массива, начинающегося с адреса 500016, по очереди копируются в аккумулятор и над каждой из них осуществляются следующие действия: данное двузначное число подвергается четырём сдвигам вправо с помощью команды “RAR”, в результате чего его символы “меняются местами”. Это нужно, чтобы закодировать первый символ. Затем обнуляется первый символ результата путём применения команды “ANI 0F”. С помощью команды “CPI 0A” определяется, цифра или буква стоит на второй позиции.
На следующем этапе, в зависимости от того, цифра это или буква, результат складывается с числом 30 или 37 соответственно. После этого с исходным числом проделывается вышеописанная работа за исключением сдвигов вправо. Тем самым осуществляется кодировка второго символа исходной константы.
После того, как первая константа закодирована, получившееся в результате двухбайтное число заносится из аккумулятора в массив, начинающийся с адреса 600016.
Затем все действия повторяются применительно к каждой заданной константе в цикле.
В программе используется цикл на убывание. В паре <HL> создаётся счётчик на десять шагов, так как требуется закодировать десять констант.
3.2 Листинг программы.
Адрес |
Текст ассемблера |
Коды ассемблера |
Комментарии |
4000 |
LXI B, 500016 |
01 00 50 |
Загрузка начала исходного массива |
4003 |
LXI D, 600016 |
11 00 60 |
Загрузка начала массива кодов КОИ-7 |
4006 |
MVI H, 0Ah |
26 0A |
Создание счётчика в регистре H на 10 шагов |
4008 |
LDAX B |
0A |
Запись первого числа в аккумулятор |
4009 |
RAR |
1F |
Сдвиг вправо |
400A |
RAR |
1F |
Сдвиг вправо |
400B |
RAR |
1F |
Сдвиг вправо |
400C |
RAR |
1F |
Сдвиг вправо |
400D |
ANI 0Fh |
E6 0F |
Обнуление первой тетрады числа |
400F |
CPI 0Ah |
FE 0A |
Сравнение результата с 0Аh |
4011 |
JNC 401916 |
D2 19 40 |
Если это буква, прыжок к адресу 4019 |
4014 |
ADI 30h |
C6 30 |
Сложение результата с константой 30h |
4016 |
JMP 401B16 |
C3 1B 40 |
Прыжок к адресу 401В |
4019 |
ADI 37h |
C6 37 |
Сложение результата с константой 37h |
401B |
STAX D |
12 |
Запись получившегося числа в массив кодов КОИ-7 |
401C |
INX D |
13 |
Переход к следующей ячейке массива кодов КОИ-7 |
401D |
LDAX B |
0A |
Запись первого числа в аккумулятор |
401E |
ANI 0Fh |
E6 0F |
Обнуление первой тетрады числа |
4020 |
CPI 0Ah |
FE 0A |
Сравнение результата с 0Аh |
4022 |
JNC 402A16 |
D2 2A 40 |
Если это буква, прыжок к адресу 402А |
4025 |
ADI 30h |
C6 30 |
Сложение результата с константой 30h |
4027 |
JMP 402C16 |
C3 2C 40 |
Прыжок к адресу 402С |
402A |
ADI 37h |
C6 37 |
Сложение результата с константой 37h |
402C |
STAX D |
12 |
Запись получившегося числа в массив кодов КОИ-7 |
402D |
INX D |
13 |
Переход к следующей ячейке массива кодов КОИ-7 |
402E |
INX B |
03 |
Переход к следующей ячейке массива исходных констант |
402F |
DCR H |
25 |
Уменьшение счётчика на 01h |
4030 |
JNZ 400816 |
C2 08 40 |
Прыжок к началу цикла, если в счётчике не 00h |
4033 |
JMP 004016 |
C3 40 00 |
Выход в монитор |
4003 |
LXI D, 600016 |
11 00 60 |
Загрузка начала массива кодов КОИ-7 |
Вывод.
В результате проделанной работы поставленная цель была достигнута. При помощи стандартных команд ассемблера была создана программа, переводящая заданный массив однобайтных констант в массив кодов КОИ-7. Без сомнения существуют более рациональные алгоритмы реализации данной задачи, использующие, может быть, короткие команды, или более сжато осуществляющие цикл. Можно предположить, что в моей программной реализации задачи вторую часть цикла (кодирование второго символа данной константы) можно было соединить с первой (кодирование первого символа константы), поскольку единственным их различием являются сдвиги в первой части. Бесспорно, программа стала бы намного короче, но мне, к сожалению, этого сделать не удалось по ряду причин.
Данная работа выполнялась на домашнем персональном компьютере с характеристиками:
I845E\Cel-1.7GHz\DDR128Mb\40Gb\GeF32Mb\FDDl
Операционная система: Windows XP Professional.
Программа-эмулятор: CM-1800 (эмулятор Смирнова).
Литература
Ю. М. Казаринова «Микро - процессорный комплект К1810» Справочник Москва 1990г.
«Микропроцессоры: Архитектура и проектирование микро ЭВМ. Организация вычислительных процессов.» 1,2,3 том Москва «Высшая школа» 1986г.
Л.Н. Знаменская, С.В. Знаменский. Проблема множественности русских кодировок и новое семейство кириллических шрифтов. ( Электронная версия книги)
Также использовались методические пособия к лабораторным работам по дисциплине «Организация ЭВМ и систем» и конспекты лекций по тому же предмету.