ЗНАЕТЕ ЛИ ВЫ?

Объясните назначения флага переполнения (OV). О чем сигнализирует пользователю флаг переполнения? Как его использовать в операциях знаковой арифметики?



Флаг переполнения OV (Overflow Flag) фиксирует переполнение, т.е. выход результата за пределы допустимого диапазона значений для чисел со знаком. В знаковом представлении числа от 0000h до 7FFFh считаются положительными, а числа от 8000h до FFFFh, т.е. числа с установленным старшим битом - отрицательными. Флаг OV устанавливается, если, например, при сложении двух положительных чисел получился результат, превышающий 7FFFh (потому что, начиная с 8000h, идут уже отрицательные числа), или при вычитании из отрицательного числа получился результат, меньший 8000h (потому что такие числа считаются положительными).

Существуют четыре бита, ассоциируемых с состоянием аккумулятора после выполнения каких-либо арифметических действий и управляющих этими действиями. Рассмотрим остальные флаги:

ü Carry bit (флаг переноса), С (9 бит регистра состояния ST1)

C = 0 — в результате вычитания произошел заем;

— в результате сложения не произошел перенос;

С = 1 — в результате вычитания не произошел заем;

— в результате сложения произошел перенос.

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

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

Так же на флаг переноса влияют операции сдвига аккумулятора, в том числе циклического.

ü Overflow mode bit (бит режима переполнения), OVM (11 бит регистра состояния ST0)

определяет поведение аккумулятора при арифметических переполнениях:

если OVM = 0,

нормальные арифметические операции;

если OVM = 1,

при переполнении в положительном направлении аккумулятор приобретает максимальное положительное значение (7FFF FFFFh);

при переполнении в отрицательном направлении аккумулятор приобретает минимальное отрицательное значение (8000 0000h).

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

ü Overflow flag bit (флаг переполнения), OV (12 бит регистра состояния ST0)

устанавливается, когда происходит положительное или отрицательное переполнение;

сбрасывается по RESET, условным переходом по OV или NOV, командами CLRC и LST. Используется для контроля переполнения при выполнении операций с числами в дополнительном коде.

20. Что такое режим расширения знакового разряда. Приведите примеры команд загрузки аккумулятора, использующих режим расширения знакового разряда. Зачем необходим этот режим при выполнении арифметических команд?

 

Изучение системы команд TMS320x24xx следует начать с команд загрузки и сохранения аккумулятора. Учтите ниже перечисленные моменты:

- аккумулятор имеет разрядность 32, в то время как шина памяти данных 16-разрядная;

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

- существует набор команд, которые выполняются с учетом признака расширения знакового разряда и которые игнорируют этот признак.

32-разрядный аккумулятор не может быть загружен или сохранен за одну команду, так как шина данных 16-разрядная. Загрузка может осуществляться командой загрузки и следующей за ней командой сложения. Для сохранения аккумулятора в памяти данных применяются две команды, работающие со старшей и младшей частью аккумулятора. Загрузка данных в аккумулятор может осуществляться со сдвигом и без сдвига, с расширением знакового разряда и без. Сдвиг данных на определенное количество бит влево необходим, когда данные надо промасштабировать, при этом поступающие в аккумулятор данные сдвигаются во входном сдвиговом регистре центрального арифметико-логического устройства. Сдвиг может быть осуществлен на любое количество разрядов от 0 до 16. Загрузка данных в аккумулятор может осуществляться с расширением знакового разряда. То есть, когда SXM равен «1», в результате выполнения некоторых (но не всех) команд происходит копирование знакового разряда во все левые биты аккумулятора. Делается это для того, чтобы числа в дополнительном коде были правильно представлены при загрузке их в младшую часть аккумулятора. Режим, когда SXM равен «1», является основным режимом, в котором происходят практически все вычисления, однако, довольно часто встречаются операции, в которых расширение знакового разряда не нужно. Например, если Вы хотите загрузить аккумулятор 32-разрядным знаковым числом, то Вам необходимо загрузить в него сначала младшее слово без расширения знакового разряда (младшее слово хоть и является частью знакового числа, само по себе знаковым не является), а затем сложить аккумулятор со старшим словом, сдвинутым на 16 разрядов. Поэтому, чтобы лишний раз не переключать состояние SXM, в TMS320x24xx предусмотрены команды загрузки аккумулятора, принудительно не учитывающие состояние признака расширения знака.

LACC dma [, shift]— считывает слово из памяти данных по адресу dma и со сдвигом shift загружает данные в аккумулятор; команда выполняется в соответствии с состоянием SXM

LACC dma ,16— считывает слово из памяти данных по адресу dma и со сдвигом на 16 разрядов загружает данные в аккумулятор

LACC ind [, shift [, ARn]]— считывает слово из памяти данных, используя косвенную адресацию, и со сдвигом shift загружает данные в аккумулятор; команда выполняется в соответствии с состоянием SXM

LACC ind [, 16 [, ARn]]— считывает слово из памяти данных, используя косвенную адресацию, и со сдвигом на 16 разрядов загружает данные в аккумулятор

LACC #lk [, shift]— непосредственный операнд, содержащийся во втором слове команды, со сдвигом shift загружается в аккумулятор; команда выполняется в соответствии с состоянием SXM

LACL dma — считывает слово из памяти данных по адресу dma и со сдвигом shift загружает данные в младшее слово аккумулятора; команда не производит расширение знакового разряда

LACL ind [, ARn]— считывает слово из памяти данных, используя косвенную адресацию, и загружает данные в младшее слово аккумулятора; команда не производит расширение знакового разряда

LACL #k — непосредственный 8-разрядный операнд загружается в аккумулятор; команда не производит расширение знакового разряда

ZALR dma — считывает слово из памяти данных по адресу dma и загружает данные в старшее слово аккумулятора; так же пишет 8000h в младшее слово (так называемое округление загружаемых данных)

ZALR ind [, ARn]— считывает слово из памяти данных, используя косвенную адресацию, и загружает данные в старшее слово аккумулятора; так же пишет 8000h в младшее слово (так называемое округление загружаемых данных)

 

Следует помнить, что значение параметра shift варьируется от 0 до 15, а перемасштабирование на 16 производится только у команд, у которых возможность такого операнда задана явно.

Команд сохранения аккумулятора меньше, чем команд загрузки, а именно две: сохранение старшего слова аккумулятора и сохранение младшего. Возможности масштабирования выходных данных тоже несколько меньше, однако это не создает каких-либо неудобств при реализации алгоритмов.

 

SACH dma [, shift2] — копирует аккумулятор в выходной сдвиговый регистр, сдвигает его на указанное количество бит (shift2) и сохраняет старшие 16 разрядов по адресу памяти данных dma

SACHind [, shift2 [, ARn]] — копирует аккумулятор в выходной сдвиговый регистр, сдвигает его на указанное количество бит (shift2) и сохраняет старшие 16 разрядов в память данных, используя косвенную адресацию

SACL dma [, shift2] — копирует аккумулятор в выходной сдвиговый регистр, сдвигает его на указанное количество бит (shift2) и сохраняет младшие 16 разрядов по адресу памяти данных dma

SACLind [, shift2 [, ARn]] — копирует аккумулятор в выходной сдвиговый регистр, сдвигает его на указанное количество бит (shift2) и сохраняет младшие 16 разрядов в память данных, используя косвенную адресацию

Параметр shift2 может варьироваться в диапазоне от 0 до 7 (0 – по умолчанию).

 

21. Какие действия производит команда симулятора “pc=0x8000”?

рс – 16-и разрядный счетчик команд; диапазон значений от 0000h до FFFFh.

0х8000h – слово памяти программ ТMS320х

Команда осуществляет переход к слову 0х8000.

 





Последнее изменение этой страницы: 2016-04-07; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.239.40.250 (0.009 с.)