С созданием фирмой Intel поколений 80386, 80486 и Pentium-процессоров форматы еще более головоломно усложнились:
Рис. 3.1.1.12. Общий формат команды.
Детальный комментарий здесь затруднителен, т.к. требует подробного рассмотрения организации памяти конкретного процессора и структуры самого процессора. Ограничимся отдельными замечаниями.
При выполнении отдельных команд разрядность операндов может меняться соответствующим префиксом размера операнда. В 32-битном режиме размеры операнда по умолчанию равны 8 и 32 бита. Если предполагается использование в команде 16-разрядных операндов, то в этом случае необходимо использовать префикс размера операнда.
Префикс размера операнда определяет размер внутрисегментного смещения. В 32-битном режиме смещения вычисляются как 32-разрядные адреса. Если в команде должен быть использован 16-разрядный адрес, то необходимо использовать префикс размера адреса.
Постбайт адресации md-reg-r/m используется для задания адресов операндов, один из которых обязательно должен находиться в регистре блока РОН, а второй может размещаться либо в регистре, либо в памяти. Кодировка полей md и r/m определяет способ вычисления адреса операнда в памяти. Для реализации некоторых способов адресации кроме постбайта в адресации используется дополнительный байт адресации SIB.
<118>
Список команд – это, по сути дела, список операций, которые способен выполнять компьютер. В среднем их количество составляет 70-80 команд, но бывает и больше.
У персональных и микро ЭВМ уже устоялось 64-128 (RISC – 32). (Заметим, что если разрядность КОП равна 8, то всего может быть построено 28=256 двоичных кодов, каждый из которых может быть использован для кодирования определенной операции). Казалось бы, чем больше, тем лучше. СуперМини ЭВМ VAX 11/780 имела, например, 303 команды. Кажется это абсолютный рекорд.
Но это верно до определенных границ, т.к. когда-то наступает «насыщение» (любая новая команда мало прибавляет к функциональным возможностям и лишь усложняет использование каждой отдельной команды). Экспериментально установлено, что программист ограничен в числе применяемых команд (операторов) и их типов.
Среди списка команд можно выделить следующие группы операций:
1) арифметические (сложения разных видов, инкрементация, декрементация, умножение и т.п.);
2) логические (обычно поразрядные!); сюда же обычно относят сдвиги;
3) операции пересылок данных, кодов (между процессором, СОЗУ и ОЗУ, между ячейками ОЗУ и др.);
4) передачи управления (условные и безусловные переходы, вход и выход из подпрограмм и др.);
5) операции с внешними устройствами
6) специальные команды (Останов, Пустая команда и др.);
Помимо такой (основной!) классификации иногда выделяют классы:
- операции над стеками;
- операции арифметики с двойной точностью;
- операции арифметико-логические (например, сдвиг и сложение сразу);
- операции с двоично-десятичными кодами и др.
<119>
Обращаю внимание, что рассматривается применение только «адресной» памяти. О способах адресации в безадресной памяти следует говорить особо.
Размерность адреса, как известно, определяет максимальную область памяти, доступную для процессора. Например, 16-разрядный адрес означает, что может использоваться 216=64К слов (байт).
Разработчики PDP-11 когда-то писали:
«…Самая большая и наиболее распространенная ошибка, которая может быть совершена при конструировании ЭВМ, состоит в том, что не обеспечивается достаточное количество адресных разрядов для обращения к памяти и управления. Совершенно очевидно, что через каждые два-три года требуется увеличивать адрес на один разряд, так как цены на запоминающие устройства снижаются ежегодно на 30%, а пользователи хотят приобретать более совершенные модели вычислительных систем по постоянной цене».
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.