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