II. Варианты индивидуальных заданий

Лабораторная работа

Состав и назначение процессора. Пример машинного языка.

Цель: Знание: назначения основных блоков процессора; выполнение команд.

Задание для самостоятельной подготовки

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

2. Изучить содержание и порядок выполнения лабораторной работы.

 

I. Основные теоретические сведения

Назначение и структура микропроцессора

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

Можно рассмотреть несколько наиболее важных блоков микропроцессора и уточнить их функции и работу. Все эти блоки располагаются в корпусе микропроцессора. Наиболее важные из них — это устройство управления УУ, арифметически-логическое устройство АЛУ, регистры общего назначения (РОН), кэш-память первого L1 и второго L2 уровня и шины. У современных процессоров есть, разумеется, и ряд других узлов.

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

Шины и разрядность микропроцессора.

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

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

Шина данныхдвунаправленная шина, по которой данные от различных периферийных устройств подаются в процессор или, напротив, посылаются от процессора в эти устройства.

Шина адресов— однонаправленная шина, по которой от процессора посылаются сигналы, указывающие на адрес того или иного периферийного устройства.

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

По проводам шин данных и адресов идут двоичные электрические сигналы. Число проводов задает разрядность шин. В общем случае она различна для данных и адресов. Чем выше разрядность шины данных, тем больше информации передается за один раз по ней. Современные микропроцессоры, как правило, 32-разрядные, хотя появились и первые 64-разрядные микропроцессоры. Разрядность шины адресов определяет максимальный адрес адресуемой ячейки памяти. Рабочие частоты шин современных микропроцессоров лежат в пределах от 66 до 800 МГц.

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

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

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

АЛУ построено на множестве логических схем. Благодаря АЛУ процессор позволяет в пределах своей разрядности складывать, вычитать, умножать и делить целые числа. Он позволяет также выполнять различные операции (например, сдвига или перемещения) для работы с числами повышенной разрядности и др.

Современные процессоры поддерживают и выполнение операций с числами с плавающей точкой. Все необходимые операции по переводу десятичных чисел (целых и с плавающей точкой) в двоичные числа и наоборот современные процессоры выполняют автоматически. Так что особой необходимости в умении выполнять такие преобразования «вручную» попросту нет.

АЛУ используется и для выполнения многих других операций, например вычисления адресов ячеек памяти, выполнения регистровых операций, обработки массивов данных и так далее.

Блок команд. В процессор «зашито» множество команд, которые выполняются программно с помощью АЛУ. Их немногим больше 200. Это команды предшествующих поколений микропроцессоров 8086, 8088, 286, 386 и 486. Однако в новые процессоры включен целый ряд новых команд. Хранение всех команд микропроцессора и выполнение части из них и возложено на блок команд.

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

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

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

Регистры микропроцессора. Для выполнения большинства операций нужно где-то временно хранить входные данные, промежуточные и итоговые результаты вычислений. Для этого процессор имеет свои быстродействующие устройства памяти, называемые реги страми (registers), которые похожи на ячейки оперативной памяти. Они разделяются на регистры общего назначения (general-purpose registers) и специальные регистры (special-purpose registers). Мы познакомимся с некоторыми специальными регистрами позже, а сейчас сосредоточим наше внимание на роли регистров общего назначения.

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

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

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

Было бы полезно рассмотреть регистры общего назначения, находящиеся в процессоре в рамках всей памяти компьютера. Регистры используются для того, чтобы хранить под рукой данные, которые в настоящий момент подвергаются обработке. Назначение оперативной памяти – хранение данных, которые могут потребоваться в ближайшем будущем. Устройства хранения данных – это память для хранения данных которые, скорее всего, не потребуются в ближайшем будущем. Многие машины снабжены дополнительной сверхбыстрой памятью, называемой кэш – памятью, время отклика которой примерно равно времени отклика регистров. Это память, хранящая наиболее часто используемые в ближайшее время команды микропроцессора. Кэш – память частично устраняет несоответствие между высокой скоростью работы микропроцессора и гораздо меньшей скоростью доступа к оперативной памяти ПК. Если процессор повторно должен выполнить какую-то цепочку команд, то он берет их уже из быстрого кэша, а не из медленной памяти. Это обеспечивает повышение скорости работы микропроцессора.

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

По характеру взаимодействия с ОЗУ кэш-память делится на два типа:

• с обратной записью;

• со сквозной записью.

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

В компьютере кэш-память имеет ряд уровней (Levels). Как уже отмечалось, кэш-память первого уровня LI расположена на том же кристалле, что и сам процессор, а потому работает на частоте процессора (иногда на половинной частоте). Это очень быстрая память. Но она занимает много места на кристалле процессора, поэтому ее объем ограничен — обычно 16, 32 или 64 Кбайта. Лишь процессоры AMD Athlon имеют кэш-память уровня L1 на 128 кбайт.

Кэш-память второго уровня L2 может быть расположена либо в микропроцессоре, либо на системной плате. Ее объем лежит в пределах от 128 кбайт у дешевых процессоров (например, Celeron) до нескольких мегабайт у процессоров для серверов, обслуживающих локальные сети (Intel Itanium). У современных процессоров эта память располагается чаще всего в корпусе процессора и подключается к нему через отдельную высокоскоростную шину — архитектура компьютеров с двойной шиной.

Кэш-память третьего уровня L3 обычно располагается на системной плате ПК. Она выполняется на высокоскоростных микросхемах статической памяти. К этой памяти, а иногда и кэш-памяти четвертого уровня L4 относят и кэш-память, располагаемую за пределами системной платы, например на платах дисковых накопителей. Назначение этой памяти заключается в уменьшении времени доступа к командам и данным, хранящимся на дисках. Иногда для этого используется часть ОЗУ ПК.

Блок управления памятью. Во время работы процессор постоянно взаимодействует с памятью. Он получает из памяти коды команд и данные для вычислений и направляет в заданные ячейки памяти результаты вычислений. Для обеспечения этого процессор содержит блок управления памятью. Блок управления памятью облегчает работу АЛУ и позволяет использовать АЛУ для обработки основных данных.

Именно в этом блоке формируются адреса ячеек памяти, с которыми работает микропроцессор. Для работы с памятью большого размера используется страничная организация памяти — при ней адрес задается номером, страницы — сегментом и смещением внутри выбранного сегмента. Начиная с процессоpa Pentium III стала возможной линейная адресация к ячейкам памяти. Она требует меньшего числа команд на задание адреса и выполняется быстрее.

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

 

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

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

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

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

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

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

Шаг 5. Стоп.

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

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

 

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

Для того чтобы можно было применять принцип хранимой программы, центральный процессор должен уметь распознавать инструкции, представленные в двоичном коде. Этот набор указаний вместе с системой кодирования называется машинным языком (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).         

 Деление двух значений, хранящихся в памяти

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

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

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

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

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

Шаг 6. Стоп.

 

Рисунок 1

 

 

Далее приведена таблица машинных команд

Таблица 1

Код оператора Операнд Описание
1 RXY Загрузить в регистр R битовую комбинацию из ячейки памяти по адресу XY.
2 RXY Загрузить в регистр R битовую комбинацию XY.
3 RXY Записать битовую комбинацию из регистра R в ячейку памяти по адресу XY.
4 0RS Поместить битовую комбинацию из регистра R в регистр S.
5 RST Сложить битовые комбинации в регистрах S и T как числа, представленные в двоичном дополнительном коде, и поместить результат в регистр R.
6 RST Сложить битовые комбинации в регистрах S и T как значения с плавающей точкой и поместить результат (число с плавающей точкой) в регистр R.
7 RST Применить логическую операцию OR к битовым комбинациям в регистрах S и T поместить результат в регистр R.
8 RST Применить логическую операцию AND к битовым комбинациям в регистрах S и T и поместить результат в регистр R.
9 RST Применить логическую операцию XOR к битовым комбинациям в регистрах S и T и поместить результат в регистр R.
A R0X Циклически сдвинуть битовую комбинацию в регистре R на один бит вправо X раз. При каждом сдвиге поместить крайний левый младший бит на место крайнего правого старшего бита.
B RXY Перейти к команде, записанной в ячейку памяти по адресу XY, если битовая комбинация в регистре R равна битовой комбинации в регистре 0. Иначе продолжить последовательное выполнение команд.
C 000 Остановка программы.

 

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

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

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

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

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

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

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

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

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

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

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

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

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

Таблица 2

 

№ шага

Содержание операции Команда

Шаг 1

Взять значение из ячейки памяти и поместить его в регистр 156C

Шаг 2

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

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

5056
Шаг 4

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

306E
Шаг 5

Стоп

C000
       

 

Размещение программы в памяти показано в таблице 3.

Таблица 3

 

Адрес ячейки Содержимое ячейки Шаг алгоритма
00 15

1 шаг

01
02 16

2 шаг

03 6D
04 50

3 шаг

05 56
06 30

4 шаг

07 6E
08 С0

5 шаг

09 00
Первое слагаемое  
6D Второе слагаемое  
6E Результат сложения  

 

II. Варианты индивидуальных заданий

ВАРИАНТ 1

1. Напишите программу на машинном языке, которая выполняет циклический сдвиг на один бит вправо для шестнадцатеричного числа 3F.

2. Напишите программу на машинном языке, которая перемещает значение, сохраняемое в ячейке памяти с адресом 8D, в ячейку с адресом B3.

3. Напишите программу на машинном языке, которая если значение, записанное в ячейке памяти с адресом 45 равно 00, запишет значение СС в ячейку памяти с адресом 88, в противном случае запишет значение DD в ячейку памяти с адресом 88.

ВАРИАНТ 2

1. Напишите программу на машинном языке, которая выполняет циклический сдвиг на один бит вправо для шестнадцатеричного числа 0D.

2. Напишите программу на машинном языке, которая поменяет местами значения, записанные в ячейках памяти с адресами 8D и B3.

3. Напишите программу на машинном языке, которая если значение, записанное в ячейке памяти с адресом 55 равно 11, запишет значение BB в ячейку памяти с адресом 99, в противном случае запишет значение AA в ячейку памяти с адресом 99.

ВАРИАНТ 3

1. Напишите программу на машинном языке, которая выполняет циклический сдвиг на один бит вправо для шестнадцатеричного числа FF.

2. Напишите программу на машинном языке, которая перемещает значение, сохраняемое в ячейке памяти с адресом 9D, в ячейку с адресом D3.

3. Напишите программу на машинном языке, которая если значение, записанное в ячейке памяти с адресом 66 равно 10, запишет значение EE в ячейку памяти с адресом 77, в противном случае запишет значение BB в ячейку памяти с адресом 77.

ВАРИАНТ 4

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

2. Напишите программу на машинном языке, которая поменяет местами значения, записанные в ячейках памяти с адресами 9D и A3.

3. Напишите программу на машинном языке, которая если значение, записанное в ячейке памяти с адресом AA равно 01, запишет значение 77 в ячейку памяти с адресом C8, в противном случае запишет значение 33 в ячейку памяти с адресом C8.

ВАРИАНТ 5

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

2. Напишите программу на машинном языке, которая перемещает значение, сохраняемое в ячейке памяти с адресом AD, в ячейку с адресом C3.

3. Напишите программу на машинном языке, которая если значение, записанное в ячейке памяти с адресом A7 равно AA, запишет значение 66 в ячейку памяти с адресом FF, в противном случае запишет значение 22 в ячейку памяти с адресом FF.

ВАРИАНТ 6

1. Напишите программу на машинном языке, которая определяет двоичное дополнение для старшего бита восьмибитовой ячейки памяти без изменения состояния остальных её битов.

2. Напишите программу на машинном языке, которая поменяет местами значения, записанные в ячейках памяти с адресами 7D и F3.

3. Напишите программу на машинном языке, которая если значение, записанное в ячейке памяти с адресом 77 равно 55, запишет значение 11 в ячейку памяти с адресом 88, в противном случае запишет значение 33 в ячейку памяти с адресом 88.

ВАРИАНТ 7

1. Напишите программу на машинном языке, которая с использованием операции циклического сдвига шестнадцатеричное число B3 преобразовала в число D9.

2. Напишите программу на машинном языке, которая перемещает значение, сохраняемое в ячейке памяти с адресом 8C, в ячейку с адресом F3.

3. Напишите программу на машинном языке, которая если значение, записанное в ячейке памяти с адресом 95 равно DD, запишет значение AA в ячейку памяти с адресом 85, в противном случае запишет значение 11 в ячейку памяти с адресом 85.

ВАРИАНТ 8

1. Напишите программу на машинном языке, которая с использованием операции циклического сдвига шестнадцатеричное число B5 преобразовала в число DA.

2. Напишите программу на машинном языке, которая поменяет местами значения, записанные в ячейках памяти с адресами 8A и 3A.

3. Напишите программу на машинном языке, которая если значение, записанное в ячейке памяти с адресом A5 равно 77, запишет значение 55 в ячейку памяти с адресом B5, в противном случае запишет значение 44 в ячейку памяти с адресом B5.

ВАРИАНТ 9

1. Напишите программу на машинном языке, которая с использованием операции циклического сдвига шестнадцатеричное число B7 преобразовала в число ED.

2. Напишите программу на машинном языке, которая перемещает значение, сохраняемое в ячейке памяти с адресом  7D, в ячейку с адресом E3.

3. Напишите программу на машинном языке, которая если значение, записанное в ячейке памяти с адресом С5 равно FF, запишет значение EE в ячейку памяти с адресом D9, в противном случае запишет значение 33 в ячейку памяти с адресом D9.

ВАРИАНТ 10

1. Напишите программу на машинном языке, которая с использованием операции циклического сдвига шестнадцатеричное число A7 преобразовала в число F4.

2. Напишите программу на машинном языке, которая поменяет местами значения, записанные в ячейках памяти с адресами DD и BB.

3. Напишите программу на машинном языке, которая если значение, записанное в ячейке памяти с адресом F5 равно EE, запишет значение 88 в ячейку памяти с адресом A7, в противном случае запишет значение BB в ячейку памяти с адресом A7.

ВАРИАНТ 11

1. Напишите программу на машинном языке, которая выполняет циклический сдвиг на один бит вправо для шестнадцатеричного числа 4F.

2. Напишите программу на машинном языке, которая перемещает значение, сохраняемое в ячейке памяти с адресом 5D, в ячейку с адресом F3.

3. Напишите программу на машинном языке, которая если значение, записанное в ячейке памяти с адресом 85 равно 01, запишет значение AA в ячейку памяти с адресом 66, в противном случае запишет значение EE в ячейку памяти с адресом 66.

ВАРИАНТ 12

1. Напишите программу на машинном языке, которая выполняет циклический сдвиг на один бит вправо для шестнадцатеричного числа DD.

2. Напишите программу на машинном языке, которая поменяет местами значения, записанные в ячейках памяти с адресами 6D и E3.

3. Напишите программу на машинном языке, которая если значение, записанное в ячейке памяти с адресом AA равно 22, запишет значение 33 в ячейку памяти с адресом BB, в противном случае запишет значение 44 в ячейку памяти с адресом BB

ВАРИАНТ 13

1. Напишите программу на машинном языке, которая выполняет циклический сдвиг на один бит вправо для шестнадцатеричного числа 7A.

2. Напишите программу на машинном языке, которая перемещает значение, сохраняемое в ячейке памяти с адресом 4F, в ячейку с адресом F4.

3. Напишите программу на машинном языке, которая если значение, записанное в ячейке памяти с адресом 99 равно FF, запишет значение 11 в ячейку памяти с адресом FB, в противном случае запишет значение 55 в ячейку памяти с адресом FB.

 

ВАРИАНТ 14

1. Напишите программу на машинном языке, которая выполняет циклический сдвиг на один бит вправо для шестнадцатеричного числа 2F.

2. Напишите программу на машинном языке, которая перемещает значение, сохраняемое в ячейке памяти с адресом 9D, в ячейку с адресом B4.

3. Напишите программу на машинном языке, которая если значение, записанное в ячейке памяти с адресом 44 равно 00, запишет значение ВВ в ячейку памяти с адресом 77, в противном случае запишет значение АА в ячейку памяти с адресом 77.

ВАРИАНТ 15

1. Напишите программу на машинном языке, которая выполняет циклический сдвиг на один бит вправо для шестнадцатеричного числа 5D.

2. Напишите программу на машинном языке, которая поменяет местами значения, записанные в ячейках памяти с адресами D8 и 3B.

3. Напишите программу на машинном языке, которая если значение, записанное в ячейке памяти с адресом 33 равно 11, запишет значение СС в ячейку памяти с адресом 88, в противном случае запишет значение ВВ в ячейку памяти с адресом 88.

ВАРИАНТ 16

1. Напишите программу на машинном языке, которая выполняет циклический сдвиг на один бит вправо для шестнадцатеричного числа СD.

2. Напишите программу на машинном языке, которая перемещает значение, сохраняемое в ячейке памяти с адресом D9, в ячейку с адресом 3D.

3. Напишите программу на машинном языке, которая если значение, записанное в ячейке памяти с адресом 44 равно 10, запишет значение E0 в ячейку памяти с адресом 67, в противном случае запишет значение BB в ячейку памяти с адресом 67.

ВАРИАНТ 17

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

2. Напишите программу на машинном языке, которая поменяет местами значения, записанные в ячейках памяти с адресами D9 и 3A.

3. Напишите программу на машинном языке, которая если значение, записанное в ячейке памяти с адресом AB равно 01, запишет значение 22 в ячейку памяти с адресом C8, в противном случае запишет значение 99 в ячейку памяти с адресом C8.

ВАРИАНТ 18

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

2. Напишите программу на машинном языке, которая перемещает значение, сохраняемое в ячейке памяти с адресом DА, в ячейку с адресом 3С.

3. Напишите программу на машинном языке, которая если значение, записанное в ячейке памяти с адресом 7А равно BB, запишет значение 44 в ячейку памяти с адресом FF, в противном случае запишет значение 22 в ячейку памяти с адресом FF.

ВАРИАНТ 19

1. Напишите программу на машинном языке, которая определяет двоичное дополнение для шестого бита восьмибитовой ячейки памяти без изменения состояния остальных её битов.

2. Напишите программу на машинном языке, которая поменяет местами значения, записанные в ячейках памяти с адресами D3 и 3F.

3. Напишите программу на машинном языке, которая если значение, записанное в ячейке памяти с адресом D1 равно 23, запишет значение 11 в ячейку памяти с адресом 88, в противном случае запишет значение 33 в ячейку памяти с адресом 88.

ВАРИАНТ 20

1. Напишите программу на машинном языке, которая с использованием операции циклического сдвига шестнадцатеричное число 3B преобразовала в число 9D.

2. Напишите программу на машинном языке, которая перемещает значение, сохраняемое в ячейке памяти с адресом C8, в ячейку с адресом 3F.

3. Напишите программу на машинном языке, которая если значение, записанное в ячейке памяти с адресом 59 равно D1, запишет значение AA в ячейку памяти с адресом 84, в противном случае запишет значение 11 в ячейку памяти с адресом 84.

 

Ш. Порядок выполнения работы

1. Изучить основы теории.

2. Разобрать поэтапно и выполнить каждое действие в задании.

 

IV.Отчет по работе

Отчет о выполненной работе оформляется индивидуально каждым студентом.

В первой части отчета должны быть приведены название и цель работы.

Вторая часть отчета должна содержать описание решения индивидуального задания:

- алгоритм решения задачи (структурная схема или как рис.1));

- в виде таблицы показать размещение программы в памяти (как в табл.3);

- программа на машинном языке.

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

 

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

 

1. Назначение микропроцессора.

2. Структура микропроцессора

3. Назначение основных блоков процессора.

4. Понятие «машинный язык»

5. Основные команды машинного языка

6. Порядок выполнения команд.

 


Дата добавления: 2020-12-22; просмотров: 340; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!