Что такое машинная команда какая информация содержится в ней

Что такое машинная команда какая информация содержится в ней thumbnail

Каждая программа состоит из отдельных машинных команд; команда является указанием процессору произвести какую-либо элементарную операцию, например, копирования информации, сложения
и др. Все программы более высокого уровня (текстовый редактор, лазерный проигрыватель и прочие, в том числе написанные на языках программирования) сводятся к последовательности машинных команд.

Совокупность всех операций, которые может выполнять машина, образует систему ее команд. Система команд зависит от конструкции ЭВМ;
в пределах одного семейства компьютеры имеют совместимые инструкции.

Несмотря на отдельные отличия, системы машинных команд имеют много общего. Любая ЭВМ обязательно содержит следующие группы команд обработки информации.

1. Команды передачи данных (перепись), копирующие информацию из одного места в другое.

2. Арифметические операции, которым фактически обязана своим рождением вычислительная техника. Конечно, доля вычислительных действий в современном компьютере заметно уменьшилась, но они по-прежнему играют в программах важную роль.

3. Логические операции, позволяющие компьютеру производить анализ получаемой информации. После выполнения такой команды, с помощью условного перехода ЭВМ способна выбрать дальнейший ход выполнения программы. Простейшими примерами команд рассматриваемой группы могут служить сравнение, а также известные логические операции И, ИЛИ, НЕ (инверсия). Кроме того, к ним часто добавляется анализ отдельных битов кода, их сброс и установка.

4. Сдвиги двоичного кода. Для доказательства важности этой группы команд достаточно вспомнить правило умножения столбиком: каждое последующее произведение записывается в такой схеме со сдвигом на одну цифру влево.

5. Команды ввода и вывода информации для обмена с внешними устройствами.

6. Команды управления, к которым прежде всего следует отнести условный и безусловный переход, а также команды обращения к подпрограмме (переход с возвратом). Некоторые ЭВМ имеют специальные команды для организации циклов, но это не обязательно: любой цикл может быть сведен к той или иной комбинации условного и безусловного переходов. Часто к этой же группе команд относят операции по управлению процессором; с ростом сложности устройства процессора количество такого рода команд увеличивается.

По степени сложности команд и их ассортименту процессоры разделяют на две группы — RISC и CISC (см. “Процессор”).

Пожалуй, наиболее удивительным является тот факт, что с помощью относительно небольшого многообразия универсальных команд удается создать программное обеспечение, которое способно себя вести весьма сложным образом.

Любая команда ЭВМ обычно состоит из двух частей — операционной и адресной. Операционная часть (иначе она еще называется кодом операции — КОП) указывает, какое действие необходимо выполнить с информацией. Адресная часть описывает, где используемая информация хранится и куда поместить результат.

Команды могут быть одно-, двух- и трехадресные в зависимости от количества возможных операндов. Первые ЭВМ имели наиболее простую и наглядную трехадресную систему команд. Например: взять числа из адресов памяти А1 и А2, сложить их и сумму поместить в адрес А3. Для реализации этого сложения на одноадресной машине потребуется выполнить не одну, а три команды:

a) извлечь содержимое ячейки А1 в сумматор;

b) сложить сумматор с числом из А2;

c) записать результат из сумматора в А3.

Может показаться, что одноадресной машине для решения любой задачи потребуется втрое больше команд, чем трехадресной. На самом деле это далеко не всегда так. Попробуйте самостоятельно спланировать программу вычисления выражения Y = (X1 + X2) * X3/X4 и вы с удивлением обнаружите, что потребуется 3 трехадресных команды и всего 5 одноадресных. Таким образом, одноадресная машина в чем-то даже эффективнее, т.к. она не производит ненужной записи в память промежуточных результатов.

Ради полноты изложения следует сказать о возможности реализации безадресной (нульадресной) машины, использующей особый способ организации памяти — стек. Хотя подобная машина неудобна для человека, она легко реализуется в компьютере; в частности, именно так устроена JAVA-машина.

Чтобы получить хотя бы некоторое представление об уровне машинных команд, приведем примеры нескольких типичных инструкций для процессоров семейства Intel.

С точки зрения программиста, машинные команды — это самый низкий уровень. Но для процессора каждая инструкция распадается на еще более простые составные части, которые принято называть тактами. На каждом такте процессор выполняет какие-либо совсем элементарные действия, например, обнуляет один из своих внутренних регистров, копирует содержимое из одного регистра в другой, анализирует содержимое отдельных битов информации и т.д. Для синхронизации последовательных машинных тактов они инициируются с помощью специального тактового генератора. Его частота выбирается инженерами таким образом, чтобы к началу следующего такта все операции предыдущего успевали надежно заканчиваться.

Различные по сложности операции выполняются за разное количество тактов. Например, передача содержимого одного регистра в другой выполняется гораздо быстрее, чем умножение чисел. Существенно удлиняется выполнение команды, если ее данные берутся не из внутренних регистров самого процессора, а из оперативной памяти (именно поэтому в процессор встраивается внутренний кэш).

Из сказанного выше отчетливо следует, что тактовая частота, определяющая время выполнения составляющих машинной команды, является важной характеристикой процессора: чем она выше, тем быстрее при прочих равных условиях работает процессор. Подчеркнем, что в случае различных алгоритмов выполнения операций внутри разных моделей процессоров использовать тактовую частоту как меру сравнения их быстродействия весьма проблематично.

Эксперименты показывают 5, что для процессоров типа Pentium и ниже простые инструкции (пересылки, сложение регистров и т.п.) выполняются примерно за один такт. Таким образом, тактовая частота вполне может служить приблизительной оценкой количества таких операций, выполняемых за 1 секунду. Для более поздних моделей картина существенно “размывается” из-за сложных методов одновременного выполнения нескольких операций.

Методические рекомендации

Курс информатики основной школы

В базовом курсе достаточно дать ученикам лишь наиболее общее представление о машинных командах. При этом важно подчеркнуть два аспекта проблемы. Во-первых, как и любой исполнитель, компьютер имеет собственную систему команд. А во-вторых, эта система является базовой для реализации всех остальных уровней программного обеспечения.

Читайте также:  Какие микроэлементы содержаться в орехах

Предложенное в статье объяснение понятия тактовой частоты не является традиционным, но оно достаточно просто для понимания и хорошо согласуется с устройством процессоров.

Курс информатики в старших классах

При изучении программного обеспечения можно рекомендовать учителю в ознакомительном плане изложить материал данной статьи. Хотя полученные знания, вероятно, не будут непосредственно применяться учениками, для формирования общих представлений об обработке информации на компьютере они являются весьма полезными.

Принципы исполнения программы в машинных командах можно также изучать с помощью известного по методической литературе приема — учебной модели ЭВМ, такой, как “Кроха”, “Нейман”, “Малютка”, и др. 6. Достоинство такого подхода заключается в том, что учебная модель компьютера, отражая его наиболее важные черты, в то же время устроена наиболее просто и не содержит “отвлекающих” внимание учеников второстепенных деталей. На базе учебного компьютера можно продемонстрировать ученикам следующие вопросы: программный принцип работы ЭВМ, система команд, хранение данных в ОЗУ — и некоторые другие. При наличии соответствующего учебного ПО (его можно взять, например, с указанного выше сайта) можно даже продемонстрировать ученикам на базе изучаемой модели, что такое языки ассемблер и Паскаль.

5 См., например, эксперименты 3.6.2 в: Еремин Е.А. Популярные лекции об устройстве компьютера. СПб.: BHV-Петербург, 2003, 272 с.

6 Подробному описанию учебных моделей посвящен сайт https://educomp.runnet.ru/.

Источник

Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 11 февраля 2020;
проверки требуют 3 правки.

Эта статья о системе команд в целом; об инструкциях см. Код операции.

Памятка программиста, 1960-е годы. Цифровой (машинный) код «Минск-22»

Маши́нный код (платфо́рменно-ориенти́рованный код), маши́нный язы́к — система команд (набор кодов операций) конкретной вычислительной машины, которая интерпретируется непосредственно процессором или микропрограммами этой вычислительной машины.[1]

Компьютерная программа, записанная на машинном языке, состоит из машинных инструкций, каждая из которых представлена в машинном коде в виде т. н. опкода — двоичного кода отдельной операции из системы команд машины. Для удобства программирования вместо числовых опкодов, которые только и понимает процессор, обычно используют их условные буквенные мнемоники. Набор таких мнемоник, вместе с некоторыми дополнительными возможностями (например, некоторыми макрокомандами, директивами), называется языком ассемблера.

Каждая модель процессора имеет свой собственный набор команд, хотя во многих моделях эти наборы команд сильно перекрываются. Говорят, что процессор A совместим с процессором B, если процессор A полностью «понимает» машинный код процессора B. Если процессоры A и B имеют некоторое подмножество инструкций, по которым они взаимно совместимы, то говорят, что они одной «архитектуры» (имеют одинаковую архитектуру набора команд).

Машинная инструкция[править | править код]

Каждая машинная инструкция выполняет определённое действие, такое как операция с данными (например, сложение или копирование машинного слова в регистре или в памяти) или переход к другому участку кода (изменение порядка исполнения; при этом переход может быть безусловным или условным, зависящим от результатов предыдущих инструкций). Любая исполнимая программа состоит из последовательности таких атомарных машинных операций.

Операции, записываемые в виде одной машинной инструкции, можно разделить на «простые» (элементарные операции) и «сложные». Кроме того, большинство современных процессоров состоит из отдельных «исполнительных устройств» — вычислительных блоков, которые умеют исполнять лишь ограниченный набор простейших операций. При исполнении очередной инструкции специальный блок процессора — декодер — транслирует (декодирует) её в последовательность элементарных операций, понимаемых конкретными исполнительными устройствами.

Архитектура набора команд процессора определяет, какие операции он способен выполнять, и какой машинной инструкции какие числовые коды операций (опкоды) соответствуют. Опкоды бывают постоянной длины (у RISC-, MISC-архитектур) и диапазонной (у CISC-архитектур; например: для архитектуры x86 команда имеет длину от 8 до 120 битов).

Современные суперскалярные процессоры способны выполнять несколько машинных инструкций за один такт.

Машинный код как язык программирования[править | править код]

Машинный код можно рассматривать как примитивный язык программирования или как самый низкий уровень представления скомпилированных или ассемблированных компьютерных программ. Хотя вполне возможно создавать программы прямо в машинном коде, сейчас это делается редко в силу громоздкости кода и трудоёмкости ручного управления ресурсами процессора, за исключением ситуаций, когда требуется экстремальная оптимизация. Поэтому подавляющее большинство программ пишется на языках более высокого уровня и транслируется в машинный код компиляторами. Машинный код иногда называют нативным кодом (также собственным или родным кодом — от англ. native code), когда говорят о платформенно-зависимых частях языка или библиотек.[2]

Программы на интерпретируемых языках (таких как Basic или Python) не транслируются в машинный код; вместо этого они либо исполняются непосредственно интерпретатором языка, либо транслируются в псевдокод (байт-код). Однако интерпретаторы этих языков (которые сами можно рассматривать как процессоры), как правило, представлены в машинном коде.

Микрокод[править | править код]

В некоторых компьютерных архитектурах поддержка машинного кода реализуется ещё более низкоуровневым слоем программ, называемых микропрограммами. Это позволяет обеспечить единый интерфейс машинного языка у всей линейки или семейства компьютеров, которые могут иметь значительные структурные отличия между собой, и облегчает перенос программ в машинном коде между разными моделями компьютеров. Примером такого подхода является семейство компьютеров IBM System/360 и

несмотря на разные шины шириной от 8 до 64 бит и выше, тем не менее, у них общая архитектура на уровне машинного языка.

Использование слоя микрокода для реализации эмулятора позволяет компьютеру представлять архитектуру совершенно другого компьютера. В линейке System/360 это использовалось для переноса программ с более ранних машин IBM на новое семейство — например, эмулятор IBM 1401/1440/1460 на IBM S/360 model 40.

Читайте также:  Какие вещества содержатся в йоде

Абсолютный и позиционно-независимый код[править | править код]

Абсолютный код (англ. absolute code) — программный код, пригодный для прямого выполнения процессором[1], то есть код, не требующий дополнительной обработки (например, разрешения ссылок между различными частями кода или привязки к адресам в памяти, обычно выполняемой загрузчиком программ). Примерами абсолютного кода являются исполнимые файлы в формате .COM и загрузчик ОС, располагаемый в MBR. Часто абсолютный код понимается в более узком смысле как позиционно-зависимый код (то есть код, привязанный к определённым адресам памяти).

Позиционно-независимый код (англ. position-independent code) — программа, которая может быть размещена в любой области памяти, так как все ссылки на ячейки памяти в ней относительные (например, относительно счётчика команд). Такую программу можно переместить в другую область памяти в любой момент, в отличие от перемещаемой программы, которая хотя и может быть загружена в любую область памяти, но после загрузки должна оставаться на том же месте.[1]

Возможность создания позиционно-независимого кода зависит от архитектуры и системы команд целевой платформы. Например, если во всех инструкциях перехода в системе команд должны указываться абсолютные адреса, то код, требующий переходов, практически невозможно сделать позиционно-независимым. В архитектуре x86 непосредственная адресация в инструкциях работы с данными представлена только абсолютными адресами, но поскольку адреса данных считаются относительно сегментного регистра, который можно поменять в любой момент, это позволяет создавать позиционно-независимый код со своими ячейками памяти для данных. Кроме того, некоторые ограничения набора команд могут сниматься с помощью самомодифицирующегося кода или нетривиальных последовательностей инструкций.

Программа «Hello, world!»[править | править код]

Программа «Hello, world!» для процессора архитектуры x86 (ОС MS DOS, вывод при помощи BIOS прерывания int 10h) выглядит следующим образом (в шестнадцатеричном представлении):

BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21

Комментарии к программе

Данная программа работает при её размещении по смещению 10016. Отдельные инструкции выделены цветом:

  • BB 11 01, B9 0D 00, B4 0E, 8A 07 — команды присвоения значений регистрам.
  • 43 — инкремент регистра BX.
  • CD 10, CD 20 — вызов программных прерываний 1016 и 2016.
  • E2 F9 — команда для организации цикла.
  • Малиновым показаны данные (строка «Hello, world!»).

Тот же код ассемблерными командами:

XXXX:0100 mov bx, 0111h ; поместить в bx смещение строки HW
XXXX:0103 mov cx, 000Dh ; поместить в cx длину строки HW
XXXX:0106 mov ah, 0Eh ; поместить в ah номер функции прерывания 10h
XXXX:0108 mov al, [bx] ; поместить в al значение ячейки памяти, адрес которой находится в bx
XXXX:010A inc bx ; перейти к следующему байту строки (увеличить смещение на 1)
XXXX:010B int 10h ; вызов прерывания 10h
XXXX:010D loop 0108 ; если cx≠0, то уменьшить cx на 1 и перейти по адресу 0108
XXXX:010F int 20h ; прерывание 20h: завершить программу
XXXX:0111 HW db ‘Hello, World!’ ; строка, которую требуется напечатать

См. также[править | править код]

  • Язык ассемблера
  • JIT-компиляция

Примечания[править | править код]

Источник

Язык машинных команд

Теперь познакомимся еще с одним принципом архитектуры ЭВМ, предложенным фон
Нейманом. Он называется принципом хранимой программы.

Что такое машинная команда какая информация содержится в ней
Наряду с данными в оперативную память компьютера помещается программа управления
его работой.

Компьютер является исполнителем программ и, следовательно, обладает своей
системой команд (СКИ).

Что такое машинная команда какая информация содержится в ней
Команды управления работой компьютера принято называть машинными командами.

    Машинная команда должна содержать в себе следующую информацию:

  • какую операцию выполнить;
  • где находятся операнды;
  • куда поместить результат операции;
  • какую команду выполнять следующей.

Компьютеры разных типов имеют разную структуру команд.

Что такое машинная команда какая информация содержится в ней
Всякая машинная команда состоит из кода операции и адресной части.

В «УК Нейман» машинные команды имеют трехадресную структуру (формат). Это
значит, что ячейка, в кото-рой хранится команда, делится на четыре части (по
одному байту на каждую часть). Будем их обозначать следующим образом:

КОП — код операции,

А1 — адрес первого операнда,

А2 — адрес второго операнда,

A3 — адрес результата.

Операндами называют данные, над которыми производится операция. В
арифметических операциях это слагаемые, сомножители, уменьшаемое и вычитаемое,
делимое и делитель.

Вот пример команды сложения двух чисел (в шестнадцатеричной форме):

01 — это код операции сложения;

44 — адрес первого слагаемого;

48 — адрес второго слагаемого;

4С — адрес ячейки, в которую помещается сумма.

Для всех арифметических операций ответ на вопрос: «Какую команду выполнять
следующей?» всегда одинаковый: следующей выполняется команда, находящаяся в
следующей ячейке памяти.

Записывать команды на бумаге удобнее в шестнадцатеричной форме. В памяти ЭВМ
команда имеет двоичный вид. Используя двоично-шестнадцатеричную таблицу, легко
получить внутреннее представление приведенной выше команды:

КОП А1А2 A3
00000001 010001000100100001001100

В ТАБЛИЦЕ 2 содержится система команд «УК Нейман».

ТАБЛИЦА 2. Система команд «УК Нейман»:

КОП Операция Пояснение
00Пересылка(А1)=>АЗ
01Сложение(А1) + (А2)=>АЗ
02Вычитание(А1)-(А2)=>АЗ
03 Умножение(А1)*А2)=>АЗ
77 Останов Прекращение выполнения программы программы

Запись (А1) + (А2) => A3 надо понимать так: содержимое ячейки с адресом А1
сложить с содержимым ячейки с адресом А2 и результат записать в ячейку A3;

(А1)=> A3 — содержимое ячейки А1 занести (скопировать) в ячейку A3.

Что такое машинная команда какая информация содержится в ней
Совокупность правил записи программ управления компьютером с использованием
машинных команд называется машинным языком (или языком машинных команд).

Рассмотрим пример небольшой программы на машинном языке. Пусть, например,
требуется вычислить выражение

Читайте также:  В какой пище содержится инсулин

(А + В)*С.

Каждое число, участвующее в расчетах, занимает ячейку памяти. Программист должен
сам распределять память под данные. Под величины А, В, С выделим следующие
ячейки памяти:

(20) = А,&nbsp &nbsp (24) = В,&nbsp &nbsp(28) = С.

Результат вычисления выражения поместим в ячейку 2С. Команды программы тоже
помещаются в определенные ячейки. Вот фрагмент программы, решающей нашу задачу:

Адрес КОП А1А2 A3 Пояснение
ОС012024(20)+(24) => 2С &nbsp &nbsp А+В
10 0328(2С)х(28)=>2С &nbsp &nbsp(А+В)*С

В графе «Адрес» указываются номера ячеек, в которых располагаются команды.
Команды этой программы выполняются в «естественном порядке» возрастания адресов
ячеек: сначала ОС, затем 10 (еще раз напомним, что адреса ячеек меняются с шагом
4).

Что такое машинная команда какая информация содержится в ней
Занесение значения в ячейку памяти называется присваиванием.

Что такое машинная команда какая информация содержится в ней
В результате присваивания старое значение, которое хранилось в этой ячейке,
стирается и заменяется на новое.

Что такое машинная команда какая информация содержится в ней
Если ячейке ничего не присвоено, то ее значение является неопределенным.

Ячейке 2С значение присваивается дважды: сначала результат суммирования, затем —
умножения. Первый результат — промежуточный, второй — окончательный.

Однако приведенная программа не может быть исполнена. Во-первых, не определены
значения исходных данных А, В, С. Во-вторых, пользователь не сможет узнать
результаты вычислений, поскольку они останутся внутри памяти, в ячейке 2С, а в
нее не заглянешь.

Исходные данные должны задаваться вводом.

Что такое машинная команда какая информация содержится в нейВвод — это процесс занесения данных в оперативную память с помощью устройств
ввода.

Результаты вычислений должны быть выведены.

Что такое машинная команда какая информация содержится в нейВывод — это отражение информации в оперативной памяти на устройствах вывода.

Вывод делает результаты выполнения программы доступными для пользователя.

Устройством ввода на «УК Нейман» является клавиатура. Устройством вывода —
экран.

В «УК Нейман» ввод и вывод организованы следующим образом: с клавиатурой и
экраном связана последняя ячейка памяти — ячейка FC. Будем называть ее буферной
ячейкой ввода-вывода.

При вводе набираемое на клавиатуре значение попадает в ячейку FC. На экране
постоянно отражается содержимое ячейки FC в шестнадцатеричном виде. Поэтому для
вывода значения из любой ячейки памяти его надо переслать в буферную ячейку FC.

Из ТАБЛИЦЫ 2 следует, что команда пересылки имеет вид:

В этой команде содержимое адреса А2 не влияет на ее исполнение (в дальнейшем на
месте А2 будем писать нули). В результате выполнения команды пересылки значение
в ячейке A3 становится равным (А1). При этом значение ячейки А1 не меняется.
Иначе это называется так: ячейке A3 присваивается значение ячейки А1.

Поясним на примере.

Пусть в 10-й ячейке находится число 5, а в 20-й ячейке число 7:

10

&nbsp 20

После выполнения команды

00 10 00 20

их значения станут одинаковыми:

10

&nbsp 20

В рассмотренной выше задаче вычисления (А + В) * Сна экран нужно вывести
результат, полученный в ячейке 2С. Для этого его следует присвоить ячейке FC.
Значит, команда вывода будет такой:

00 2С 00 FC.

Как запрограммировать ввод значения А в ячейку 20? Делается это так:

00 FC 00 20.

Процессор, обнаружив команду, у которой КОП=00 и A1=FC, прерывает работу и ждет
действий пользователя. Пользователь набирает на клавиатуре вводимое число. Это
число заносится в ячейку FC и одновременно высвечивается на экране. Затем
пользователь нажимает клавишу . Процессор выполняет команду пересылки из
ячейки FC в ячейку 20. Ввод завершился, процессор переходит к выполнению
следующей команды.

Запишем команды ввода и вывода в общем виде:

00 FC 00 A3 — ввод числа в ячейку

A3 00 А1 00 FC — вывод числа из ячейки А1

А теперь запишем программу вычисления выражения (А+В) * С в окончательном виде.
Договоримся, что любая программа будет располагаться в начале памяти. Первая
команда всегда находится в ячейке 00.

ПРОГРАММА 1:

Адрес КОП А1 А2 A3 Пояснения
00 00 FC0020ввод А
04 00FC 00 24 вввод В
0800FC0028ввод С
ОС01 2024 А+В
100328(А+В)*С
140000FCвывод результата
1877000000стоп

В ячейке 18 находится команда останова с кодом операции 77. Результат ее
выполнения — остановка работы машины. Содержимое адресной части в этой команде
не имеет значения.

Коротко о главном

Программа, управляющая работой компьютера, помещается в его оперативную память.

В машинной команде заключена следующая информация: какая выполняется операция,
где хранятся операнды, куда поместить результат, какую команду выполнять
следующей (если нет указания, то следующей выполняется команда, расположенная в
следующей ячейке).

Машинная команда состоит из кода операции (КОП) и адресной части.

«УК Нейман»имеет трехадресную структуру команды: КОП A1 A2 A3.

Для арифметических операций А1 и А2 — адреса операндов, A3 — адрес результата.

Исходные данные вводятся в память по команде ввода, результаты выводятся по
команде вывода.

Вопросы и задания

  1. В чем состоит принцип хранимой программы?
  2. Что такое машинный язык?
  3. Что такое машинная команда? Какая информация содержится в ней?
  4. Из каких частей состоит машинная команда?
  5. Почему структура команд «УК Нейман» называется трехадресной? Каково
    назначение каждого адреса в арифметической команде?
  6. Что называется присваиванием? Что происходит с содержимым ячейки при
    присваивании ей нового значения?
  7. Что такое ввод и вывод? По какой команде в «УК Нейман» происходит ввод и по
    какой команде — вывод?
  8. Какое действие определяет следующая команда на машинном языке «УК Нейман»:

    02 20 24 28?

Источник