Анализ операций умножения и деления в конкретной модели АЛУ

Страница: 7/11

Для обработки чисел с повышенной точностью предусмотрен сигнал переноса и флаг переноса (AC). Операция сложения с переносом (+Cl) предназначена для сложения "верхних" частей чисел с повышенной точностью. Вычитание с заемом (+CI-1) предназначено для вычитания "верхних" частей чисел с повышенной четностью.

Режим “насыщения” и “защелки”

Регистр AR имеет режим работы когда он автоматически устанавливается в максимальное положительное или максимальное отрицательное число при возникновении переполнения Этот режим включается установкой бита 3 в регистре режима и статуса процессора (MSTAT) . При включенном режиме насыщения, значение, получаемое в АR, зависит от флагов переноса и переполнения, сгенерированных АЛУ в текущем цикле. Ниже приведена таблица, показывающая содержимое AR в зависимости от флагов при включенном режиме насыщения.

Реализация режима насыщения существенно отличается от таковой в МАС-е, где режим насыщения указывается в самой инструкции.

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

Режим "защелки" переполнения АLU, разрешаемый битом 2 в регистре режима и статуса процессора (MSTAT), приводит к тому, что флаг переполнения АV остается поднятым после переполнения, несмотря на то, что последующие инструкции могут не генерировать переполнения. В этом режиме флаг АV может быть очищен только прямой записью нуля через шину DMD.

Деление

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

Деление с одинарной точностью, с 32-битным делимым и 16-битным делителем, дающее 16-битное частное, выполняется за 16 циклов. Также могут быть вычислены частные меньшей и большей разрядности. Делитель может содержаться в АХ0, АХ1 или любом из R регистров. Старшая часть знакового делимого может содержаться в АY1 или AF. Старшая часть беззнакового делимого может содержаться только в AF. Младшая часть делимого должна быть в АY0. После завершения операции деления частное находится в AY0.

Первый из двух примитивов деления, "делить знак" (DIVS), выполняется в начале деления при делении знаковых чисел. Эта инструкция получает знаковый бит делимого, проведя операцию “исключающее или” со знаками делимого и делителя. Регистр AY0 сдвигается на 1 разряд, так что вычисленный знаковый бит помещается в самый младший (правый) разряд. Полученный знаковый бит также загружается во флаг АQ регистра арифметических флагов. Самый старший (левый) бит AYO сдвигается в младший бит AF, а оставшиеся старшие 15 бит AF загружаются из 15 младших бит регистра R из АЛУ, что в свою очередь пересылает содержимое входного регистра Y прямо в регистр результата R. Последовательный эффект состоит в том, чтобы сдвинуть влево пару регистров AF-AYO и переслать знак частного в самый младший разряд. Рисунок 8 иллюстрирует операцию DIVS.

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

Второй примитив деления – инструкция "делить частное" (DIVQ), которая генерирует 1 бит частного за цикл и выполняется повторно, чтобы подсчитать оставшиеся разряды частного. Для беззнакового деления с одинарной точностью инструкция DIVQ выполняется 16 раз, чтобы получить 16 бит частного. Для знакового деления с одинарной точностью инструкция DI VQ выполняется 15 раз, после вычисления знакового бита инструкцией DI VS. Инструкция сдвигает регистр AYO влево на 1 бит так, что новый бит частного помещается в младший бит. Состояние флага АQ (полученное во время предыдущих операций) определяет инструкцию, используемую для получения частичного остатка. Если AQ=1, то АЛУ добавляет делитель к частичному остатку в AF. Если AQ=O, то АЛУ вычитает делитель из частичного остатка в AF. Регистр результата К загружается со смещением в AF так, как это описано для инструкции DIVS. Флаг AQ считается как исключающее логическое или (XOR) старшего бита делителя и старшего бита регистра результата АЛУ, а очередной бит частного получается инвертированием этого значения. Полученный бит частного загружается в младший бит регистра АYО, который затем сдвигается влево на 1 бит. Рисунок 9 иллюстрирует операцию DlVQ.

Реферат опубликован: 15/12/2009