МИНИСТЕРСТВО оБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Московский государственный институт электроники и математики
(Технический университет)
Кафедра вычислительных систем и сетей
Методические указания
к выполнению домашнего задания на тему
«форматы команд CISC-процесслора (Intel32)»
по дисциплине «Организация ЭВМ, комплексов и систем»
Москва 2007
Составитель к.т.н., доц. Е.М. Иванова

УДК 681.325
Методические указания являются составной частью методического обеспечения по дисциплине «Организация ЭВМ», изучаемой студентами в рамках специальности 22.01 – «Вычислительные машины, комплексы, системы и сети».
Основным содержанием является изучение различных форматов команд 32-разрядного процессора Intel.
ФОРМАТЫ КОМАНД CISC-ПРОЦЕССОРА (INTEL32): Методические указания к выполнению лабораторной работы по дисциплине «Организация ЭВМ, вычислительных комплексов и систем» /Московский Государственный институт электроники и математики; Сост.: Е.М. Иванова, М., 2007 – 17 с.
Цель и практическое содержание методических указаний
Целью работы является закрепление теоретических знаний по разделу «Форматы команд и типы данных ЭВМ».
Теоретическая часть
Команда ЭВМпредставляет собой код, определяющий операцию вычислительной машины и данные, участвующие в операции. В явной и неявной форме команда содержит также информацию об адресе, по которому помещается результат операции, и об адресе следующей команды.
Процессор может работать с 32-разрядной или 16-разрядной адресацией. 16-разрядная адресация функционирует так же, как и в процессорах 8086 и 80286, при этом в качестве компонентов адреса используются младшие 16 бит соответствующих регистров. При 32-разрядной адресации применяются расширенные 32-разрядные регистры и дополнительные режимы с масштабированием индекса.
По характеру выполняемых операций можно выделить следующие группы команд:
команды арифметических операций для чисел с фиксированной или плавающей запятой;
команды десятичной арифметики;
команды передачи данных (MOV AX, 0FFFh);
команды операций ввода/вывода (IN, OUT);
команды логических операций (AND, OR, NOT);
команды передачи управления (управление циклом – LOOP, условные переходы – JAE, JB);
команды задания режима работы машины и др.
Форматы команд эвм
В команде, как правило, содержатся не сами операнды, а информация об адресах ячеек памяти или регистрах, в которых они находятся. Код команды можно представить состоящим из нескольких полей, каждое из которых имеет свое функциональное назначение.
В общем случае команда состоит из:
операционной части (содержит код операции и префиксы – поля для уточнения кода операции);
адресной части (содержит адресную информацию о местонахождении обрабатываемых данных и месте хранения результатов или об адресе следующей команды).
В свою очередь, эти части, что особенно характерно для адресной части, могут состоять из нескольких полей.
Режимы адресации операндов
Адресуемые в командах операнды хранятся в основной памяти (ОП) и регистровой памяти (РП – Регистры общего назначения РОН или регистр команды РК) (см. рис. 1).

Рис. 1. Типы памяти для хранения адресуемых данных
Информация из адресной части команды называется адресным кодом. Способ получения адреса операнда (результата или следующей команды) называетсярежимом адресации операнда(результата или следующей команды).
Рассмотрим режимы адресации, применяемые в современных ЭВМ.
По наличию адресной информации в командеразличают явную и неявную адресацию.
При явной адресацииоперанда в команде есть поле адреса этого операнда, в котором задается адресный код. Большинство методов адресации являются явными.
При неявной адресацииадресное поле в команде отсутствует, адрес операнда подразумевается кодом операции. Метод неявной адресации операндов используется во всех процессорах. Основное его назначение - уменьшение длины команды за счет исключения части адресов. При этом методе код операции подразумевает определённый адрес операнда.
Например, в большинстве скалярных операций системы команд Intelиз команды исключается адрес приемника результата. При этом подразумевается, что результат операции помещается на место первого операнда.
AАА – команда десятичной коррекции двоично-десятичных чисел после сложения; операнд задан неявно; коррекция выполняется над регистромAX– это адрес операнда и одновременно адрес результата.
-
КОП (AАА)
Длина команды - 1 байт
Широко используются следующие методы адресации операнда с различной кратностью обращения (R) в память:
1. Непосредственная (R= 0).
2. Прямая (R= 1).
3. Косвенная (R> 2).
Непосредственная адресация операнда. При этом способе операнд располагается в адресном поле команды (рис.2). Обращение к регистровой памяти (РП) или оперативной памяти (ОП) не производится. Таким образом, уменьшается время выполнения операции. Но объем памяти программ увеличивается, т.к. операнды хранятся в самой команде, т.е. в программе. Непосредственная адресация удобна для задания констант, длина которых меньше или равна длине адресного поля команды.

Рис.2. Схема непосредственной адресаций
Например, ADDEAX,5 – в последнем поле команды присутствует 32-разрядная константа 5, поскольку для сложения оба операнда должны быть одного формата: ЕАХ – 32-разрядный регистр процессора, а значит и число 5 должно быть такого же размера [2].
|
КОП (ADD) |
Непосредственно-заданный операнд - константа 5 | |
|
00000101 |
. . . |
00000000000000000000000000000101 |
|
1 байт |
|
4 байта |
Прямая адресация операндов. При этом способе (рис. 3) адресации обращение за операндом в РП или ОП производится напрямую по адресному коду в поле команды. Обеспечивая простоту программирования, этот метод имеет существенные недостатки, так как для адресации к ячейкам памяти большой емкости требуется «длинное» адресное поле в команде. Вся адресация к регистровой памяти ведется только с помощью прямой адресации.

Рис.3. Схема прямой адресаций
ADDEAX,var2 ;оба операнда – прямоадресуемые ячейки памяти, первый –регистровой (регистр ЕАХ), второй – ОП (переменнаяvar2).
Косвенная адресация операндов. При этом способе адресный код команды указывает адрес ячейки памяти, в которой находится не сам операнд, а лишь адрес операнда, называемый указателем операнда (рис. 4). Адресация к операнду через цепочку указателей (косвенных адресов) называется косвенной.

Рис. 4. Косвенная адресация
а) без использования регистровой памяти (РП), б) с использованием РП
Например, JMPЕВХ ;команда передачи управления на команду с адресом, который записан в регистре ЕВХ (абсолютная косвенная адресация).
Адрес указателя, задаваемый программой (код регистра ЕВХ), остается неизменным, а косвенный адрес (содержимое регистра) может изменяться в процессе выполнения программы. Косвенная адресация, таким образом, обеспечивает переадресацию данных, т.е. упрощает обработку массивов и списковых структур данных, упрощает передачу параметров подпрограммам.
По способу формирования исполнительных адресов ячеек памяти(Аи) режимы адресации операндов можно разделить на абсолютные и относительные.
Абсолютные способы формированияпредполагают, что двоичный код адреса ячейки памяти - Аиможет быть извлечен целиком либо из адресного поля команды (в случае прямой адресации), или из какой-либо другой ячейки (в случае косвенной адресации), никаких преобразований кода адреса не производится.
Относительные способы формированияАипредполагают, что двоичный код адреса ячейки памяти образуется из нескольких составляющих адресного кода: Б - код базы, И - код индекса, М – масштабного множителя, С - код смещения, используемых в различных сочетаниях (Б и С), (И и М), (Б, И и С).При относительной адресации применяются два способа вычисления адреса Аи:
суммирование кодов составляющих адреса
(Аи= Б + С; Аи- И + С; Аи= Б + И + С);
совмещение (конкатенация) кодов составляющих адреса
(например Аи= Б|С).
Относительная адресация.Базирование способом суммирования. В команде адресный код Акразделяется на две составляющие: Аб- адрес регистра в регистровой памяти , в котором хранится база Б (базовый адрес); С - код смещения относительно базового адреса (рис. 5).
Р
ис.
5 Схема формирования относительного
адреса способом суммирования
СМ – сумматор, РАОП – регистр адреса ОП,
Б – база (базовый адрес), С – смещение, Аб – адрес регистра базы
С помощью метода относительной адресации удается получить так называемый перемещаемый программный модуль, который одинаково выполняется процессором независимо от адресов, в которых он расположен. Начальный адрес программного модуля (база) загружается, при входе в модуль, в базовый регистр. Все остальные адреса программного модуля формируются через смещение относительно начального адреса (базы) модуля. Таким образом, одна и та же программа может работать с данными, расположенными в любой области памяти, без перемещения данных и без изменения текста программы только за счет изменения содержания всего одного базового регистра. Однако время выполнения каждой операции при этом возрастает.
Иногда сама база явно не указывается, как например, в командах условных переходов JZmet,JGmet,JBEmet… Здесь по умолчанию считается равной адресу текущей команды (EIP)
Индексная адресация. Для работы программ с массивами, требующими однотипных операций над элементами массива, удобно использовать индексную адресацию. Схема индексной адресации аналогична базированию путем суммирования (см. рис. 5).
В этом случае адрес i-гo операнда в массиве определяется как сумма начального адреса массива (задаваемого полем смещения С) и индекса И, записанного в одном из регистров РП, называемом теперь индексным регистром. Адрес индексного регистра задается в команде полем адреса индекса — Аин(аналогично Аб).
В каждом i-м цикле содержимое индексного регистра изменяется на величину постоянную (часто равную 1). Использование индексной адресации значительно упрощает программирование циклических алгоритмов.
Базирование способом совмещения составляющих. Для увеличения емкости адресной ОП без увеличения длины адресного поля команды можно использовать для формирования исполнительного адреса совмещение (конкатенацию) кодов базы и смещения (рис. 6). Однако в данном случаеначальныеадреса массивов не могут быть реализованы произвольно, а должны иметь в младших разрядахnнулей, гдеn– длина поля смещения.

Рис. 6.Схема формирования относительного адреса способом совмещения
Д
ля
эффективной работы при относительной
адресации применяется комбинированная
индексация с базированием, при которой
адрес операнда вычисляется как сумма
трех величин (рис. 7): Аи= Б + И*М + С.
Рис. 7 Схема формирования исполнительного адреса при комбинированной адресации
АИН - адрес индексного регистра, АБ - адрес базового регистра,
М – масштабный множитель, С - смещение.
Стековая адресация. Стековая память (стек) является эффективным элементом современных ЭВМ, реализует неявное задание адреса операнда. Хотя адрес обращения в стек отсутствует в команде, он формируется схемой управления автоматически по специальному правилу.
Стек представляет собой группу последовательно пронумерованных регистров (аппаратный стек) или ячеек памяти (программный стек), снабженных указателем стека (обычно регистром счётчиком адреса (СЧА). В СЧА автоматически при записи и считывании устанавливается номер (адрес) первой свободной ячейки стека (вершина стека).
При операции записи заносимое в стек слово помещается в свободную ячейку стека, а при считывании из стека извлекается последнее поступившее в него слово. Таким образом, в стеке реализуется принцип LIFO «последний пришел - первый ушел».
Механизм стековой адресации поясняется на примере аппаратного стека (рис.8) и на примере программного стека (рис.9).
Регистры Р(0), …Р(М) – образуют сам стек – область для хранения данных. Разрядность каждого регистра определяется разрядностью процессора. По сигналу ЗП (запись) n-разрядное слово по входной шине Х записывается в регистр Р[СЧА], номер которого определяется состоянием СЧА:
Р[СЧА],[n1] = Х[n1].
После чего с задержкой D, достаточной для выполнения микрооперации записи состояние счётчика увеличивается на 1:
СЧА=СЧА+1.

Рис. 8. Стековая память. Аппаратный стек
Операция чтения инициируется сигналом ЧТ, при поступлении которого состояние СЧА уменьшается на 1:
СЧА=СЧА+1.
Затем с задержкой D, достаточной для выполнения этой микрооперации из регистра стека Р[СЧА] на выходную шину Y вынимается слово, занесенное в стек последним.
Особенностью программного стека (рис.9) является то, что он заполняется в сторону младших адресов памяти. Т.е. при записи («заталкивании» - от английского PUSH) данных в стек они заносятся в вершину стека по адресу из СЧА (для Интел – ESP), который затем уменьшается на количество байт в машинном слове, помещаемом в стек (в 32-разрядных процессорах – на 4). При чтении сначала адрес из СЧА увеличивается на длину машинного слова, а затем происходит чтение («выталкивание» - POP) данных из стека.
Предполагается, что область памяти для стека находится в специальном сегменте стека, базовый адрес которого определяется регистром SS - сегментным регистром стека. Извлечь данные из стека можно в регистр или в ячейку ОП, также и поместить данные в стек можно из регистра или ячейки ОП.
В современных архитектурах процессоров стек и стековая адресация широко используется при организации переходов к подпрограммам и возврата из них, а также при организации прерывания.

Рис. 9. Стековая память. Программный стек
П
римером
такой адресации могут служить команды
работы со стеком:PUSHоперанд ;
команда помещения операнда в стек,
адрес в стеке
POPоперанд ; команда извлечения операнда из стека. задан неявно
