МАШИННЫЙ ЯЗЫК.docx

  • docx
  • 29.04.2020
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала МАШИННЫЙ ЯЗЫК.docx

МАШИННЫЙ ЯЗЫК

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

Значительный шаг вперед (приписываемый, возможно, несправедливо Джону фон Нейману (John von Neuman )) состоял в осознании того, что программа, как и данные, может быть закодирована и сохранена в основной памяти машины. Если раз- работать блок управления таким образом, чтобы он был способен извлекать программу из памяти, расшифровывать коман- ды, а затем выполнять их, то программу работы компьютера можно было бы изменять посредством изменения содержимого ячеек его основной памяти, вместо того чтобы перекоммутировать схемы блока управления. С тех пор эта концепция храни- мой программы (stored-program concept) считается стандартным подходом к решению данной проблемы, применяемым и в настоящее время. Прежде эта идея считалась сложной, поскольку многие относили данные и программы к совершенно раз- ным категориям. Это как раз тот случай, когда за деревьями не удавалось увидеть леса.

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

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

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

2.4.   Она состоит из 16 регистров общего назначения и 256 ячеек основной памяти, каждая из которых имеет длину восемь битов. Для целей адресации присвоим регистрам номера от 0 до 15, а адреса ячеек основной памяти установим равными от 0 до 255, исключая те случаи, когда мы будем работать с этими числами, представленными в двоичной системе. В последнем случае битовые комбинации будем представлять в шестнадцатеричной системе счисления, поэтому регистры общего назна- чения будут иметь номера от 0 до F, а ячейки памяти – адреса от 00 до FF.

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



Рис. 2.4. Архитектура машины, описанной в приложении В

 

Рис. 2.5. Формат команды вычислительной машины, описанной в приложении B

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

Поле операнда каждой команды состоит из трех шестнадцатеричных цифр (12 бит) и во всех случаях (кроме команды остановки, для которой не требуется никаких уточнений) содержит дополнительные сведения, необходимые для выполнения команды, заданной кодом операции. Следовательно, если первая шестнадцатеричная цифра команды равна 1 (код операции считывания ячейки памяти), то следующая шестнадцатеричная цифра команды указывает общий регистр, в который требу- ется загрузить считанное из основной памяти значение, а последние две шестнадцатеричные цифры задают адрес ячейки памяти, из которой требуется считать данные. Например, команда 1347 (шестнадцатеричное число) воспринимается машиной как "Загрузить в регистр 3 содержимое ячейки памяти с адресом 47". Если код операции представлен шестнадцатеричной цифрой 7 (операция ОR над содержимым двух регистров общего назначения), то следующая шестнадцатеричная цифра ука- зывает номер регистра, в который следует поместить результат операции, а две последние шестнадцатеричные цифры поля операндов задают номера тех регистров, над содержимым которых необходимо выполнить операцию ОR. В результате ко- манда 70С5 понимается как инструкция "Выполнить операцию ОR с содержимым регистров С и 5, а результат поместить в регистр 0".

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

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

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

Закончим этот раздел примером закодированной последовательности команд, приведенной на рис. 2.2. Предположим, что суммируемые числа представлены в дополнительном двоичном коде и хранятся в ячейках памяти с адресами 6С и 6D, а


сумму этих чисел необходимо поместить в ячейку памяти с адресом 6Е.

Этап 1                         156С

Этап 2                         166D

Этап 3                        5056

Этап 4                         306Е

Этап 5                         С000

Вопросы для самопроверки

1.  Запишите программу, приведенную как пример в конце данного раздела, в виде собственно битовых комбинаций.

2.  Ниже представлены команды, записанные на машинном языке, которые описаны в приложении B. Приведите тексто- вую формулировку этих команд.

а) 368А; б) BADE; в) 803С; г) 40F4.

3.   В чем состоит различие между командами 15АВ и 25АВ, записанными на машинном языке, представленном в при- ложении В?

4.   Ниже дано текстовое представление нескольких машинных команд. Запишите эти команды на машинном языке, представленном в приложении В.

а) Загрузить в регистр 3 шестнадцатеричное число 56.

б) Сдвинуть содержимое регистра 5 на три бита вправо.

в) Передать управление команде, расположенной по адресу F3, если содержимое регистра 7 равно содержимому реги- стра 0.

г) Выполнить операцию AND над содержимым регистров А и 5 и поместить ее результат в регистр 0.