Формат команды

Введение

Основы машинного языка

Ограничения, установленные для различных классов защищенности ЭВМ

Представим в виде таблицы:

Класс защищенности Ответственные задачи Особо ответственные задачи
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 – будет заменено на двоичный код команды сложения. Мнемонические имена ячеек памяти – на двоичные коды адресов. В результате – из программы на Ассемблере будет получена "машинная программа", пригодная для выполнения на ЭВМ.