
- •Память с адресной организацией (с произвольным доступом).
- •Непосредственная адресация
- •Когда может произойти стековый доступ к памяти
- •Как происходит стековый доступ к памяти
- •Регистровый файл
- •Счетчик команд
- •Идея базовой адресации – достижение позиционной независимости. (к 50-51)
- •Непосредственная адресация
- •3. Проверки и передача управления.
- •3.4. Команда организации цикла
- •Переполнение при действиях над целыми числами.
- •Целые со знаком: дополнительный код
- •Сложение и вычитание
- •Поддержка действий с повышенной разрядностью
- •Как перейти от представления с однарной точностью к представлению с двойной ?
- •Особые случаи при действиях над числами пт
- •Неточный результат - округление и его виды
- •Численное антипереполнение, денормализованные и ненормализованные числа, псевдонуль.
- •Действия с бесконечностями
- •Регистр состояния программы (Program status register)
- •Счетчик команд
- •Способы синхронизации: программный опрос состояния versus прерывания
- •Таймерная подсистема
- •Основной счетчик
- •Техника измерения времени (чтение счетчика)
- •Ассоциативная память
Регистр состояния программы (Program status register)
Флаги
N – флаг знака
Z – флаг нуля
C –флаг переноса
V –флаг переполнения
Q – индицирует переполнение или насыщение при выполнении DSP-команд расширенного набора.
CPSW – Current Program Status Word – текущее значение регистра состояния.
SRSW – Saved Program Status Word –сохраненные значения РСП для разных режимов работы.
Управляющие биты
I – маска запрета прерывания
F – маска запрета прерывания FIQ
T – флаг переключения режимов ARM (0) ‑ Thumb (1)
M4…M0 – биты режимов. Интерпретация их значений дана в таблице
Опишите назначение и способы использования специализированных регистров процессора: счетчика команд, указателя стека.
Счетчик команд
Регистр R15 является счетчиком команд (Program Counter PC), однако программно доступен, как любой из РОН.
В архитектуре ARM ранние реализации процессоров содержали буфер предвыборки глубиной 8 байтов, поэтому при чтении PC возвращалось значение на 8 большее адреса текущей команды. (В ряде других архитектур, использующих предвыборку, возвращаемое значение счетчика команд аппаратно корректируется так, чтобы возвращался адрес следующей команды.) Поскольку все команды имеют длину 4 байта и выровнены по границе 4-байтового слова, возвращаемое значение в режиме ARM содержит нули в двух младших битах.
Спецификация предусматривает, что в реализациях, имеющих большую, нежели 8 байтов, глубину предвыборки, возвращаемое значение должно быть на 8 больше адреса текущей команды.
Запись в счетчик команд эквивалента команде безусловного перехода. Записываемая величина должна быть кратна 4. Так, например, возврат из подпрограммы осуществляется копированием LR в PC.
. Регистр R13 используется как указатель стека SP. Это является только соглашением, так как в архитектуре ARM нет ни специальных команд обращения к стеку, ни каких-либо аппаратно реализованных функциональностей, использующих R13 для стекового доступа. Однако такие команды есть в 16-битовом режиме (Thumb).
Регистр указателя стека (SP) постоянно указывает на вершину стека. Данные помещаются в стек и извлекаются из него посредством инструкций PUSH и POP. Увеличение стека происходит в направлении от старших ячеек памяти к младшим. Таким образом, при помещении данных в стек содержимое регистра SP уменьшается, а при извлечении данных - увеличивается. После сброса, SP автоматически инициализируется значением, которое равно максимальному адресу внутреннего SRAM. При необходимости изменения SP нужно учитывать, что изменение нужно выполнить перед вызовом каких-либо подпрограмм или разрешением прерываний.
Команды переходов, их разновидности. Условные переходы как пример команд с условным исполнением. Опишите преимущества условного исполнения команд в цифровом процессоре.
Команда перехода — команда процессора, которая нарушает естественный порядок исполнения команд, вынуждая выбирать и исполнять последующие команды с произвольно заданного адреса. Используется для организации условных операторов, циклов, для связи с подпрограммами. Исполнение команды перехода в современных микропроцессорах чревато потерями производительности из-за простоев конвейера.
Если счётчик команд программно доступен (как регистр), любая команда модификации счётчика команд будет служить командой перехода.
Условный переход — команда программируемому вычислительному устройству на изменение порядка выполнения программы в соответствии с результатом проверки некоторого условия.
Наиболее часто условный переход имеет две стадии: на первой происходит сравнение между собой некоторых величин, определяющих условие перехода, на второй выполняется сам переход.
Необходимость корректной обработки условных переходов накладывает серьёзный отпечаток на логику работы современных конвейерных процессоров. Условные переходы могут выполняться двумя способами. Выполняемые условные переходы меняют значение счётчика команд процессора на вычисленное значение адреса перехода. Невыполняемые — прибавляют к значению счётчика команд число, равное длине текущей команды в байтах, для перехода к выполнению следующей команды.
Какие команды в процессорах с архитектурой ARM могут выполняться условно ?
Для сравнения двух чисел можно использовать команды вычитания, кроме того обычно в системе команд есть специальные команды для сравнения. В i*86 это команда cmp a,b - она делает вычитание a – b, по результату операции устанавливаются флаги, после чего результат вычитания теряется, а операнды сохраняются неизменнымиОбычно в процессоре имеются еще два триггера (флага), которые меняют свое состояние при выполнении команд в зависимости от получившегося результата:
Z (zf - от Zero) - флаг нулевого результата: zf 1, если результат равен нулю. N (sf - от Negatve или от Sign) - флаг отрицательного результата (знака) - значение этого флага совпадает со знаковым разрядом результата, т.е. 1 соответствует знаку "минус".
После выполнения команды, осуществляющей сравнение (и переустанавливающей флаги) надо осуществить ветвление. Для этого в процессоре обычно существует большая группа команд условного ветвления, которое происходит (или нет) в зависимости от состояния тех или иных флагов.
Ветвление по простому условию:
Описание |
Условие |
Альтернативное |
Семантика |
По знаку |
sf = 0 |
sf = 1 |
Результат положителен/отрицателен |
По нулю |
zf = 0 |
zf = 1 |
Результат равен/не равен нулю |
По переносу |
cf = 0 |
cf = 1 |
Установлен/нет флаг cf (по разным причинам) |
По переполнению |
of = 0 |
of = 1 |
Установлен/нет флаг of (по разным причинам) |
При сравнении двух чисел в результате вычитания может быть получен как правильный результат, так и переполнение разрядной сетки. Однако оказывается, что и при переполнении можно определить, какой из операндов был больше, анализируя комбинацию флагов.
Ветвление по результату сравнения беззнаковых чисел
Описание |
Условие |
Если больше |
cfÚzf = 0 |
Если меньше или равно |
cfÚzf = 1 |
Если больше или равно |
cf = 0 |
Если меньше |
cf = 1 |
Ветвление по результату сравнения чисел со знаком
Описание |
Условие |
Если больше или равно |
sfÅof = 0 |
Если меньше |
sfÅof = 1 |
Если больше |
(sfÅ of) Úzf = 0 |
Если меньше или равно |
(sfÅ of) Úzf = 1 |
Влияние команд перехода на работу конвейера в цифровом процессоре. Как можно ослабить это влияние (какие для этого придуманы приемы) ?
Исполнение команды перехода в современных микропроцессорах чревато потерями производительности из-за простоев конвейера.
Выполнение одновременно нескольких программ
В чем заключается основной (аппаратный) способ «борьбы со сложностью» в больших программах?
Современные «большие» программы содержат 106 и более команд. Для того, чтобы можно было в такой программе разобраться (не говоря уже о том, что ее надо перед этим написать и отладить), программа должна быть структурирована. Основное средство структурирования на уровне системы команд процессора – это поддержка аппаратным уровнем (система команд, способы адресации) организации подпрограмм (организации модульной структуры программ).
В чем состоят достоинства и недостатки использования подпрограмм?
Проблемы рекурсивного вызова, увеличение времени работы (переходы), уменьшение общего объема кода.
Какие действия производит процессор при выполнении команды обращения к подпрограмме?
Для обращения к подпрограмме используется специальная команда вызова подпрограммы. (В системе команд х86 она имеет мнемонику call). Минимальный набор действий, которые выполняет такая команда, это:
сохранение адреса возврата (т.е. адреса команды, следующей за call)
загрузка в счетчик команд адреса первой исполняемой команды ПП.
Что такое «контекст программы» ?
Понятие контекста (вектора состояния): - это в каждой конкретной точке выполнения программы содержимое всех переменных элементов (регистров, ячеек памяти), которое требуется установить/восстановить, чтобы стало возможным запустить выполнение программы с этой точки.
Зачем (когда) требуется сохранение или восстановление контекста ?
См.101
Каковы особенности рекурсивного вызова подпрограммы?
Рекурсия при вызове подпрограммы может быть как прямая (ПП вызывает сама себя) так и цепная (ПП-а A вызывает ПП-у B, та в свою очередь вызывает ПП-у C, а затем ПП-а C вызывает ПП-у A).
Проблем при рекурсивном вызове несколько:
1) Запоминание адресов возврата - каждый экз. ПП имеет свой адрес возврата 2) Каждый экземпляр ПП должен иметь собственные наборы внутренних переменных 3) Иногда требуется, чтобы экземпляры ПП, вызванные позднее, имели доступ к внутренним переменным ранее вызванных экземпляров.
Решение всех этих проблем обеспечивается, когда при вызове ПП в стеке выделяется блок ячеек (стековый кадр) для параметров и временных переменных очередного экземпляра ПП (как в примере, рассмотренном выше). Адресацию внутри стекового кадра удобно делать относительно какого-либо его адреса. Для этого перед вызовом ПП параметры помещаются в стек::
push par1 push par2 call subr
в начале ПП применяется (как мы уже увидели) типовая последовательность команд:
subr: push bp ; запоминание старого значения регистра базы bp mov bp,sp ; передача в bp адреса начала стекового кадра
Теперь можно к локальным переменным ПП обращаться, используя адресацию относительно регистра базы:
mov ax,[bp+4] mov bx,[bp+6]
Для обеспечения возможности использовать парамеры и переменные "внешних" экземпляров ПП при рекурсивном вызове, стековый кадр должен содержать ссылки на "предыдущие" стековые кадры.
В системе команд процессора могут быть команды, облегчающие формирование стекового кадра. Например, в х86 есть команды ENTER и LEAVE.
enter frmsiz, level
Первый параметр команды определяет количество байтов, требуемых в стеке для временных (локальных) переменных. Второй параметр показывает уровень "рекурсивности" (для самого внешнего уровня level=1). Для доступа к элементам стекового кадра используется адресный регистр BP, который указывает на начало (самый старший адрес) стекового кадра.
Структура стекового кадра в х86 включает три компонента: - указатель на начало предыдущего стекового кадра (динамическая связь) - таблица указателей на начала каждого из ранее созданных кадров (индикатор) - локальные переменные.
Что такое «стековый кадр» ?
Сте́ковый кадр (англ. stack frame) — механизм передачи аргументов и выделения временной памяти (в процедурах языков программирования высокого уровня) с использованием системного стека.
Как (каким способом адресации) обычно организуется доступ из подпрограммы к элементам стекового кадра.
Есть в 103.
Каковы недостатки способа синхронизации с использованием опроса готовности (поллинга)?