Формат команды
Введение
Основы машинного языка
Ограничения, установленные для различных классов защищенности ЭВМ
Представим в виде таблицы:
Класс защищенности | Ответственные задачи | Особо ответственные задачи |
A | - | - |
B | ? | - |
C | + | ? |
D | + | + |
+ – разрешено
- – полностью запрещено
? – частично разрешено, ( разрешено использование ЭВМ для ввода/вывода и первоначальной обработке данных, но не для длительного хранения и обработки).
ЭВМ, по сути – автомат для выполнения программ написанных на так называемом "машинном языке". Изучение "машинного языка" – и есть основная составляющая изучения работы ЭВМ, принципов работы (принципов выполнения программ) Электронной Вычислительной Машиной. Этим мы и займёмся - в третьем разделе.
Знание основ машинного языка, принципов работы ЭВМ - необходимо для:
- правильного понимания характеристик ЭВМ, взаимосвязи между архитектурными решениями, применяемыми при построении ЭВМ, и характеристиками вычислительной системы;
- понимания сути и путей устранения многих проблемных ситуаций, возникающих при эксплуатации вычислительной техники;
- изучения в дальнейшем (если, вдруг, потребуется) языка Ассемблера;
- программирования на языках высокого уровня только "относительно" является "высокоуровневым. На самом деле – и полное понимание языка, и грамотное программирование на Языке высокого уровня - не возможно без знания архитектуры ЭВМ и принципов исполнения машинных программ.
Нам предстоит изучить алгоритмы, по которым выполняются многие важнейшие команды ЭВМ. Достаточно сложно изучать эти вопросы на примере конкретного процессора, или - семейства процессоров. Пришлось бы излишне отвлекаться на многие детали реализации, специфичные - именно для этого процессора. Нам же сейчас, прежде всего, важны общие принципы, заложенные в конструкции любых ЭВМ. Поэтому изучение будет происходить на примере простейшего процессора архитектуры фон Неймана, примерно такого – как тот, что был рассмотрен в первой части курса.
Будут рассмотрены алгоритмы выполнения многих команд, а именно – тех основных команд, что имеют прямое отношение к организации вычислительного процесса. При описании алгоритмов выполнения команд будет использоваться простейший язык ЯОМО (язык описания микроопераций). С несложными условными обозначениями, применяемыми в этом языке – познакомитесь по ходу изучения материала.
Кроме алгоритмов работы процессора на ЯОМО, в некоторых случаях, для иллюстрации того, как используются команды, как программируется ЭВМ - будут приведены фрагменты программ на языке очень близком к машинному языку, а именно - на языке Assembler (Ассемблер). Примеры программ на Ассемблер будут приводиться исключительно для иллюстрации принципов работы и принципов программирования ЭВМ. Изучение, тем более детальное изучение собственно языка Ассемблера – не входит в программу курса. Тем не менее, полагаю: полученные в ходе изучения нашего курса знания - помогут вам также и в том случае, если в дальнейшем - вам потребуется изучить и язык Ассемблера.
Машинная команда – блок данных, на момент выполнения программы размещённый в ОЗУ, и описывающий: какую операцию необходимо выполнить, где взять исходные величины и куда поместить результат.
Рассмотрим формат команды (из каких информационных разделов состоит команда и как взаимно - эти информационные разделы в команде расположены).
На рисунке – условно, графически отображена часть ОЗУ, в которой располагается машинная команда:
Графически ОЗУ представлено как массив ячеек, стрелкой – показано направление, в котором возрастают адреса ячеек ОЗУ. Фигурными скобками слева от массива ячеек – выделены отдельные части, или говорят "информационные поля команды" или Проше "поля команды": КОП, A1, A2, .. An
КОП (код операции) – это набор бит, указывающий какую операцию надо выполнить;
A1, A2, .An – атрибуты. Наборы данных, каждый из которых указывает – где (в каких ячейках памяти) взять элемент обрабатываемых командой данных, либо – куда поместить результаты. На каждый из элементов данных, что должна обрабатывать команда – свой атрибут. В простейшем случае атрибут содержит одно число – адрес ячейки ОЗУ, в которой хранится элемент данных. Возможны и другие варианты того как атрибут может указывать размещение данных (говорят - "другие методы адресации"). Вопрос о том какие ещё "методы адресации" могут быть использованы в тех или иных командах – будет рассмотрен чуть позднее;
n – число атрибутов в команде. Число атрибутов - может отличаться для разных команд. Имеются команды и без атрибутов.
LКОП – длина кода операции (число ячеек памяти занимаемое КОП-ом)
LA1, LA2, … – длины атрибутов (число ячеек памяти занимаемое соответствующим атрибутом);
LK – длина команды (число ячеек памяти занимаемое данной командой);
AK – адрес команды (адрес ячейки с наименьшим адресом из числа тех, что занимают команда)
.
Необходимо понимать - как соотносятся между собой "машинный язык" и "язык ассемблера" и - не путать эти понятия.
Любая программа на машинном языке - набор двоичных кодов, легко разбираемых устройством управления процессора, но, увы – очень трудных для чтения человеком. "Машинная команда" - последовательность двоичных чисел. Сначала – двоичное число (двоичный код) КОП, затем – двоичные числа атрибутов.
В языке Ассемблера двоичные коды: коды команд, адреса данных - заменены на словесные, "мнемонические обозначения" - более удобные для восприятия человеком. Программист может написать программу на языке ассемблера, и такая программа – будет очень близка к машинной программе. Отличаться будет – только формой записи.
На машинном языке –На Assembler’е запись команд выглядит так:
КОП A1 A2 A3
Пример: ADD mem3 mem2 mem1
ADD – мнемоническое имя для операции сложения
mem1, mem2 – мнемонические имена ячеек памяти, где находятся исходные данные.
mem3 – мнемоническое имя ячейки памяти, куда будет помещен результат.
В разговорном языке программистов на ассемблере, мнемонические имена иногда называют, не совсем по смыслу точно, но зато проще и короче: то просто "именами", а то и "адресами".
Программа транслятора на машинный язык – выполнит очень простую операцию: заменит в программе "мнемонические имена" на двоичные числовые коды. Мнемоническое имя ADD – будет заменено на двоичный код команды сложения. Мнемонические имена ячеек памяти – на двоичные коды адресов. В результате – из программы на Ассемблере будет получена "машинная программа", пригодная для выполнения на ЭВМ.