Программа это набор машинных команд

Важной составной частью архитектуры ЭВМ является система команд. Несмотря на большое число разновидностей ЭВМ, на самом низком (“машинном”) уровне они имеют много общего.

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

Система команд любой ЭВМ обязательно содержит следующие группы команд обработки информации:

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

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

Урок 2 — Настройка окружения и введение в язык Си

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

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

5. Команды ввода и вывода информации для обмена с внешними устройствами. В некоторых ЭВМ внешние устройства являются специальными служебными адресами памяти, поэтому ввод и вывод осуществляется с помощью команд переписи.

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

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

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

5.Микропроцессорные системы. Виды и классификация микроконтроллеров

Рассматриваясистему команд, нельзя не упомянуть о двух современных взаимно конкурирующих направлениях в ее построении: компьютер с полным набором команд CISC (Complex Instruction Set Computer) и с ограниченным набором – RISC (Reduced Instruction Set Computer). Разделение возникло из-за того, что основную часть времени компьютеру приходится выполнять небольшую часть из своего набора команд, остальные же используются эпизодически. Таким образом, если существенно ограничить набор операций до наиболее простых и коротких, зато тщательно оптимизировать их, получится достаточно эффективная и быстродействующая RISC-машина. Правда за скорость придется платить необходимостью программной реализации “отброшенных” команд, но часто эта плата бывает оправданной: например, для научных расчетов или машинной графики быстродействие существенно важнее проблем программирования.

Как уже отмечалось в п.2, важной составной частью фон-неймановской архитектуры является счетчик адреса команд. Этот специальный внутренний регистр процессора всегда указывает на ячейку памяти, в которой хранится следующая команда программы. При включении питания или при нажатии на кнопку сброса (начальной установки) в счетчик аппаратно заносится стартовый адрес находящейся в ПЗУ программы инициализации всех устройств и начальной загрузки. Дальнейшее функционирование компьютера определяется программой. Таким образом, вся деятельность ЭВМ – это непрерывное выполнение тех или иных программ, причем программы эти могут в свою очередь загружать новые программы и т.д.

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

Читайте также:
Программа деления числа для машины поста

При выполнении каждой команды ЭВМ проделывает определенные стандартные действия:

1) согласно содержимому счетчика адреса команд, считывается очередная команда программы (ее код обычно заносится на хранение в специальный регистр УУ, который носит название регистра команд);

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

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

Затем во всех случаях, за исключением команды останова или наступления прерывания (см. ниже в п. 3.5), все описанные действия циклически повторяются.

После выборки команды останова ЭВМ прекращает обработку программы. Для выхода из этого состояния требуется либо запрос от внешних устройств, либо перезапуск машины.

Рассмотренный основной алгоритм работы ЭВМ позволяет шаг за шагом выполнить хранящуюся в ОЗУ линейную программу. Если же требуется изменить порядок вычислений для реализации развилки или цикла, достаточно в счетчик команд занести требуемый адрес (именно так происходит условный или безусловный переход).

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

В результате по окончании команды чаще всего оказывается, что следующая уже выбрана из ОЗУ, дешифрована и подготовлена к исполнению. Отметим, что в случае нарушения естественного порядка выполнения команд в программе (например, при безусловном переходе) опережающая выборка оказывается напрасной и конвейер очищается. Следующая за переходом команда выполняется дольше, так как, чтобы конвейер “заработал на полную мощность”, необходимо его предварительно заполнить. Иными словами, в конвейерной машине время выполнения программы может зависеть не только от составляющих ее команд, но и от их взаимного расположения.

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

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

Адресная часть обладает значительно большим разнообразием и ее следует рассмотреть подробнее.

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

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

Трехадресная команда легко расшифровывалась и была удобна в использовании, но с ростом объемов ОЗУ ее длина становилась непомерно большой. Действительно, длина команды складывается из длины трех адресов и кода операции.

Отсюда следует, например, что для скромного ОЗУ из 1024 ячеек только для записи адресной части одной команды требуется 3*10 = 30 двоичных разрядов, что для технической реализации не очень удобно. Поэтому появились двухадресные машины, длина команды в которых сокращалась за счет исключения адреса записи результата. В таких ЭВМ результат операции оставался в специальном регистре (сумматоре) и был пригоден для использования в последующих вычислениях. В некоторых машинах результат записывался вместо одного из операндов. Дальнейшее упрощение команды привело к созданию одноадресных машин.

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

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

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

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

Читайте также:
Оп ком программа на русском

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

Язык ассемблера (автокод) — язык программирования «низкого уровня». В отличие от языка машинных кодов позволяет использовать более удобные для человека мнемонические (символьные) обозначения команд.

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

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

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

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

Существуют ЭВМ, реализующие в качестве машинного язык программирования высокого уровня (Forth, Lisp,Эль-76), фактически в них он является «ассемблером».

Источник: zdamsam.ru

Языки программирования. Компиляция и интерпретация

Структурное программирование основывается на двух важнейших принципах:

· последовательной детализации алгоритма;

· использовании набора базовых структур (отсюда и название метода) для построения алгоритма любой степени сложности.

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

· линейной (последовательной) структуры;

· разветвляющейся (ветвящейся) структуры;

Каждая из этих структур имеет только один вход и только один выход, что позволяет соединять между собой в процессе разработки алгоритма любое количество элементов базовых структур в необходимом для решения задачи порядке. Сложные для понимания и реализации блоки заменяют на последовательность более простых базовых конструкций. При этом количество шагов детализации алгоритма в принципе не ограничено. Структурное программирование широко применяется, поскольку созданы специальные языки программирования, например Паскаль или версии Бейсика (QBasic) позволяющие структурировать программу.
Метод структурного программирования дает возможность решать сложные задачи в самых разных областях профессиональной деятельности.

Языки программирования. Компиляция и интерпретация

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

При таком подходе необходимо:

o создать строгую систему условных обозначений для записи команд в понятной для человека форме (язык программирования),

o создать программу-посредника, которая переводила бы такие команды на язык, понятный машине.

После этого на языке программирования можно писать множество программ, пользуясь единственной программой-переводчиком. «Грамматические» правила языка программирования формулируются предельно четко и не допускают вольного расположения отдельных элементов команды и знаков препинания (иначе программа-посредник «не поймет» ваши указания). Каждая команда имеет строго определенный синтаксис (правила записи). Например, если установлено, что условие «если» надо писать по-английски (if) и после условия (a[i]>m) нельзя ставить запятую, то всякая иная запись такой команды будет воспринята программой-посредником как ошибка.
Команды на языке программирования часто называют операторами или инструкциями. Операнд – это элемент, над которыми выполняются действия операторов. Последовательность таких команд, реализующих тот или иной алгоритм, называют программой на исходном языке или просто исходным текстом.

Кроме исходного текста, конкретная программа может иметь еще и машинный код, который непосредственно исполняется на машине. Исходные тексты помещают в текстовые файлы. Существует два типа программ-посредников, работающих с исходными текстами: компилятор и интерпретатор.
Программа-компилятор (от слова compile– составлять, собирать) переводит исходный текст в машинный код и записывает его на диск в форме исполняемого (загрузочного) файла. После этого программа выполняется независимо от исходного текста. Раньше программы-компиляторы называли– трансляторами (переводчиками).
Программа-интерпретатор всегда работает совместно с исходным текстом. Она разбирает каждую команду исходного текста (интерпретирует ее) и немедленно исполняет т.е. файл на машинном языке не создается. Программа в режиме интерпретации работает гораздо медленнее, чем такая же программа в машинном коде.

Это связано с тем, что каждую инструкцию приходится разбирать во время выполнения, а не заранее, как при компиляции. Многие инструкции в программе выполняются многократно, – и при каждом выполнении интерпретируются заново. Поэтому всюду, где возможно, стремятся заменить режим интерпретации режимом компиляции. Правда, интерпретация имеет и свои преимущества: с ее помощью проще отлаживать программу. Иногда пользуются режимом «псевдокомпиляции»: ускоряют интерпретацию за счет предварительного запоминания тех или иных элементов разобранных команд в памяти машины.
В настоящее время машинные коды не используются, и каждая программа для компьютера составляется на том или ином языке программирования. Существует очень много языков, все они, как правило, содержат средства описания данных, арифметические операторы (подобные с = а+b), средства управления и организации циклов, средства ввода и вывода информации.

Читайте также:
Какие авиакомпании участвуют в программе кэшбэк

Источник: studopedia.ru

5.Функциональная классификация машинных команд.

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

Классификация машинных команд

Весь набор машинных комманд можно разбить на 4 группы

Команды основного процессора (целочисленные)

Команды пересылки данных

Команды пересылки данных общего назначения

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

Команды работы со стеком

Это набор специализированных команд, ориентированных на организацию гибкой и эффективной работы со стеком.

Стек — это область памяти, специально выделяемая для временного хранения данных программы. Для работы со стеком предназначены три регистра:

  • ss — сегментный регистр стека;
  • sp/esp — регистр указателя стека;
  • bp/ebp — регистр указателя базы кадра стека.

Арифметические команды

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

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

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

Логические команды

В основе логических преобразований лежат правила формальной логики. Формальная логика работает на уровне утверждений истинно и ложно. Для микропроцессора это, как правило, означает 1 и 0 соответственно.

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

Все команды сдвига перемещают биты в поле операнда влево или вправо в зависимости от кода операции. Количество сдвигаемых разрядов — счетчик_сдвигов — располагается на месте второго операнда и может задаваться двумя способами:

  • статически, что предполагает задание фиксированного значения с помощью непосредственного операнда;
  • динамически, что означает занесение значения счетчика сдвигов в регистр cl перед выполнением команды сдвига. Все команды сдвига устанавливают флаг переноса cf.
    По принципу действия команды сдвига можно разделить на два типа:
  • команды линейного сдвига;
  • команды циклического сдвига.

Команды передачи управления

Регистр ecx/cx имеет определенное функциональное назначение — он выполняет роль счетчика в командах управления циклами и при работе с цепочками символов.

Синтаксис этой команды условного перехода таков:

  • jcxz метка_перехода (Jump if cx is Zero) — переход, если cx ноль;
  • jecxz метка_перехода (Jump Equal ecx Zero) — переход, если ecx
    ноль.

Эти команды очень удобно использовать при организации цикла и при работе с цепочками символов.

Нужно отметить ограничение, свойственное команде jcxz/jecxz.

В отличие от других команд условной передачи управления, команда jcxz/jecxz может адресовать только короткие переходы — на –128 байт или на +127 байт от следующей за ней команды.

Цепочечные команды

Цепочка — непрерывная последовательность байт, слов или двойных слов, обрабатываемая как единое целое. Основное отличие цепочек от массивов состоит в способе доступа к элементам: для массивов — произвольный доступ, для цепочек — только последовательный (от начала цепочки к концу или от конца к началу).

Цепочечные команды — команды для обработки цепочек. Особенностью всех цепочечных команд является автоматическое продвижение к следующему элементу цепочки.

  • цепочка источник — ds:si
  • цепочка приёмник — es:di
  • от начала к концу
    df = 0; si и di автоматически увеличиваются команда cld (clear direction flag) сбрасывает флаг df
  • от конца к началу df = 1; si и di автоматически уменьшаются команда std (set direction flag) устанавливает ## Команды управления состоянием процессора:

Команды управления состоянием процессора:

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

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

Флаги используются, как правило, в командах проверки условий.

  • 0(CF) — флаг переноса при вычислениях или операциях сдвига.
  • 2(PF) — флаг приоритета.
  • 4(AF) — флаг дополнительного переноса.
  • 6(ZF) — флаг нулевого результата.
  • 7(SF) — флаг знака числа.
  • 8(TF) — флаг трассировки. Полезен при отладке программ
  • 9(IF) — флаг разрешения прерываний
  • 10(DF) — флаг направления (в циклических операциях)
  • 11(OF) — флаг переполнения при вычислениях.

Источник: kvckr.me

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru