Нет сомнения в том, что ЭВМ со всеми возможными командами не существует. Большинство ЭВМ содержит от 20 до 200 отдельных команд, многие из которых могут отличаться только используемым методом адресации. Число действительно различных команд нередко трудно определить, так как ЭВМ может иметь комбинированные команды или необычную архитектуру. Широкий набор команд делает программы короче, а быстродействие выше. Однако такой набор команд требует более длинных команд и более сложного декодирования; кроме того, он более труден для изучения и эффективного использования. Программисты редко используют большое число команд из набора; как правило, только немногие программисты могут эффективно применять наборы, в которых более 100 команд. Вместе с тем малое число команд приводит к необходимости выполнять неудобные манипуляции для реализации простых операций. Наиболее оптимальными следует считать наборы из 40—80 команд.
В большинстве ЭВМ наборы команд имеют некоторые ограничения, связанные с методами адресации. Хотя в ЭВМ могут применяться многие методы адресации, в основных командах используются только некоторые из них. Приведено несколько типичных ограничений:
- Арифметические и логические операции могут выполняться только над содержимым регистров. Пример:
- Чтобы сложить содержимое ячейки памяти 50 с содержимым аккумулятора, необходимо использовать последовательность команд:
LOAD R2, 50 ADD R2
вместо одиночной командыADD 50
. Это ограничение проявляется в программах, требующих большого числа команд передачи данных.
- В однооперандных командах, таких как СДВИГ, ВЗЯТЬ ОБРАТНЫЙ КОД, УВЕЛИЧИТЬ или УМЕНЬШИТЬ НА 1, разрешается использовать только аккумулятор. Пример:
- Данные необходимо засылать в аккумулятор и после операции снова запоминать их в исходной ячейке. Это ограничение также сказывается в том, что в программе появляется много команд передачи данных.
- Обмен данными с памятью и операции ввода-вывода можно осуществить только через аккумулятор. Пример:
- Чтобы переслать содержимое регистра 2 в ячейку памяти 50, потребуется последовательность команд:
MOVE ACC, R2 STORE 50
Заметим, что при этом необходимо запомнить предыдущее содержимое аккумулятора.
- Команды условных переходов могут использовать только короткие относительные адреса. Пример:
- Более длинные условные переходы потребуют последовательностей команд. Например:
JUMP ON NOT CONDITION, +2 JUMP ADD R
выполняет то же действие, что и неразрешенная командаJUMP ON CONDITION ADD R
.
Таблица ограничений команд:
Ограничение | Пример | Влияние на программирование |
---|---|---|
Арифметические и логические операции только над регистрами | LOAD R2, 50 ADD R2 вместо ADD 50 | Требует большого числа команд передачи данных |
Однооперандные команды только с аккумулятором | Данные в аккумулятор, затем обратно в ячейку | Увеличивает количество команд передачи данных |
Обмен данными и ввод-вывод только через аккумулятор | MOVE ACC, R2 STORE 50 | Требует запоминания предыдущего содержимого аккумулятора |
Короткие адреса в условных переходах | JUMP ON NOT CONDITION, +2 JUMP ADD R | Необходимость использования дополнительных команд для длинных переходов |
Все эти ограничения упрощают декодирование команд, но они же делают длинные программы труднее для написания и понимания.