русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Машинный язык


Дата добавления: 2014-10-07; просмотров: 3335; Нарушение авторских прав


Для того чтобы можно было применять принцип хранимой программы, центральный процессор должен уметь распознавать инструкции, представленные в двоичном коде. Этот набор указаний вместе с системой кодирования называется машинным языком (machine language). Инструкции, написанные на этом языке, называются машинными командами (machine instruction).

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

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



И CISC-процессоры, и RISC-процессоры выпускаются серийно. Процессор Pentium, разработанный компанией Intel, является примером CISC-архитектуры; процессор PowerPC, разработанный альянсом Apple Computer, IBM и Motorola, является примером RISC-архитектуры. Для простоты изложения в этой главе мы будем рассматривать RISC-процессор.

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

♦ команды передачи данных,

♦ арифметико-логические команды,

♦ команды управления.

Команды передачи данных.В эту группу входят команды, которые предписывают перемещение данных из одного места в другое.

Сложение двух чисел, хранящихся в оперативной памяти

Шаг 1. Взять значений из ячейки памяти и поместить его в регистр.

Шаг 2. Взять значение из другой ячейки памяти и поместить его в другой регистр.

Шаг 3. Активировать схему сложения, на входе которой будут данные из регистров, описанных в шагах 1 и 2 и задав еще один регистр в качестве выходного, предназначенного для размещения результата.

Шаг 4. Сохранить результат операции в основной памяти.

Шаг 5. Стоп.

Шаги 1, 2 и 4 алгоритма сложения значений, хранящихся в оперативной памяти относятся к командам передачи данных. Как и в случае оперативной памяти, данные при перемещении из одной ячейки в другую не удаляются из исходной ячейки. Процесс передачи данных больше похож на копирование данных, а не на их перемещение. В этом смысле общепринятые термины «передавать» (transfer) и «перемещать» (move) употребляются неправильно, поскольку термины «копировать» (сору) и «клонировать» (clone) являются более строгими.

Говоря о терминологии, следует упомянуть, что для передачи данных между центральным процессором и оперативной памятью существуют специальные термины. Требование заполнить регистр общего назначения содержимым ячейки памяти обычно называется командой загрузки, и наоборот, требование переместить содержимое регистра в ячейку памяти называется командой сохранения. Шаги 1 и 2 являются командами загрузки, а шаг 4 — командой сохранения.

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

Арифметико-логические команды.В эту группу входят команды, которые предписывают устройству управления активизировать арифметико-логическое устройство. К этой категории команд относится шаг 3. Как можно понять из его названия, арифметико-логическое устройство выполняет не только простые арифметические операции. К некоторым дополнительным операциям относятся логические операции AND, OR и XOR, которые мы обсуждали ранее и вскоре вновь будем их рассматривать, но уже более подробно. Эти операции часто используются для того, чтобы манипулировать отдельными битами регистра, не затрагивая остальных. Другие операции, доступные в большинстве арифметико-логических устройств, позволяют сдвигать содержимое регистра вправо или влево. Они называются операциями сдвига (SHIFT) или вращения (циклического сдвига) (ROTATE) в зависимости от того, удаляются ли биты, находящиеся на конце регистра, в направлении которого происходит сдвиг, или используются для заполнения пространства на другом его конце.

Команды управления.В эту группу входят команды, которые управляют выполнением программы, а не манипулируют данными. К этой категории команд относится шаг 5, хотя он и является слишком простым примером. Эта группа включает наиболее интересные машинные команды, такие как команды перехода (JUMP) или ветвления (BRANCH), которые предписывают устройству управления выполнять не следующую инструкцию, а какую-нибудь другую. Команды перехода разделяются на команды безусловного и условного перехода. Примером первых может быть инструкция «перейти к шагу 5», примером второй — «если полученное значение равно 0, тогда перейти к шагу 5». Различие заключается в том, что условный переход осуществляется только тогда, когда выполняется условие. Рассмотрим в качестве примера алгоритм деления двух чисел, в котором шаг 3 является условным переходом, исключающим возможность деления на ноль. Деление двух значений, хранящихся в памяти

Шаг 1. Загрузить в регистр значение из памяти.

Шаг 2. Загрузить в другой регистр другое значение из памяти.

Шаг 3. Если второе значение равно нулю, перейти к шагу 6.

Шаг 4. Разделить содержание первого регистра на содержание второго регистра и поместить результат в третий регистр.

Шаг 5. Сохранить содержание третьего регистра в памяти.

Шаг 6. Стоп.

 

Пример машинного языка

Рассмотрим, как закодированы команды гипотетической машины, представленной на рис. 1.

Рисунок 1 – Архитектура гипотетической машины

Архитектура машины.Гипотетическая машина имеет 16 регистров общего назначения. Длина каждого регистра равна одному байту (восьми битам). Память рассматриваемой машины состоит из 256 ячеек, каждая емкостью восемь битов. Мы маркировали регистры значениями от 0 до 15, а ячейкам памяти присвоили адреса со значениями от 0 до 255. Затем мы представили эти метки и адреса в двоичной системе счисления и сжали получившийся код при помощи шестнадцатеричного представления. Следовательно, в нашей машине регистры маркированы значениями от 0 до F, а адреса ячеек памяти имеют значения от 00 до FF.

Предполагается, что числа с плавающей запятой хранятся в следующем формате:

Рисунок 2 – Формат хранения чисел с плавающей запятой

Машинный язык.Длина каждой машинной команды равна двум байтам. Первые четыре бита содержат код операции, последние 12 битов образуют поле операндов. В приведенной ниже таблице перечислены и кратко описаны команды, показанные в шестнадцатеричном представлении. Буквы R, S и Т используются для указания в поле операндов позиции шестнадцатеричных цифр, являющихся идентификаторами регистров, которые меняются в зависимости от конкретной команды. Буквы X и Y используются для указания в поле операндов позиций тех шестнадцатеричных цифр, которые не являются идентификаторами регистров.

Закодированная машинная команда состоит обычно из двух частей: поля кода операции (op-code field) и поля операнда (operand field). Набор битов, расположенный в поле кода операции, обозначает, какая из элементарных операций, таких как операции сохранения, сдвига, XOR или перехода, запрашивается командой. Набор битов, находящийся в поле операнда, содержит подробные сведения об объектах, участвующих в операции, определенной кодом операции. Например, в случае команды сохранения в поле операнда содержится информация о том, в каком регистре находятся данные, которые нужно сохранить, и какая ячейка памяти должна получить эти данные.

Весь язык нашей машины (приложение В) состоит из 12 основных команд, каждая из которых представлена 16-битовым кодом, записанным четырьмя шестнадцатеричными цифрами (рис. 3).

Рисунок 3 – Структура машинной команды

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

Поле операнда каждой команды в нашей машине состоит из трех шестнадцатеричных цифр (12 битов) и в каждом случае (кроме команды останова, которая не нуждается в дальнейшем уточнении) поясняет команду, представленную кодом операции. Например (рис. 4), если первая шестнадцатеричная цифра команды — 3 (код операции сохранения), то следующая за ней цифра обозначает, данные из какого регистр нужно сохранить, а две другие, — какая ячейка памяти должна получить эти данные. Следовательно, команда 35А7 содержит следующие инструкции: «сохранить двоичный код, находящийся в регистре 5, в ячейке памяти с адресом А7».

Рисунок 4 – Декодирование команды 35А7

Рассмотрим другой пример. Код операции 7 говорит о том, что нужно выполнить операцию OR над двумя регистрами (мы позже рассмотрим, что означает операция OR над двумя регистрами, сейчас нас просто интересует, как закодированы команды). В этом случае следующая шестнадцатеричная цифра указывает, куда нужно поместить результат, а остальные две цифры в поле операнда означают, над какими двумя регистрами нужно выполнить операцию OR. Значит, команда 70С5 содержит такие инструкции: «выполнить операцию ИЛИ над содержанием регистра С и регистра 5 и сохранить результат в регистре 0».

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

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

В завершение приведeм закодированную последовательность команд программы сложения двух чисел (см. табл. 1). При этом мы предполагаем, что складываемые значения хранятся в виде двоичного дополнительного кода в ячейках памяти с адресами 6С и 6D, а сумму следует поместить в ячейку с адресом 6Е.

Таблица 1 – Расшифровка последовательности команд

 

№ шага Содержание операции Команда
Шаг 1 Взять значение из ячейки памяти и поместить его в регистр 156C
Шаг 2 Взять другое значение из другой ячейки памяти и поместить его в другой регистр 166D
Шаг 3 Активировать схему сложения, на входе которой будут данные из регистров, описанных в шагах 1 и 2 и задав еще один регистр в качестве выходного, предназначенного для размещения результата
Шаг 4 Сохранить результат операции в основной памяти 306E
Шаг 5 Стоп C000

 

Контрольные вопросы

1. Что означает понятие «машинный язык»?

2. Охарактеризуйте два различных взгляда на роль центрального процессора в контексте понятия «машинный язык».

3. Что означает понятие «система команд»? Охарактеризуйте каждую группу команд?

4. Какую структуру имеет машинная команда?

5. Составьте алгоритм сложения двух чисел представленных в формате с плавающей точкой.

 

 

Лекция № 9 Выполнение программы



<== предыдущая лекция | следующая лекция ==>
Другие архитектуры | Выполнение программы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.36 сек.