Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Записка.doc
Скачиваний:
32
Добавлен:
16.04.2015
Размер:
347.14 Кб
Скачать

Практическая часть. Алгоритм решения задачи

Для решения задачи, вся программа была разбита на отдельные почти самостоятельные части, так называемые процедуры. Каждая процедура решает свою конкретную задачу, использует память и РОН по-разному, а так же записана с отдельного адреса. После выполнения одной процедуры происходит безусловный переход к следующей согласно логичному порядку выполнения программы. То есть сначала выводится так называемая служебная фраза- приветствие программы и запрос на ввод исходных данных, затем выполняется процедура чтения 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 коды.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]