31. Регистры PC и RPC.
Регистр - программный счетчик (PC) всегда указывает на команду, которая в настоящее время обрабатывается – команда, которая только достигла фазы декодирования D2 конвейера. Как только команда достигает этой фазы конвейера, ее выполнение не может быть прервано сигналами прерываний.
Счетчик программного возврата (RPC). Когда операция вызова подпрограммы c использованием команды LCR выполнена, адрес возврата сохраняется в регистре RPC, а старое значение RPC сохраняется в стеке (в двух 16-разрядных операциях). Когда операция возврата из подпрограммы LRETR выполнена, адрес возврата считывается из регистра RPC, а значение из стека записывается в регистр RPC (в двух 16-разрядных операциях). Другие команды вызова подпрограмм не используют регистр RPC.
32. Регистр ST0, формат и назначение битов.
C28x имеет два регистра состояния – ST0 и ST1, которые содержат различные биты флагов и служебные биты. Эти регистры могут быть сохранены и загружены из памяти, чтобы статус ЦСП был сохранен и восстановлен в процессе выполнения подпрограмм.
Регистры состояния организованы в соответствии с тем, как их содержимое изменяется в конвейере. Биты ST0 изменяются в фазе X конвейера; биты ST1 – в фазе D2.
Поразрядные поля регистра состояния ST0:
OVC/OVCU (биты ST010-15) – счетчик переполнений. Режим установки этих флагов активен, когда выключен режим переполнения (флаг OVM = 0).
Счетчик переполнений ведет себя неодинаково для знаковых и беззнаковых операций.
Для знаковых операций (OVC), счетчик переполнения – 6-разрядный знаковый счетчик с амплитудой от -32 до 31. Когда происходит переполнение ACC в положительном направлении (от 7FFF FFFF16 до 8000 000016), OVC будет увеличен на 1. Когда происходит переполнение ACC в отрицательном направлении (от 8000 000016 до 7FFF FFFF16), OVC будет уменьшен на 1.
Для операций без знака (OVCU), счетчик будет инкрементирован при сложении, когда в аккумуляторе произошел перенос и декрементирован при вычитании, когда в аккумуляторе произошел заем.
При увеличении OVC после значения, равного 31, происходит его переполнение в значение -32. При уменьшении OVC из значения -32 происходит обратное переполнение в значение 31. При сбросе, OVC очищается. На OVC воздействуют переполнения только в регистре ACC, за исключением команд сравнения.
PM (бит ST07-9) – биты режима сдвига, задают сдвиговый режим выходных операций в регистре произведения P. Результат сдвига попадает в АЛУ или в память. После начальной установки все биты PM сброшены в 0.
V (бит ST06) – флаг переполнения. Если результат операции вызывает переполнение в регистре, хранящем результат, флаг V будет установлен и «защелкнут». Если переполнение не происходит, V не изменяется. Флаг V защелкнут, пока не будет очищен сбросом или командой условного перехода, которая проверяет V. Такой условный переход очищает V независимо от того, является ли проверенное условие (V = 0 или V = 1) истинным.
Переполнение происходит в ACC (и V установлен) если результат сложения или вычитания не может быть размещен в пределах диапазона знаковых чисел – от 8000 000016 до 7FFF FFFF16.
Переполнение происходит в АH, AL, или другом 16-разрядном регистре или в ячейке памяти, если результат сложения или вычитания не может быть размещен в пределах от 800016 до 7FFF16.
Команды CMP, CMPB и CMPL не воздействуют состояние флага V.
N (бит ST05) – флаг знака. N установлен, если результат операции – отрицательное число или сброшен, если результат – положительное число. После сброса N сброшен в 0. Если бит 31 ACC равен 0, ACC – положителен; если бит 31 равен 1, ACC отрицателен. Результат АH, AL, и других 16-разрядных регистров или данных в ячейках памяти также проверяются на отрицательное условие. Тогда значение бита 15 – знаковый разряд (1 указывает на отрицательное, 0 указывает на положительное число). Команда TEST ACC устанавливает флаг N, если значение в ACC отрицательно. Иначе команда сбрасывает флаг N.
Z (ST04) – флаг нуля. Z установлен, если результат некоторых операций – 0 или сброшен, если результат отличается от нуля. Это применяется к результатам, которые получены в ACC, АH, AL, другом регистре, или в ячейке памяти. После сброса, Z сброшен. Команда TEST ACC устанавливает Z, если значение в ACC – 0, иначе сбрасывает Z.
C (бит ST03) – флаг переноса. Этот флаг показывает, когда сложение, инкремент генерируют перенос, или когда вычитание, сравнение, декремент генерируют заем. Этот флаг также устанавливают операции программного сдвига ACC (команды ROR, ROL) и аппаратные сдвиги (barrel shift) в ACC, АH, и AL. В результате сложения/инкремента, C будет установлен, если генерируется перенос; иначе C будет сброшен. Имеется одно исключение: если используется команда ADD со сдвигом 16 (ADD ACC,loc16<<shift), C может устанавливаться, но не может сбрасываться.
В результате вычитания/декремента/сравнения, C будет сброшен, если вычитание генерирует перенос; иначе C будет установлен. Имеется одно исключение: если используется команда SUB со сдвигом 16 (SUB ACC,loc16<<shift), C может сбрасываться, но не может устанавливаться.
Этот бит может быть индивидуально установлен и очищен командами SETC C и CLRC C соответственно. После начального сброса, C сброшен в 0.
TC (бит ST02) – флаг тест/управление. Этот бит показывает результат тестирования, выполненного любой TBIT-командой (тест- бит) или командой NORM (нормализация).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.