- •Учебная дисциплина: "Организация эвм и систем"
- •Реферативный материал. Двоично-десятичная система счисления.
- •Преобразование двоичных чисел в двоично-десятичные.
- •Форматы представления десятичных чисел
- •Ascii-коды десятичных цифр
- •Операции двоично-десятичной арифметики
- •Сложение
- •Вычитание
- •Описание программы-эмулятора.
- •Авторское описание эмулятора
- •Обоснование выбора
- •Практическая часть. Алгоритм решения задачи
- •Полный листинг программы с комментариями. Процедура записи в память служебных фраз.
- •Вход в главную часть программы.
- •Процедура ввода исходных данных.
- •Процедура преобразования исходного массива 16ричных констант в их 2-10 коды.
- •Процедура преобразования 2-10 кодов в коды кои-7.
- •Выход из процедуры кои-7 преобразования.
- •Процедура вывода на экран результатов 2-10 преобразования.
- •Процедура вывода на экран результатов преобразования в коды кои-7.
- •Выводы.
- •Список использованных источников.
Практическая часть. Алгоритм решения задачи
Для решения задачи, вся программа была разбита на отдельные почти самостоятельные части, так называемые процедуры. Каждая процедура решает свою конкретную задачу, использует память и РОН по-разному, а так же записана с отдельного адреса. После выполнения одной процедуры происходит безусловный переход к следующей согласно логичному порядку выполнения программы. То есть сначала выводится так называемая служебная фраза- приветствие программы и запрос на ввод исходных данных, затем выполняется процедура чтения 16ричных констант. После этого работает основная программная часть- преобразование введённых констант в двоично-десятичные коды и коды КОИ-7.
Приведённая блок-схема лишь иллюстрирует общий алгоритм и наглядно показывает работу программы, как пяти отдельных частей- процедур. Чтобы яснее представить алгоритм программы, необходимо узнать алгоритм каждой процедуры. Но целесообразно представить алгоритм работы только одной, по сути главной, процедуры- процедуры преобразования массива исходных 16ричных констант в двоично-десятичные двухбайтные числа.
Данная блок-схема иллюстрирует работу процедуры преобразования исходного массива 16ричных констант, записанного с адреса 5000 и сохранения его в преобразованном двухбайтном виде с адреса 6000.
Полный листинг программы с комментариями. Процедура записи в память служебных фраз.
Распределение памяти:
B
C
D
E
H
L
Не используется.
Адрес для записи текущего введённого символа.
Адрес |
Данные |
Ассемблерный код |
Комментарий |
3300 3301 3302 |
21 00 35 |
LXI H, 3500H
|
Загрузка в пару <H,L> адреса, в который будет произведена запись. |
3303 3304 3305 |
CD 55 00 |
CALL 0055H
|
Вызов процедуры чтения символа с клавиатуры в аккумулятор. |
3306 3307 |
FE 30 |
CPI 30H
|
Сравнение аккумулятора и 30ки, чтобы проверить является ли введённый символ 0. |
3308 3309 330A |
CA 20 33 |
JZ 3320H
|
Если символ 0, то флаг Z примет значение 1 и в таком случае необходимо закончить чтение. В других случаях продолжить выполнение процедуры. |
330B |
77 |
MOV M, A |
Запись символа в память с адресом в <H,L> |
330C |
23 |
INX H |
Переход к следующему адресу. |
330D 330E 330F |
C3 03 33 |
JMP 3303 |
Возврат к началу процедуры. |
… |
… |
… |
… |
3320 |
AF |
XRA A |
Обнуление аккумулятора. |
3321 |
77 |
MOV A,M |
Запись нуля в память. |
3322 3323 3324 |
CD 00 4F |
CALL 0040 |
Завершение процедуры. Выход в монитор. |
Вход в главную часть программы.
Адрес |
Данные |
Ассемблерный код |
Комментарий |
4000 4001 4002 |
С3 00 45 |
JMP 4500
|
Переход в процедуру ввода исходных данных. |
Процедура ввода исходных данных.
Распределение памяти:
B
C
D
E
H
L
Счётчик цикла (в <E>) ввода. Содержит A (десять циклов).
Адрес для записи текущего введённого числа.
Адрес |
Данные |
Ассемблерный код |
Комментарий |
4500 4501 4502 |
01 00 35 |
LXI B,3500
|
Загрузка в <B,C> адреса записанной ранее фразы «введите 10 16-ричных констант» |
4503 4504 4505 |
СD 49 00 |
CALL 0049
|
Вызов процедуры перехода на новую строку. |
4506 4507 4508 |
CD 4C 00 |
CALL 004C
|
Вызов процедуры вывода на экран фразы записанной в памяти с адресом в паре <B,C> вплоть до ячейки с 0. |
4509 450A 450B |
CD 49 00 |
CALL 0049
|
Вызов процедуры перехода на новую строку. |
450C 450D 450E |
21 00 30 |
LXI H,5000
|
Загрузка в <H,L> адреса, куда будет производиться чтение констант. |
450F 4510 4511 |
11 0A 00 |
LXI D,000A
|
Запись в пару <D,E> числа А- счётчика цикла чтения-записи. |
4512 4513 4514 |
CD 67 00 |
CALL 0067
|
Чтение 16-ричного однобайтного числа с клавиатуры в аккумулятор. |
4515 |
77 |
MOV M,A |
Запись числа в аккумуляторе в память. |
4516 |
1D |
DCR E |
Уменьшение счётчика цикла. |
4517 4518 4519 |
CA 30 45 |
JZ 4530
|
Если он достиг нуля, то необходимо выйти из процедуры чтения констант и записи их в память. |
451A |
23 |
INX H |
Переход к следующему адресу. |
451B 451C 451D |
CD 49 00 |
CALL 0049
|
Переход на новую строку. |
451E 451F 4520 |
C3 10 45 |
JMP 4512 |
Переход к началу процедуры чтения. |
… |
… |
… |
… |
4530 |
AF |
XRA A |
Обнуление аккумулятора. |
4531 4532 4533 |
C3 03 40 |
JMP 4003 |
Переход к следующей части программы- преобразованию записанных в память чисел в 2-10 коды. |