Добавил:
Студент, если у тебя есть завалявшиеся работы, то не стесняйся, загрузи их на СтудентФайлс! Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР5.docx
Скачиваний:
3
Добавлен:
16.07.2022
Размер:
2.99 Mб
Скачать
    1. Реализация субмодуля вычисления

Субмодулем вычислений осуществляется получение оценочной функции ), а также обработка отсчётов дискретного процесса с целью определения состояния флага FlOn.

Типовая по сложности оценочная функция имеет (для примера) вид

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

Программная реализация (в машинных кодах) индивидуальна для каждой задаваемой функции, поэтому разработку следует начинать с выбора способа вычисления и обоснование представленных решений.

Этап 1. Выбор формата обработки

Вариант1. Вычисления в восьмиразрядном формате с контролем переполнения результата.

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

Переполнение в случае (1) может возникнуть при обработке операндов с одинаковыми знаками.

Поэтому, уже при значениях слагаемых =60 значение функции равно , т.е. возникает положительное переполнение.

Обнаружение переполнения при сложении двух операндов не представляет теоретической сложности. Наиболее используемый метод обнаружения: сравнение знака суммы со знаком слагаемого (любого). Возможны другие методы обнаружения переполнения.

Однако этот вариант в случае обнаружения переполнения требует остановки вычислений и “разруливания ” возникшей ситуации, что не всегда допустимо на практически.

Вариант2. Ограничение диапазона представления обрабатываемых операндов.

Например, если ограничить модули и в функции ( 1) значением 30 (возможны другие варианты), то максимальное положительное значение функции равно , т.е. переполнение практически невозможно.

Такой способ можно использовать при выполнении лаб. работы (Табл.1). В этом случае, необходимо принимать во внимание, что из-за ограничения на диапазон обрабатываемых операндов снижается точность полученного результата, поэтому его применение на практике требует обоснования..

Вариант3. Использование внутреннего шестнадцатиразрядного формата данных и функции .

Исследуя заданную функцию, можно убедиться в том, что при восьмиразрядных отсчетах и переполнение невозможно.

Варианты вычислений по способам 2,3 нашли отражение в Табл.1

Пример, демонстрирующий возможности m-байтного формата [ ].

Вычислить с обнаружением переполнения разрядной сетки, сумму двух m-байтных чисел X’ и Y’, представленных в дополнительном коде. Результат поместить по адресам операнда Y. Число байт операндов m, и адреса младших байтов дополнительных кодов операндов X’ и Y’имеют символические имена count, oper1, oper2 соответственно.

Решение.

; анализ возможности переполнения

;---------------------------------------------------------------------------------------------------

lxi D, oper1+count-1 ; в DE адрес старшего байта числа X’

lxi H, oper2+count-1 ; в HL адрес старшего байта числа Y’

ldax D ; ACC ← ((DE))=xsxxx xxxx, где xs–знак числа X’

ani 80h ; ACC ← xsxxx xxxx&1000 0000= xs000 0000

mov B,A ; B ← xs000 0000

xra M ; xs000 0000+ ysxxx xxxx = ( xs +ys)xxx xxxx=Gxxx xxxx

ani 80h ; ACC ← Gxxxxxxx&1000 0000= G000 0000

rlc ; ACC ← 0000 000G (G=0 – возможно переполнение)

ora B ; ACC= x s000 0000G

mov B,A ; B ← x s000 000G

; вычисление суммы дополнительных кодов двух m-разрядных чисел

;---------------------------------------------------------------------------------------------------

lxi D, oper1 ; в DE адрес младшего байта числа X’

lxi H, oper2 ; в HL адрес старшего байта числа Y’

mvi C,count ; C ←число байт в представлении числа

xra A ; CY ← 0

L1: ldax D ; ACC ←((DE))

adc M ; ACC ←((DE)) +((HL))

mov M,A ; ((HL))←((DE)) +((HL))

inx H

inx D

dcr C

jnz L1

; анализ на наличие переполнения и принятие решений

;---------------------------------------------------------------------------------------------------

ani 80h ; ACC ← ssxxx xxxx&1000 0000= s s000 0000 знак суммы

mov a,c ; счетчик циклов в ACC

xra B ; ss000 0000+ xs000 000G =(ss+xs) 000 000G ; cpi 80h ; циклы все?

jnz L2 ; переход на нормальное продолжение,

; если переполнения нет

* ;принятие решения, изменение формата,

* ; вывод сообщения и т.п.

L2: * ; нормальное продолжение т.к. переполнения нет

Шестнадцатиразрядный формат является предпочтительным и рекомендуется к реализации.

Этап 2. Выбор алгоритма обработки заданной функции

Выбор выполняется в следующей последовательности:

  1. анализ заданной зависимости, аналитические преобразования и возможное упрощение;

  2. выбор порядка (последовательности) реализации составных частей заданного выражения;

  3. выбор алгоритмов вычисления операций, входящих в выражение.

Анализ заданной зависимости поясняется следующим примером.

Пусть задана функция 4 +2 .

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

  • или как 3 (сдв)+1(сл)=4 (в одном случае);

  • или 2 (сдв)+2(сл)=4 (в другом).

Однако, при переходе к скобочной форме представления заданной функции, а именно , сложность вычислений уменьшается до 3 (2 (сдв)+1 (сл)).

Это доказывает важность предварительного аналитического анализа и преобразований вычисляемой зависимости.

При вычислениях следует правильно (оптимально) выбрать порядок (последовательность) вычислений. Очевидно, что обычный арифметический порядок должен соблюдаться, а именно: выражения в скобках, умножение, деление, сложение.

Однако, для составления корректного и оптимального машинного алгоритма вычислений на этом этапе рекомендуется выполнить следующие действия. Пусть вычисляется зависимость (1). Она последовательно преобразуется к виду

Используя правую часть как базовую, выбор порядка обработки можно пояснить следующим образом

Цифры в представленной диаграмме отражают используемую последовательность вычислений, а именно:

шаг 1– временное сохранение аргумента ;

шаг 2– получение путём сдвига на разряд влево произведения ;

шаг 3 – получение произведения ;

шаг 4 – получение путём правого сдвига на один разряд частного ;

шаг 5 – получение суммы ;

шаг 6 – получение, путём суммирования значений, вычисленных на шагах 3 и 5, окончательного результата.

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

Как показано в разделе 1 при выборе алгоритмов вычислений можно ориентироваться как на алгоритмы, обеспечивающие умножение/деление для сомножителей произвольных по численной величине, так и использовать упрощённые алгоритмы, в частности представляя операнды как целые степени двойки. Использование этого метода уже проиллюстрировано при обработке разложения (2). В частности, и т.д.

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

Освобождающийся младший разряд сдвигаемого при умножении операнда следует заполнять 0 (нулем), При делении необходимо выполнять модифицированный сдвиг, заполняя освобождающийся старший разряд значащей части числа содержимым знакового разряда. Знаковый разряд не сдвигается, содержимое младшего разряда значащей части отбрасывается. Отбрасывание младшего разряда эквивалентно округлению положительного частного в меньшую сторону, а отрицательного – в большую.

Теоретические доказательства этих положений можно найти в электронной версии данных метод указаний.

После вычисления численного значения функции , выполняется процедура Ident.

Она осуществляет обработку отсчетов дискретного процесса Process3, цель которой – идентификация положения “Вкл” двухпозиционного устройства в текущем цикле сканирования. В результате должен формироваться флаг FlOn. Активное (единичное) состояние флага соответствует состоянию “вкл” устройства.

При известном базовом адресе строки матрицы отсчетов, обработка заключается: а) в последовательном извлечении отсчетов из строки ; б) выделении и определении состояния разряда D0; в)формировании признака FlOn.

При первом обнаружении положения “Вкл” обработка завершается.

Соседние файлы в предмете Основы микропроцессорной техники