Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МПС2 Проектирование аппаратного и программного...doc
Скачиваний:
5
Добавлен:
26.09.2019
Размер:
2.77 Mб
Скачать

Реализация логических конструкций структурного программирования

Логическими конструкциями структурного программирования являются конструкции СЛЕДОВАНИЕ, ВЕТВЛЕНИЕ, ЦИКЛ, ВЫБОР и ВЫБОР-ПОВТОРЕНИЕ. Рассмотрим их реализацию.

Логическая конструкция СЛЕДОВАНИЕ представляет собой простую последовательность некоторых действий (см. рис. 3.19,а). Реализацию этой конструкции рассмотрим на примере.

Пример 3.5.

Н аписать программу для вычисления S = A + B, где A и B слова в памяти.

Из анализа системы команд МП (см. приложение) следует, что в основу этой программы может быть положена команда ADD rm, rmd, реализующая операцию (rm) = (rm) + (rmd). Для корректного решения поставленной задачи следует обеспечить необходимое исходное размещение информации. ГСА для решения этой задачи приведена на рис. 3.38, и текст программы имеет вид:

;

Рис. 3.38. ГСА примера 3.5

Реализация конструкции СЛЕДОВАНИЕ

MOV AX, A ; Чтение A

ADD AX, B ; Сложение с B

MOV S, AX ; Запись результата

Логическая конструкция ВЕТВЛЕНИЕ обеспечивает принятие альтернативного решения по выполнению тех или иных действий в зависимости от значения некоторого двоичного условия (см. рис. 3.19,б). Реализацию этой конструкции рассмотрим на примере.

Пример 3.6.

В зависимости от соотношения между беззнаковыми числами М1 и М2 установить флаговую ячейку памяти Flag. Если М1 < М2, то Flag = 00h, иначе Flag = FFh.

Из анализа системы команд МП следует, что основу этой программы может составлять команда CMP rm, rmd, реализующая операцию (F) = (rm)(rmd). При этом для беззнаковых чисел CF = 1, если (rm) < (rmd), иначе  CF = 0.

Для корректного решения поставленной задачи следует обеспечить необходимое исходное размещение информации. ГСА для решения этой задачи приведена на рис. 3.39,а, и текст программы имеет вид:

; Реализация конструкции ВЕТВЛЕНИЕ (общий случай)

MOV

AX, M1

; Чтение М1

CMP

AX, M2

; M1 < M2?

JC

M1B

; Переход, если да

MOV

Flag, 0FFh

; Установка Flag = FFh

JMP

SHORT Fin

; Обход другой ветви

M1B:

MOV

Flag, 0

; Установка Flag = 00h

Fin:

. . . . . . . . . .

; Продолжение программы

При наличии действий в обеих ветвях конструкции ВЕТВЛЕНИЕ в тексте программы обязательно присутствует команда безусловного перехода JMP, позволяющая обойти действия, выполняемые в другой ветви. Для упрощения реализации конструкцию ВЕТВЛЕНИЕ целесообразно сводить к частному случаю с одной пустой ветвью.Для этого действия из одной ветви выполняются до проверки условия, а затем при необходимости корректируются.

Рис. 3.39. ГСА примера 3.6:

а) общий случай; б) частный случай

ГСА для решения задачи из примера 3.6 с учетом этого приведена на рис. 3.39,б, и текст программы имеет вид:

; Реализация конструкции ВЕТВЛЕНИЕ (частный случай)

MOV

AX, M1

; Чтение M1

MOV

Flag, 0

; Установка Flag = 00h

CMP

AX, M2

; M1 < M2?

JC

Fin

; Переход, если да

MOV

Flag, 0FFh

; Установка Flag = FFh

Fin:

. . . . . . . . . .

; Продолжение программы

Логическая конструкция ЦИКЛ обеспечивает многократное выполнение одних и тех же действий до тех пор, пока не будет выполнено условие выхода из цикла. Она имеет две разновидности: ЦИКЛ С ПРЕДУСЛОВИЕМ (см. рис. 3.19,в) и ЦИКЛ С ПОСТУСЛОВИЕМ (см. рис. 3.19,г).

Полные ГСА этих конструкций приведены на рис. 3.40. В операторе "Подготовка" выполняются действия, необходимые для корректного выполнения и выхода из конструкции ЦИКЛ. Как правило, в нем загружаются адреса, обеспечивающие обращение к начальным элементам обрабатываемых данных, а также начальное значение условия выхода из цикла.

Рис. 3.40. Полные ГСА логической конструкции ЦИКЛ:

а) ЦИКЛ С ПРЕДУСЛОВИЕМ; б) ЦИКЛ С ПОСТУСЛОВИЕМ

В операторе "Тело цикла" выполняются все необходимые действия по обработке одного элемента данных.

В операторе "Модификация параметров цикла" изменяются параметры цикла, что обеспечивает подготовку к обработке следующего элемента данных. Как правило, в нем модифицируются адреса, что подготавливает обращение к очередному элементу данных.

После этого модифицируется и проверяется условие выхода из цикла. Если оно имеет ложное значение, то цикл продолжается, и обрабатываются очередные элементы данных. При истинности условия осуществляется выход из цикла, и обработка данных прекращается.

В конструкции ЦИКЛ С ПРЕДУСЛОВИЕМ условие выхода из цикла проверяется вначале, и поэтому возможен случай, когда тело цикла не будет выполнено ни разу.

Пример 3.7.

Преобразовать 4-разрядный двоичный код из ячейки InData в унитарный 16-разрядный код.

Преобразование двоичного кода в унитарный код осуществляется в соответствии с табл. 3.3.

Таблица 3.3

Преобразование двоичного кода в унитарный код

Двоичный код

Унитарный код

D3 D2 D1 D0

D15 D14 . . . D4 D3 D2 D1 D0

0 0 0 0

0 0 0 1

0 0 1 0

0 0 1 1

0 1 0 0

. . . . . . . .

1 1 1 0

1 1 1 1

0 0 0 0 0 0 1

0 0 0 0 0 1 0

0 0 0 0 1 0 0

0 0 0 1 0 0 0

0 0 1 0 0 0 0

. . . . . . . . . . . . . . .

0 1 0 0 0 0 0

1 0 0 0 0 0 0

Из анализа таблицы преобразования следует, что в основу этой программы можно положить команду SHL, осуществляющую логический сдвиг влево, а условием выхода из цикла является нулевое значение преобразуемого кода. ГСА для решения этой задачи приведена на рис. 3.41, и текст программы имеет вид:

; Реализация конструкции ЦИКЛ С ПРЕДУСЛОВИЕМ

; Подготовка

MOV

CX, InData

; Чтение входного кода

AND

CX, 0Fh

; Выделение младшей тетрады

MOV

DX, 1

; Загрузка накопителя результата

EndAn:

JCXZ

TrfEnd

; Переход, если конец преобразования

SHL

DX, 1

; Сдвиг накопителя результата

DEC

CX

; Декремент входного кода

JMP

SHORT EndAn

; Зацикливание

TrfEnd:

. . . . . . . . . .

; Продолжение программы

Рис. 3.41. ГСА примера 3.7

В конструкции ЦИКЛ С ПОСТУСЛОВИЕМ условие выхода из цикла проверяется в конце, и поэтому тело цикла выполняется минимум один раз.

Пример 3.8.

Скопировать N слов массива Source в массив Dest.

Из анализа системы команд МП следует, что в основу этой программы необходимо положить команду MOV dst, src, осуществляющую пересылку данных из src в dst. ГСА для решения этой задачи приведена на рис. 3.42, и текст программы имеет вид:

; Реализация конструкции ЦИКЛ С ПОСТУСЛОВИЕМ

; Подготовка

LEA

BX, Source

; Загрузка

LEA

SI, Dest

; адресов и

MOV

CX, N

; счетчика циклов

Next:

MOV

AX, [BX]

; Чтение элемента источника

MOV

[SI], AX

; Запись элемента в приемник

ADD

BX, 2

; Модификация адресов

ADD

SI, 2

LOOP

Next

; Все элементы? Переход, если нет

Логическая конструкция ВЫБОР осуществляет многоальтернативный выбор выполняемых действий в соответствии с конкретным значением некоторого многозначного условия выбора I (см. рис. 3.20,а). Для выполнения тех или иных действий в зависимости от значения параметра I необходимо передать управление на начальный адрес соответствующего программного фрагмента. Это обеспечивается путем косвенного перехода с помощью команды JMP rm16.

Рис. 3.42. ГСА примера 3.8

Для реализации конструкции ВЫБОР необходимо сформировать в некотором 16-битном регистре в зависимости от значения многозначного условия I исполнительный адрес и выполнить команду передачи управления JMP по этому регистру. В результате будет осуществлен переход на начало соответствующего программного фрагмента, после выполнения которого необходимо выйти из конструкции командой безусловного перехода JMP Labl. Реализацию этой конструкции рассмотрим на примере.

Пример 3.9.

Из порта ввода считывается число с допустимыми значениями 0,1,2,3. В зависимости от значения этого числа выполнить следующие действия: 0 инкрементировать регистр DX, 1 увеличить DX на 3, 2 декрементировать DX, 3 уменьшить DX на 5.

Из анализа системы команд следует, что в основу этой программы могут быть положены команды INC rm; ADD rm, rmd; DEC rm; SUB rm, rmd.

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

Поскольку эта таблица представляет собой одномерный массив, то исполнительный адрес может быть вычислен как адрес элемента массива в соответствии с выражением

ADDR(IND) = Base + INDn,

где ADDR(IND) начальный адрес элемента командного массива;

Base  начальный адрес командного массива;

IND  индекс элемента командного массива;

n  длина элемента командного массива в байтах.

Очевидно, что индексом элемента массива является вводимое число, определяющее характер выполняемых действий. Длина элемента массива определяется командами, входящими в его состав. Для решения поставленной задачи элементы массива должны включать в себя две команды: соответствующую операционную команду и команду JMP Labl. Первая из них выполняет требуемые действия, а вторая обеспечивает выход из конструкции ВЫБОР.

Эти команды имеют следующую длину в байтах: INC DX  1, ADD DX, 3 4, DEC DX 1, SUB DX, 5 4, JMP Labl 3. Таким образом, длина элементов массива будет соответственно равна 4, 7, 4, 7 байтов. Для ускорения операции умножения при вычислении смещения адреса целесообразно приводить длину элемента массива к ближайшему большему числу равному степени 2. Следовательно, в данном случае необходимо выбрать длину элемента равной 8 байтам. При этом смещение адреса INDn может быть вычислено путем трехкратного сдвига влево индекса, которым является введенное число. ГСА для решения этой задачи приведена на рис. 3.43, и текст программы имеет вид:

; Реализация конструкции ВЫБОР

IN

AX, Port

; Ввод числа D

LEA

BX, Base

; Вычисление

MOV

CL, 3

; исполнительного

SHL

AX, CL

; адреса

ADD

AX, BX

JMP

AX

; Выбор

Base

INC

DX

; Выполнение действий

JMP

Exit

; при D = 0

NOP

; Дополнение длины

NOP

; элемента массива

NOP

; до 8 байтов

NOP

ADD

DX, 3

; Выполнение действий

JMP

Exit

; при D = 1

NOP

; Дополнение до 8 байтов

DEC

DX

; Выполнение действий

JMP

Exit

; при D = 2

REPT

4

; Дополнение длины

NOP

; элемента

ENDM

; до 8 байтов

SUB

DX, 5

; Выполнение действий при D = 3

Exit:

; Продолжение программы

Рис. 3.43. ГСА примера 3.9

Логическая конструкция ВЫБОРПОВТОРЕНИЕ также осуществляет многоальтернативный выбор выполняемых действий в соответствии с конкретным значением многозначного условия выбора I (см. рис. 3.20,б). Однако в отличие от конструкции ВЫБОР после реализации необходимых действий в каждой ветви этой структуры осуществляется модификация параметра выбора I, и управление вновь передается на его анализ. В результате обеспечивается необходимая последовательность выполняемых действий.

Конструкция ВЫБОРПОВТОРЕНИЕ реализуется совершенно аналогично конструкции ВЫБОР. Отличие состоит лишь в том, что каждый элемент командного массива, соответствующий I < > N, должен содержать команду, осуществляющую модификацию параметра выбора, и управление из него должно передаваться на начало вычисления исполнительного адреса (см. пример 3.9). Выход из конструкции ВЫБОРПОВТОРЕНИЕ осуществляется из элемента командного массива, соответствующего I = N.

При необходимости выполнения в ветвях логических конструкций ВЫБОР и ВЫБОРПОВТОРЕНИЕ сложных действий целесообразно оформлять реализующие их программные фрагменты в виде подпрограмм. Тогда обработка данных в каждом элементе командного массива будет осуществляться только командой CALL Name, и все элементы будут иметь одинаковую длину независимо от сложности фрагментов, что упрощает реализацию этих конструкций.

Необходимо помнить, что в МПС в связи с отсутствием операционной системы не осуществляется инициализация переменных на начальные значения, заданные директивами распределения памяти DB, DW, DD и т. д. Поэтому начальная инициализация всех переменных должна осуществляться путем программной загрузки требуемых значений в соответствующие ячейки памяти.

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

Исходный текст программы записывается в соответствии с типовой структурой.