- •Глава 16. Типы и форматы команд
- •16.1. Команды пересылки данных
- •16.2. Команды арифметической и логической обработки
- •16.3. Команды для работы со строками
- •16.4. Simd-команды
- •Перспективы векторных операций
- •16.5. Команды преобразования форматов
- •16.6. Команды ввода-вывода
- •16.7. Команды управления ходом выполнения программы
- •16.8. Команды ветвления
- •16.9. Команды пропуска
- •16.10. Форматы команд
- •Длина команды
- •Количество адресов в команде
- •16.11. Контрольные вопросы
16.5. Команды преобразования форматов
Команды преобразования осуществляют изменение формата представления данных. Примером может служить преобразование данных из десятичной системы счисления в двоичную или перевод 8-разрядного кода символа из кодировки ASCII в кодировку EBCDIC, и наоборот.
16.6. Команды ввода-вывода
Команды этой группы могут быть подразделены на команды управления периферийным устройством (ПУ), проверки его состояния, ввода и вывода.
Команды управления периферийным устройством служат для запуска ПУ и указания ему требуемого действия. Трактовка подобных команд зависит от типа ПУ.
Команды проверки состояния ПУ применяются для проверки различных признаков, характеризующих состояние ПУ. Благодаря этим командам программа может выяснять включено ли питание ПУ, завершена ли предыдущая операция ввода/вывода, возникли ли в процессе ввода/вывода какие-либо ошибки и т. п.
Собственно обмен информацией с ПУ обеспечивают команды ввода и вывода. Команды ввода предписывают получить элемент данных от ПУ, а команды вывода — передают элемент данных в ПУ.
16.7. Команды управления ходом выполнения программы
При выполнении команд всех категорий очередная команда извлекается из ячейки оперативной памяти, следующей немедленно за той, из которой была выбрана текущая. Такой порядок выполнения команд программы принято называть естественным. Однако подавляющая часть алгоритмов, реализуемых компьютерными программами, требует время от времени проводить анализ результатов и в зависимости от него выбирать ту или иную ветвь алгоритма. Реализовать подобные операции программно можно с помощью команд, изменяющих естественный порядок выполнения программы. Суть операций, выполняемых этими командами, состоит в принудительном изменении состояния счетчика команд ядра процессора, в котором всегда содержится адрес очередной выполняемой команды.
Команды этой категории включаются в набор команд, исходя из следующих соображений.
В практике программирования очень часто появляется необходимость повторно выполнять отдельные последовательности команд, причем количество повторений может варьироваться от двух-трех до тысяч и сотен тысяч раз. Именно так обрабатываются таблицы данных, состоящие из тысячи и более элементов. Если набор команд не позволит принудительно возвращаться к первой команде такой повторяющейся последовательности, придется многократно дублировать всю последовательность в программе, что, естественно, значительно увеличит ее объем.
Практически все алгоритмы включают этапы принятия решения. При наличии некоторых условий нужно выполнять одни действия, а при их отсутствии — другие. Пусть, например, последовательность команд вычисляет корень квадратный из некоторого числа. Перед тем, как приступить к собственно вычислениям, обязательно нужно проверить знак числа. Если он отрицателен, никакие вычисления выполнять не следует, а пользователю нужно направить сообщение об ошибке.
Сформировать в виде единого модуля большую программу или даже программу среднего размера — задача исключительно сложная. Поэтому чаще всего программа разбивается на отдельные модули, выполняемые по очереди. Эти модули могут находиться в разных областях оперативной памяти, а потому для перехода от одного к другому обязательно потребуется изменить естественный порядок выполнения команд программы.
В архитектурах процессоров существуют такие основные подгруппы команд этой категории — команды ветвления, команды безусловных переходов, команды пропуска, команды вызова подпрограмм, команды возврата из подпрограмм.
Несмотря на то, что присутствие в программе большого числа команд безусловного перехода считается признаком плохого стиля программирования, такие команды обязательно входят в любую архитектуру. Команда безусловного перехода обеспечивает переход по заданному адресу без проверки каких-либо условий.
