Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
материалы_2_полуг_1.doc
Скачиваний:
4
Добавлен:
08.09.2019
Размер:
138.75 Кб
Скачать

4.2. Система команд эвм общего назначения

4.2.1. Методы адресации

В машинах с регистрами общего назначения метод (или режим) адресации объектов, с которыми манипулирует команда, может задавать константу, регистр или ячейку памяти. Для обращения к ячейке памяти процессор прежде всего должен вычислить действительный или эффективный адрес памяти, который определяется заданным в команде методом адресации.

Система команд 32-разрядных процессоров предусматривает 11 режимов адреса­ции. При этом только в двух случаях операнды не связаны с памятью. Это операнд-содержимое регистра, которое берется из любого 8-, 16- или 32-битного регистра процессора, и непосредственный операнд (8, 16 или 32 бит), который содержится в самой команде. Остальные девять режимов так или иначе обращаются к памяти.

При обращении к памяти эффективный адрес вычисляется с использованием следующих компонентов.

Смещение (Displacement или Disp) – 8-, 16- или 32-битное число, включенное в команду.

База (Base) – содержимое базового регистра. Обычно используется для указа­ния на начало некоторого массива.

Индекс (Index) – содержимое индексного регистра. Обычно используется для выбора элемента массива.

Масштаб (Scale) – множитель (1, 2, 4 или 8), указанный в коде инструкции. Этот элемент используется для указания размера элемента массива, доступен только при 32-битной адресации.

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

EA=Base + Index  Scale + Disp.

Отдельные слагаемые в этой формуле могут отсутствовать. Возможные режимы адресации приведены ниже:

Использование сложных методов адресации позволяет существенно сократить количество команд в программе, но при этом значительно увеличивается сложность аппаратуры. Важным вопросом построения любой системы команд является оптимальное кодирование команд. Оно определяется количеством регистров и применяемых методов адресации, а также сложностью аппаратуры, необходимой для декодирования. Именно поэтому в современных RISC архитектурах используются достаточно простые методы адресации, позволяющие резко упростить декодирование команд. Более сложные и редко встречающиеся в реальных программах методы адресации реализуются с помощью дополнительных команд, что приводит к увеличению размера программного кода. Однако такое увеличение длины программы с лихвой окупается возможностью простого увеличения тактовой частоты RISC-процессоров.

4.2.2. Типы команд

Команды 32-разрядных процессоров содержат одно- или двухбайтный код инструкции, за ко­торым могут следовать несколько байт, определяющих режим исполнения коман­ды, и операнды. Команды могут использовать до трех операндов (или ни одного). Операнды могут находиться в памяти, регистрах процессора или непосредственно в команде. Для 32-разрядных процессоров разрядность слова (word) по умолчанию может составлять 32 бит. Это распространяется на многие инструкции, включая и строковые. В реальном режиме и режиме виртуального процессора 8086 по умолчанию используется 16-битная адресация и 16-битные операнды-слова. В защищенном режиме режим адресации и разрядность слова по умолчанию оп­ределяются дескриптором кодового сегмента. Перед любой инструкцией может быть использован префикс переключения разрядности адреса или слова.

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

1.Инструкции пересылки данных позволя­ют передавать константы или переменные между регистрами и памятью, а также портами ввода/вывода в различных комбинациях, но в памяти может находиться не более одного операнда. В эту группу отнесены и инструкции преобразования форматов – расширений и перестановки байт. Операции со стеком выполняются словами с разрядностью, определяемой текущим режимом.

2.Инструкции двоичной арифметики выполняют все арифметические действия с байтами, словами и двойными словами, кодирующи­ми знаковые или беззнаковые целые числа.

3.Инструкции десятичной арифметики являются дополнением к предыдущим. Они позволяют оперировать с неупакованными (биты 7–4 равны нулю, биты 3–0 содер­жат десятичную цифру 0–9) или упакованными (биты 7–4 содержат старшую, биты 3–0 – младшую десятичную цифру 0–9) двоично-десятичными числами. Арифметические операции над этими числами требуют применения инструкций коррекции форматов.

4.Инструкции логических операций выполняют все функции булевой алгебры над байтами, словами или двойными словами.

5.Сдвиги и вращения (циклические сдвиги) выполняются над регистром или операндом в памяти. При сдвигах влево и простом сдвиге вправо осво­бождающиеся биты заполняются нулями. При арифметическом сдвиге вправо старший бит (знак) сохраняет свое значение. При циклических сдвигах выталкиваемые биты попадают в осво­бождающиеся позиции.

6.Инструкции обработки бит и байт позволяют проверять и устанавливать значение указанного операнда, а также искать установленный бит. Битовые операции выполняются над 16- или 32-битными словами. Инструкция тестирования может выполняться над байтом, словом или двойным словом.

7.Передача управления осуществляется с помощью инструкций безусловных и условных переходов, вызовов процедур и прерываний (исключений). Безусловный переход (JMP) может быть как внутрисегментным (ближним или коротким), так и межсегментным (дальним). Адрес перехода может непосредственно указываться в команде, а при косвенной адресации он находится в регистре или памяти и может иметь дополнительные слагае­мые. Короткий переход (short) может передавать управление только на адрес на­значения, удаленный от текущего в пределах -128...+127 байт, ближний (near) – в пределах сегмента. При дальнем (far) переходе адрес назначения (непосредствен­ный или косвенный) включает новое значение указателя инструкций и значение (или селектор) сегмента кода, обеспечивая доступ к любой точке памяти (в преде­лах, разрешенных защитой).

Условные переходы в 8086 и 80286 возможны только короткие (8-байтное смеще­ние), процессоры 386+ допускают переход в пределах 16- или 32-байтного смеще­ния, в зависимости от режима адресации.

Инструкция вызова процедуры сохраняет адрес следующей за ней инст­рукции в стеке и передает управление в заданную точку.

8.Строковые операции выполняются с операн­дами в памяти. Операции могут использоваться с префиксами условно­го или безусловного повтора. Строковые инструкции ввода/вывода с префиксами повтора позволяют достигать высоких скоростей обмена с портами при условии полной загрузки процессора.

9.Операции с флагами позволяют изменять значе­ния отдельных флагов, а также сохранять их значение в стеке и восстанавливать сохраненные значения.

10.Инструкции загрузки указателей позволяют за­гружать дальние указатели из памяти в регистр общего назначения и соответствую­щий сегментный регистр.

11.К системным инструкциям относятся инструк­ции управления защитой – загрузки и сохранения регистров дескрипторов и ре­гистра задачи; проверки и выравнивания привилегий; обмена с управляющими, отладочными и модельно-специфическими (включая тестовые) регистрами; уп­равления кэшированием, захвата шины и остановки процессора. Для прикладных программ использование этих инструкций нехарактерно.