
- •Память с адресной организацией (с произвольным доступом).
- •Непосредственная адресация
- •Когда может произойти стековый доступ к памяти
- •Как происходит стековый доступ к памяти
- •Регистровый файл
- •Счетчик команд
- •Идея базовой адресации – достижение позиционной независимости. (к 50-51)
- •Непосредственная адресация
- •3. Проверки и передача управления.
- •3.4. Команда организации цикла
- •Переполнение при действиях над целыми числами.
- •Целые со знаком: дополнительный код
- •Сложение и вычитание
- •Поддержка действий с повышенной разрядностью
- •Как перейти от представления с однарной точностью к представлению с двойной ?
- •Особые случаи при действиях над числами пт
- •Неточный результат - округление и его виды
- •Численное антипереполнение, денормализованные и ненормализованные числа, псевдонуль.
- •Действия с бесконечностями
- •Регистр состояния программы (Program status register)
- •Счетчик команд
- •Способы синхронизации: программный опрос состояния versus прерывания
- •Таймерная подсистема
- •Основной счетчик
- •Техника измерения времени (чтение счетчика)
- •Ассоциативная память
Идея базовой адресации – достижение позиционной независимости. (к 50-51)
Идея базовой адресации состоит в том, что одна из компонент в многокомпонентных способах адресации задается (операционной системой) при загрузке программы с память. Значение этой компоненты (базы) может быть сделано, например, равной начальному адресу участка памяти, занимаемого программой. Сумма остальных компонент выражает адреса объектов относительно базового значения. Если в программе используются только многокомпонентные способы адресации с использованием базы, то такая программа приобретает свойство позиционной независимости: она оказывается работоспособной без изменения кода команд (модификации адресных частей) при расположении в любом месте памяти. При этом, конечно, для любого конкретного расположения программы в памяти требуется задать соответствующее значение базового адреса. Формирование физического адреса посредством добавления базового адреса к логическому – одна из разновидностей трансляции адреса. Базовый адрес может быть неизвестен ни прикладному программисту ни пользователю программы.
Что такое статическая позиционная независимость? Как ее можно достигнуть?
Что такое динамическая позиционная независимость? Как ее можно достигнуть?
Динамически позиционно-независимую программу можно получить путем использования относительной адресации со счетчиком команд. Однако в программе, которая манипулирует такими адресными величинами, как указатели, для получения динамической позиционной независимости требуется широкое применение адресации по базе. Всякий раз, когда выполняется перемещение программы, новый базовый адрес необходимо помещать в базовый регистр, а все ссылки к данным необходимо выполнять относительно этого регистра, используя адресацию по базе или с индексированием по базе. Кроме того, очень трудно при составлении программ ручным способом соблюдать правила получения динамически позиционно-независимой программы ( см., например, упр. Следовательно, динамическая позиционная независимость обычно достигается только в тех процессорах, которые имеют специальный базовый регистр. Кроме того, динамическая позиционная независимость достигается в процессорах, в которых имеются блоки преобразования адресов памяти.
Что имеют в виду, говоря о перемещаемости программы?
С способность сохранять работоспособность при перемещении из одной области памяти в другую является важным достоинством программы, особенно если речь идет о системной программе. Обладающий этим свойством фрагмент может быть легко и без проблем включен в любое место любой программы, с минимальными усилиями переделан для работы на другом компьютере с той же системой команд процессора.
Какой регистр процессора указывает положение операнда при непосредственной адресации?
Непосредственная адресация
Если программист уже во время написания исходного кода программы (неважно, на Ассемблере или на ЯВУ) знает численные значения операндов для некоторых команд (например, число повторений тела цикла for), то оказывается удобным включить значения таких операндов непосредственно внутрь программного кода, например, прямо в тело соответствующей команды. Такой способ задания значения операнда называют непосредственной адресацией (immediate).
Операнд-приемник - это регистр процессора, т.е. в этих командах использована непосредственная (для источника) и регистровая (для приемника) адресация.
Когда целесообразно использование способа адресации, при котором адрес операнда входит в состав команды ? Как называется такой способ адресации?
В ряде случаев программист уже во время написания программы знает, в каком месте памяти (начиная с какого конкретного адреса) располагается операнд. В этом случае, программируя на Ассемблере, он может указать транслятору это значение, и транслятор поместит прямо в тело команды численное значение адреса операнда. Такой способ адресации называют абсолютной адресацией
Где находится операнд при регистровой адресации ?
В регистре процессора
Каково основное преимущество косвенно-регистровой адресации?
Для облегчения возможности модификации адреса операнда, используемого в команде, разработчики процессоров вводят в состав способов адресации такой способ, при котором адрес операнда содержится в одном из регистров процессора (а не в теле команды). Такую адресацию называют косвенно-регистровой.
Для обозначения косвенно-регистровой адресации в разных ассемблерах имя регистра заключают в скобки, вот так: (r0) или так [r0], либо предваряют символом «амперсанд», вот так &r0.
Вот пример команды с косвенно-регистровой адресацией, которую удобно использовать в нашей задаче по модификации элементов массива:
add [r0],#13 ; Прибавим константу к элементу данных
Адрес операнда содержится в одном из регистров процессора, в нашем примере регистр обозначен как r0. Теперь, используя уже известную нам команду увеличения на «1», можно следующим действием увеличить адрес элемента массива. Откуда же возьмется в регистре r0 начальное значение адреса массива? Это должен обеспечить программист перед входом в цикл.
mov r0,#BegAddr ; Занесем начальное значение адреса в r0 Cycle: ; Здесь начнется цикл add [r0],#13 ; Прибавим константу к элементу данных inc r0 ; Увеличим на 1 значение адреса в r0 ; … теперь надо закончить цикл, пока не знаем, как…
В данном примере указатель (адрес модифицируемого элемента массива) это содержимое регистра r0. Основное преимущество косвенно-регистровой адресации состоит в том, что она позволяет модифицировать адрес обрабатываемого элемента данных, в результате чего одна и та же команда add [r0],#13 работает с разными элементами данных. Кроме того, адресное поле косвенно-регистровой адресации имеет малую длину, а следовательно, и команда имеет гораздо меньший размер.
Реализованы ли автоинкрементная и автодекрементная адресация в процессорах ARM?
В процессорах ARM в командах загрузки ‑ сохранения (т.е. копирования «память регистр») можно задать любой из четырех вариантов автоиндексной адресации, а размер шага модификации может быть любым от 0 до 232-1.
Каким может быть шаг автомодификации адресов в командах загрузки-сохранения в процессорах ARM?
См. выше на 3 строчки
В чем причина того, что в некоторых процессорах реализуют всего два способа автоиндексной адресации: автоинкрементную адресацию с постинкрементом и автодекрементную с предекрементом?
хз
В чем разница между операциями арифметического и логического сдвига операнда влево ?
Команды арифметического линейного сдвига отличаются от команд логического сдвига тем, что они особым образом работают со знаковым разрядом операнда.
Рис.1
Логический сдвиг
Рис. 2. Схема работы команд линейного арифметического сдвига
В чем разница между операциями арифметического и логического сдвига операнда вправо ?
См. рисунок выше
Операция сдвига состоит в одновременном перемещении содержимого операнда в разрядной сетке. Существует 3 разновидности операции сдвигов, которые различаются тем, что происходит с битами, выходящими за пределы разрядной сетки с одного «конца» операнда, и с освобождающимися позициями на другом его «конце».
ASR,ASL / SAR,SAL - арифметические сдвиги. Эта разновидность сдвига осуществляется таким образом, что результат оказывается эквивалентен умножению (при сдвиге влево) или делению (при сдвиге вправо) операнда на основание системы счисления, т.е. на 2. Сравните: если «сдвинуть» цифры в десятичном числе на разряд влево, результат будет эквивалентен исходному числу, умноженному на 10 (12 и 120 после сдвига).
SHL,SHR - логические сдвиги. При выполнении логических сдвигов биты, «выдвигаемые» из разрядной сетки, теряются, а противоположный конец операнда заполняется «нулями».
(Каждая из упомянутых разновидностей может также иметь варианты, в составе системы команд х86 различают пять видов сдвигов).
Байтовый операнд (дается числовое значение) подвергается операции арифметического сдвига вправо на два разряда. Укажите верный результат. (Подобные вопросы могут быть заданы в качестве дополнительных).
Байтовый операнд (дается числовое значение) подвергается операции арифметического сдвига вправо на два разряда. Укажите верный результат.
62-63 смотрим по схемке из 60.
Какие последовательности команд позволяют в цифровом процессоре «проверить» операнд на условия =0, >0 и т.п.?
CMP сравнение операндов – эта команда выполняет вычитание операндов, по результату изменяет флаги, после чего результат теряется (эта команда предназначена для проверки условий)
Если тут про дизассемблер, см. отчет по 2 лабе.
Условия, проверяемые командами типового набора команд условного ветвления обычно в описаниях разбиты на три подгруппы. Укажите эти три подгруппы условий.
В группе команд ветвления можно выделить три подгруппы:
Ветвление по простому условию:
Описание |
Условие |
Альтернативное |
Семантика |
По знаку |
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 |
Для сравнения двух чисел была использована команда cmp a,b. В системе команд есть две команды, о которых сказано «переход, если больше нуля». Как выбрать одну из этих двух команд для организации ветвления по результату сравнения?