Вычислительные машины, системы и сети
Регистры распределены следующим образом: R2-счетчик итераций, R3-множимое 1 элемент массива, R4-множитель 2 элемент, R5-старшая часть произведения рн, R6 — младшая часть произведения PL. Операция начинается с инициализации цикла — установка нулей в регистрах старшей и младшей части произведений, установка начального значения счётчика. Затем происходит загрузка множителя 1-го в аккумулятор… Читать ещё >
Вычислительные машины, системы и сети (реферат, курсовая, диплом, контрольная)
МИНОБРНАУКИ РОССИИ Филиал федерального государственного бюджетного образовательного учреждения высшего профессионального образования
" Самарский государственный технический университет" в г. Сызрань Кафедра «Информатика и системы управления»
Расчетно-пояснительная записка к курсовой работе
" Вычислительные машины, системы и сети"
Исполнитель: студент гр. ЭАБЗ-301
Головин К.О.
Руководитель КР: к. п. н., доцент Тараканов А.В.
- 1. Введение
- 2. Описание микропроцессора
- 3. Описание операций
- 4 Код программы для иллюстрированного процессора
- 5. Блок — схема программы
- 6. Карты информационных потоков
- 7. Заключение
- 8. Библиографический список
1. Введение
В настоящее время выпускается много моделей микропроцессоров с очень широким спектром параметров. В данном курсовом проекте описывается гипотетический микропроцессор с архитектурой (т.е. структурой и языком), обладающей типичными чертами современных микропроцессоров. Хотя наш гипотетический микропроцессор и не выпускается промышленностью, он близок к некоторым реально существующим моделям, например к процессорам серии 8000 фирмы «Интел» .
Микрокомпьютер — это система с шинной организацией, состоящая из модулей, или блоков, реализованных в виде больших и сверхбольших интегральных схем. Эти модули обрабатывают информацию, управляют потоком и интерпретацией команд, управляют работой шин, хранят информацию и осуществляют взаимодействие между компьютером и его окружением.
Первые четыре функции обычно выполняются одним функциональным блоком — микропроцессором. Функции хранения информации осуществляет запоминающее устройство. В него могут входить как постоянная, так и оперативная память. Наконец, внешние коммуникации осуществляют блоки, называемые портами ввода-вывода. Каждый такой порт является интерфейсом между микропроцессором и: каким-либо внешним устройством, например терминалом (дисплеем и клавиатурой), внешней памятью для хранения больших объемов информации, контроллером технологических процессов или измерительным прибором.
Основная задача микропроцессора — исполнение программного кода (команд). И команды, и данные, которые они обрабатывают, хранятся в памяти в одном виде — а именно в виде двоичных чисел. Использование двоичной системы счисления позволяет существенно упростить устройство микропроцессора и других систем ЭВМ. Программирование для технологических микропроцессоров, для которых не существует трансляторов с языков высокого уровня, производится с помощью непосредственного задания операндов и номеров команд с использованием, однако, не двоичной, а боле удобной в употреблении шестнадцатеричной системы счисления.
Структура микрокомпьютера, состоящего из подобных блоков, приведена на рисунке 1.
Рисунок 1 — Структура микрокомпьютера с шинной организацией
Взаимодействие блоков осуществляется при помощи шин трех типов: адресных шин, шин данных и управляющих шин.
Для курсовой работы задан гипотетический (иллюстрированный) микропроцессор с набором команд и массив из пяти элементов — целых положительных чисел. С элементами этого массива необходимо выполнить следующий перечень операций подлежащих программированию:
1. Операция № 6. — переход к подпрограмме с передачей параметров через стек.
2. Операция № 4 — цикл (сложение всех элементов массива).
3. Операция № 7 — умножение двух элементов массива.
4. Операция № 5 — переход к подпрограмме с передачей параметров через регистры.
5. Операция № 3 — нахождение наибольшего из элементов массива.
6. Операция № 2 — сложение элементов массива с константой.
7. Операция № 1 — сложение каких-либо двух элементов массива.
2. Описание микропроцессора
На рисунке 2 изображена общая структура гипотетического иллюстративного микропроцессора.
Рисунок 2 — Структура гипотетического микропроцессора
Входящие в его состав компоненты говорят о том, что он является процессором с программным управлением. Некоторые компоненты, а именно программный счетчик (счетчик команд), стек и регистр команд, служат для обработки команд.
Такие компоненты, как АЛУ, триггер переноса, общие регистры (или рабочие) и регистр адреса данных, служат для обработки данных. Все остальные компоненты, а именно дешифратор команд и блок управления и синхронизации (БУС), управляют работой других компонентов. Взаимодействие компонентов осуществляется по внутренним каналам передачи данных. Связь микропроцессора с другими блоками (ЗУ и устройствами ввода/вывода) происходит по адресной шине, шине данных и управляющей шине.
Микропроцессор работает со словами, состоящими, из 8 бит. Такие слова, называемые байтами, удобны при выполнении арифметических и логических операций. Если в расчетах встречаются числа «большей длины», то применяются специальные программы для вычислений с «двойной точностью», «тройной точностью» и т. д.
С другой стороны, адрес из 8 битов позволяет прямо адресовать только 28 = 256 ячеек памяти. Для реальных задач этого, конечно, мало. Поэтому для задания адреса памяти обычно используется 16 разрядов (два байта), и это позволяет прямо адресовать 216=65 536 ячеек.
Информация к микропроцессору и от него передается по шинам. Шины данных в соответствии с длиной слова состоят из 8 линий, тогда как адресная шина состоит из 16 линий. Как показано на рисунке 2, адресная шина однонаправленная, а шина данных двунаправленная. Управляющая шина состоит из 5 линий, ведущих к блоку управления и синхронизации и 8 выходящих из него линий. По этим линиям передаются управляющие и тактирующие сигналы между компонентами микропроцессора и между микропроцессором и другими блоками микрокомпьютера.
Счетчик команд состоит из 16 бит и содержит адрес очередного байта команды, считываемого из памяти. Он автоматически увеличивается на единицу после чтения каждого байта. Существует связь между счетчиком команд и вершиной стека из 64 регистров. Одна из функций стека сохранение адреса возврата из подпрограммы. В стеке могут также сохраняться данные из верхних трех общих регистров и триггера переноса.
В то время как слово данных всегда состоит из одного байта, команда может состоять из одного, двух или трех байтов. Первый байт любой команды поступает из памяти по шине данных на регистр команд. Этот первый байт подается на вход дешифратора команд, который определяет ее смысл. В частности, дешифратор определяет, является ли команда однобайтовой, или она состоит из большего числа байтов. В последнем случае дополнительные байты передаются по шинам данных из памяти и принимаются или на регистр адреса данных, или на один из общих регистров.
Регистр адреса данных содержит адрес операнда для команд, обращающихся к памяти, адрес порта для команд ввода/вывода или адрес следующей команды для команд перехода.
Пятнадцать 8-битовых общих регистров содержат операнды для всех команд, работающих с данными. Для указания этих регистров используются 4-битовые коды от 0000 до 1110. Регистр 0000 называется аккумулятором (АСС) и участвует во всех арифметических и логических операциях. В частности, он содержит один из операндов перед выполнением операции и получает результат после ее завершения. Обычно обращения к общим регистрам осуществляются при помощи К-селектора или г-селектора. R-селектор позволяет обращаться к любому регистру, тогда как через r-селектор доступны только регистры 0000, 0001 и 0010.
Очень полезная возможность, присутствующая во многих машинах, это косвенная адресация. Задание несуществующего регистра общего назначения 1111 используется как указание на то, что нужно обратиться к байту памяти по 16-разрядному адресу, который получается комбинированием содержимого двух фиксированных общих регистров. А именно, старшие 8 разрядов адреса из регистра 0001 (Н), а младшие 8 разрядов адреса изрегистра0010 (L). Чтобы пояснить подобную косвенную адресацию, предположим, что регистр 0001, т. е. регистр Н, содержит 1 011 101, а регистр 0010, т. е. регистр L, содержит 101 011. Тогда любая команда, ссылающаяся на регистр 1111, вызовет выборку операнда из ячейки памяти с адресом 101 110 100 101 011.
программирование микропроцессор программный код Все арифметические и логические операции выполняются в арифметико-логическом устройстве (АЛУ). Входами АЛУ служат две 8-битовые шины. Одна из них идет от аккумулятора (регистр 0000), а другая от R. — селектора, который выбирает либо один из регистров общего назначения от 0000 до 1110, либо ячейку памяти, если задана косвенная адресация. Еще одна входная линия поступает в АЛУ от триггера переноса С, который участвует в некоторых арифметических и логических операциях.
Результаты из АЛУ передаются в аккумулятор по выходной 8-битовой шине. Существуют еще две линии, идущие от АЛУ к блоку управления и синхронизации; они передают информацию о наличии или отсутствии двух особых условий: аккумулятор содержит нули (линия Z) и старший разряд аккумулятора равен 1 (линия N). Вторая линия очень удобна при работе с числами в дополнительном коде, когда старший разряд знаковый, причем 1 соответствует отрицательным числам. Триггер переноса и обе линии состояния АЛУ Z и N называются флажками и используются в командах условного перехода.
Последний компонент микропроцессора это блок управления и синхронизации (БУС). Он получает сигналы от дешифратора команд, который анализирует команду. Как уже упоминалось, в БУС из АЛУ и от триггера переноса поступают сигналы, по которым определяются условия для передач управления. Все остальные компоненты микропроцессора получают от БУС управляющие и синхронизирующие сигналы, необходимые для выполнения команды. С помощью 13-ти внешних линий реализуется интерфейс устройства управления с другими модулями микрокомпьютера.
3. Описание операций
1. Операция загрузки программы.
Специальная программа-загрузчик выполняет операции по вводу требуемой программы с некоторого устройства ввода и размещению ее в памяти. Главная процедура четырежды обращается к подпрограмме ввода для ввода первых четырех адресных слов, передавая эти слова каждый-раз в новые общие регистры. Затем начинается цикл передачи вводимых слов в память. Каждое слово вводится подпрограммой ввода и затем передается в соответствующую ячейку памяти, адрес которой задается текущим значением адреса (ТА). ТА увеличивается на 1 при каждом прохождении цикла, т. е. при поступлении каждого слова. В конце цикла происходит проверка, не превышает ли ТА значение конечного адреса (КА). Если это так, процедура загрузки заканчивается; в противном случае — цикл повторяется. Программа-загрузчик начинается в ячейке 0000. Программа обращается к двум портам ввода: к порту 00 — за информацией о состоянии и к порту 01 — за данными. Первая группа команд соответствует главной процедуре. Подпрограмма ввода начинается с ячейки 001D. Общие регистры 1, 2, 3 и 4 хранят соответственно ТАН TAL, KAH и KAL. Они загружаются адресной информацией, поступающей с устройства ввода. Для этого каждый раз выполняется команда перехода на подпрограмму и команда пересылки.
Цикл начинается командой перехода на подпрограмму ввода. После возврата из нее очередное введенное слово находится в аккумуляторе. Это слово передается в ячейку памяти с помощью имеющегося в иллюстративном микропроцессоре механизма косвенной адресации. А именно, команда MOV О to F передает содержимое аккумулятора в ячейку памяти, адрес которой задан содержимым регистров 1 и 2 (т.е. Н и L). Поскольку эти регистры содержат значение ТА, слово попадает в нужное место памяти. Следующая команда, IHL, увеличивает на 1 значение ТА. Сравнение адресов ТА и КА осуществляется при помощи процедуры вычитания с двойной точностью и последующего условного перехода. Для вычитания с двойной точностью сначала вычитаются младшие части ТА и КА, а затем старшие части с участием заема, оставшегося от младших частей. Окончательный заем остается в триггере С. Следующая команда — «переход при нулевом переносе» на начало цикла. При С=0 снова входим в цикл, при С= 1 программа останавливается.
2. Операции № 6 — операция перехода к подпрограмме с передачей параметров через стек.
Первые две команды заполняют регистры H и L старшей и младшей частями адреса первого числа соответственно. Следующая команда PUSH отправляет значения этих регистров в стек. После чего стек опускается дважды. Второе число отправляется в стек аналогичным образом. После того, как данные отправились в стек, происходит переход на подпрограмму, которая осуществляет разгрузку стека с использованием команды POP. Извлечённые из стека данные передаются в ячейки памяти командой STR. Команда RET — выход из подпрограммы.
3. Операция № 4 — сложение всех элементов массива.
Первые две команды заносят в Н и L адрес первого числа. Затем в регистр 3 помещается начальное значение, равное 5. Регистр 3 будет выполнять функции счетчика количества суммируемых чисел. Сумма накапливается в общем регистре 4, в него заносится нулевое начальное значение. Наконец, в общий регистр 5 загружается константа 1, которая будет вычитаться из счетчика в процессе суммирования чисел. Рабочая часть цикла начинается с загрузки текущей частной суммы в аккумулятор из регистра 4. Далее следует команда сложения ADD F, содержащая специальный указатель F, который на самом деле соответствует ячейке главной памяти с адресом в паре регистров Н и L. Содержимое этой ячейки прибавляется к частной сумме в аккумуляторе. После этого результат передается в общий регистр 4. Далее команда IHL модифицирует регистры Н и L, так, чтобы они содержали адрес данных, которые должны обрабатываться при следующей итерации. Затем содержимое счетчика цикла передается в аккумулятор, уменьшается на 1 и снова возвращается в регистр 3. Когда вычисления завершаются, в аккумуляторе будет 0. Это условие тестируется командой «условный переход при ненулевом аккумуляторе». Если в аккумуляторе 0, тогда переход не происходит, и программа выходит на команду останова, в противном случае выполняется следующая итерация.
4. Операция № 7 — операция умножения двух элементов массива.
Регистры распределены следующим образом: R2-счетчик итераций, R3-множимое 1 элемент массива, R4-множитель 2 элемент, R5-старшая часть произведения рн, R6 — младшая часть произведения PL. Операция начинается с инициализации цикла — установка нулей в регистрах старшей и младшей части произведений, установка начального значения счётчика. Затем происходит загрузка множителя 1-го в аккумулятор из регистра 4, сдвиг множителя циклически вправо и возвращение результата в регистр 4. Таким образом, очередной разряд множителя, определяющий частное произведение, оказывается на триггере переноса С. Затем для подготовки сложения и сдвигов старшая часть произведения рн переносится в аккумулятор. Тестирование С = 1 осуществляется командой «переход при ненулевом переносе». Она обеспечивает пропуск следующей команды при С=0. Эта следующая команда прибавляет множимое 2-ой к аккумулятору (который содержит рн) и сохраняет перенос из старшего разряда в С. Затем Рн и С циклически сдвигаются вправо командой RTR. После сдвига новое значение рн возвращается в регистр 5. Затем pl и С сдвигаются вправо, для чего pl из регистра 6 загружается в аккумулятор, циклически сдвигается вместе с С и результат возвращается в регистр 6. После этого счетчик в регистре 2 уменьшается на 1 командой DHL, результат передается в аккумулятор и тестируется командой «переход при ненулевом аккумуляторе». Если аккумулятор содержит 0, то выполняется выход из подпрограммы; в противном случае управление передается на начало цикла.
5. Операция № 5 — операция перехода к подпрограмме с передачей параметров через регистры.
Команда LDR 0 загружает первое число в аккумулятор, затем команда MOV передаёт данные в регистр 5. Далее происходит загрузка второго числа в аккумулятор и передача данных в регистр 6. Аналогично загружается третье число, данные передаются в регистр 7. Затем происходит переход к подпрограмме, которая передаёт данные из регистров 5, 6, 7 в ячейки памяти с использованием команд MOV и STR. Команда RET — выход из подпрограммы.
6. Операция № 3 — нахождение наибольшего из элементов массива.
Команда LDR 0 загружает 1 элемент в аккумулятор, команда LDR 1 помещает 2 элемент в общий регистр 1. Затем осуществляется их сравнение путем вычитания 2 из 1. Если 2 элемент строго больше первого, тогда возникает заем в старший разряд, который сохраняется в виде единицы в триггере переноса С. Однако еще до проверки переноса С значение 1-ого, как «пробное» наибольшее из 1-го и 2-го загружается в регистр 2. Затем выполняется команда условного перехода по значению С. Если С не равно нулю, то претендент на роль наибольшего, т. е.1 элемент, заменяется на 2 элемент. Если С=0, то происходит переход на загрузку третьего элемента массива, и в этом случае в качестве большего значения остается третий — происходит вычитание из наибольшего чисел 1 и 2, проверяется наличие заёма. Если заем есть, то 3-ий больше и происходит передача 3-его в регистр 2, заменяющая наибольшее из 1 и 2. При любом варианте наибольшее значение из чисел находится в регистре 2, и оно будет аналогичным образом сравниваться со следующим 4 элементом, а затем пятым элементом массива. После сравнения всех 5 чисел, команда STR 2 осуществляет передачу содержимого регистра 2, т. е. наибольшего значения из чисел в ячейку памяти.
7. Операция № 2 — сложение элементов массива с константой.
Команда LDR 1 загружает в регистр 1 константу 2D, команда LDR 0 осуществляет загрузку 1 элемента заданного массива в аккумулятор. Затем с использованием команды ADD 1 происходит сложение значения, которое хранится в аккумуляторе, со значением, которое храниться в регистре 1. Результат суммы передается в ячейку памяти с использованием команды STR. Затем в аккумулятор аналогично загружаются оставшиеся элементы массива 2,3,4,5, складываются с константой. Однобайтовая константа загружается в регистр R3, в регистре R5 находится счётчик для цикла перебора всех элементов массива.
8. Операция № 1 — сложение каких-либо двух элементов массива.
Команда LDR 0 загружает в аккумулятор 1-ое число, команда LDR 1 загружает в регистр 1 второе число. Затем происходит сложение загруженных чисел с использованием команды ADD 1. Результат суммы сохраняется в аккумуляторе. Команда STR 0 передаёт значение аккумулятора в ячейку памяти.
4. Код программы для иллюстрированного процессора
Ячейка памяти | Команда на машинном языке | Команда в символической форме | Комментарий | |
Программа-загрузчик | ||||
7F | JMS | Обращение к подпрограмме ввода за ТАН | ||
1F | 1F | |||
MOV 0 to 1 | ||||
7F | JMS | Обращение за ТАL | ||
1F | 1F | |||
MOV 0 to 2 | ||||
7F | JMS | Обращение за КАН | ||
000A | 1F | 1F | ||
000B | MOV 0 to 3 | |||
000C | 7F | JMS | Обращение за KAL | |
000D | ||||
000E | 1F | 1F | ||
000F | MOV 0 to 4 | |||
7F | JMS | Начинается цикл ввода слов | ||
1F | 1F | |||
OF | MOV 0 to F | Передача слова в М [ТА] | ||
F5 | IHL | ТА + 1 — >ТА. | ||
MOV 0 from 4 | Вычитание с двойной точностью ТА из КА | |||
A2 | SUB 2 | Устанавливается С=1, если ТА > КА | ||
MOV 0 from 3 | ||||
Bl | SBC 1 | |||
7C | JCZ | Проверка заема в С. Если нет заема | ||
001A | ввод нового слова | |||
001В | ||||
001С | 7B | JMP | Переход к операциям | |
001D | ||||
001E | ||||
001F | FD | INP | Начало программы ввода. Ввод слова | |
состояния. | ||||
7A | JAP | Проверка разряда знака в слове состояния. | ||
Если 0, повторить проверку | ||||
1F | 1F | |||
FD | INP | Ввод слова в аккумулятор из устройства | ||
ввода | ||||
F8 | RET | Возврат из подпрограммы | ||
Операция № 6 | ||||
LRI 1 | Установка в регистрах H и L адреса | |||
первого элемента | ||||
LRI 2 | ||||
002A | ||||
002B | PUSH | Передача в стек | ||
002C | LRI 1 | Установка в регистрах H и L адреса | ||
002D | второго элемента | |||
002E | LRI 2 | |||
002F | ||||
PUSH | Передача в стек | |||
7F | JMS | Переход к подпрограмме в ячейку 00F4 | ||
F4 | F4 | |||
Операция № 4 | ||||
LRI 1 | Установка в регистрах H и L адреса | |||
первого элемента | ||||
LRI 2 | ||||
LRI 3 | Установка начального значения | |||
счетчика цикла равным 5 | ||||
003A | LRI 4 | Установка частной суммы равной 0 | ||
003B | ||||
003C | LRI 5 | Загрузка константы 1 для уменьшения счетчика | ||
003D | ||||
003E | MOV 0 from 4 | Прибавление числа | ||
003F | 8F | ADD F | ||
MOV 0 to 4 | ||||
F5 | IHL | Увеличение H и L | ||
MOV 0 from 3 | Загрузка начального значения счётчика в Асс | |||
A5 | SUB 5 | Уменьшение счетчика на 1 | ||
MOV 0 to 3 | ||||
7D | JAN | Проверка конца цикла | ||
3E | 3E | |||
MOV 0 from 4 | Загрузка данных из 4 регистра в Асс | |||
STR 0 | Передача содержимого Асс в ячейку 0107 | |||
004A | ||||
004B | ||||
Операция № 7 | ||||
004C | LRI 5 | Установка нулевых значений в Rн и RL | ||
004D | ||||
004E | LRI 6 | |||
004F | ||||
LRI 1 | ||||
LRI 2 | Установка на счетчике начального | |||
значения 8 | ||||
LDR 4 | Загрузка множителя в регистр 4 | |||
MOV 0 from 4 | Загрузка множителя в Асс | |||
F2 | RTR | Циклический сдвиг вправо, мл. бит Асс попадает в С | ||
MOV 0 to 4 | Запоминание сдвинутого множителя | |||
005А | MOV 0 from 5 | Загрузка ст. части произведения в Асс | ||
005B | 7С | JCZ | Тест бита множителя. Переход при 0 | |
005C | ||||
005D | ||||
005E | LDR 3 | Загрузка множимого в регистр 3 | ||
005F | ||||
ADD 3 | Сложение множимого со ст. частью произведения | |||
F2 | RTR | Сдвиг Рн вправо, мл. бит в С | ||
MOV 0 to 5 | Запоминание сдвинутого Rн | |||
MOV 0 from 6 | Загрузка мл. части произведения в Асс | |||
F2 | RTR | Сдвиг С и мл. части произведения вправо | ||
MOV 0 to 6 | Запоминание сдвинутого RL | |||
F6 | DHL | Уменьшение счетчика на 1 | ||
MOV 0 from 2 | Загрузка счетчика в аккумулятор | |||
7D | JAN | Тестирование Асс. Повторение | ||
006A | цикла, если не нуль | |||
006B | ||||
006C | MOV 1 from 5 | Передача ст. части произведения в регистр 1 | ||
006D | MOV 2 from 6 | Передача мл. части произведения в регистр 2 | ||
006E | SТR 1 | Передача содержимого регистра 1 в ячейку 0108 | ||
006F | ||||
SТR 2 | Передача содержимого регистра 2 в ячейку 0109 | |||
Операция № 5 | ||||
LDR 0 | Загрузка первого аргумента в регистр 5 | |||
0D | MOV 0 to 5 | |||
LDR 0 | Загрузка второго аргумента в регистр 6 | |||
007A | ||||
007B | 0D | MOV 0 to 6 | ||
007C | LDR 0 | Загрузка третьего аргумента в регистр 7 | ||
007D | ||||
007E | ||||
007F | 0D | MOV 0 to 7 | ||
7F | JMS | Переход на подпрограмму в ячейку 00E7 | ||
E7 | E7 | |||
Операция № 3 | ||||
LDR 0 | Передача 1го элемента из памяти в Асс | |||
LDR 1 | Передача 2го из памяти в регистр 1 | |||
A1 | SUB 1 | Вычитание 2 эл. из 1эл. Триггер C устанавливается, если 2 эл. больше, чем 1 | ||
008A | LDR 2 | Передача 1числа в регистр 2, как возможно большего | ||
008B | ||||
008С | ||||
008D | 7C | JCZ | Проверка С на наличие заема. Если нет заема, то 1 > 2, и следующая команда опускается | |
008E | ||||
008F | ||||
LDR 2 | Передача 2 элемента массива в регистр 2, заменяющая 1, если 2 > 1 | |||
LDR 1 | Передача 3 элемента массива из памяти в регистр 1 | |||
MOV 0 from 2 | Передача наибольшего из 1го и 2го в аккумулятор из рег.2 | |||
A1 | SUB 1 | Вычитание 3его из наибольшего среди 1,2 чисел. С устанавливается, если 3 больше | ||
7C | JCZ | Проверка С на наличие заема. Если заем есть, то 3 больше, в противном случае, следующая команда опускается. | ||
009A | 9E | 9E | ||
009B | LDR 2 | Передача 3его в регистр 2, заменяющий наибольшее из 1 и 2 чисел, если 3 больше | ||
009C | ||||
009D | ||||
009E | LDR 1 | Передача 4 элемента массива из памяти в регистр 1 | ||
009F | ||||
00A0 | ||||
00A1 | MOV 0 from 2 | Передача наибольшего из 1,2,3 чисел в аккумулятор из регистра 2 | ||
00A2 | A1 | SUB 1 | Вычитание 4го из наибольшего среди 1,2,3. С устанавливается, если 4ый больше. | |
00A3 | 7С | JCZ | Проверка С на наличие заема. Если заем есть, то 4 | |
00A4 | больше, в противном случае, следующая команда опускается. | |||
00A5 | A9 | A9 | ||
00A6 | LDR 2 | Передача 4ого в регистр 2, заменяющая наибольшее из массива 1,2,3 если 4 больше | ||
00A7 | ||||
00A8 | ||||
00A9 | LDR 1 | Передача 5 элемента массива из памяти в регистр 1 | ||
00AA | ||||
00AB | ||||
00AC | MOV 0 from 2 | Передача наибольшего из элементов массива 1,2,3,4 в аккумулятор из регистра 2 | ||
00AD | A1 | SUB 1 | Вычитание 5 из наибольшего среди 1,2,3,4. С устанавливается, если 5 больше | |
00AE | 7C | JCZ | Проверка С на наличие заема, если заем есть, то 5 больше, | |
00AF | в противном случае, следующая команда опускается. | |||
00B0 | В4 | В4 | ||
00B1 | LDR 2 | Передача 5 в регистр 2, заменяющая наибольшее из 1,2,3,4, если 5 больше. | ||
00B2 | ||||
00В3 | ||||
00В4 | STR 2 | Передача наибольшего элемента в ячейку 010А | ||
00В5 | ||||
00В6 | 0А | 0А | ||
Операция № 2 | ||||
00В7 | LDR 0 | Передача содержимого ячейки памяти | ||
00В8 | 0102 в Асс | |||
00В9 | ||||
00BA | LRI 1 | Загрузка в регистр 1 константы 2D | ||
00BB | 2D | 2D | ||
00BC | ADD 1 | Сложение 1 числа с константой, сумма Асс | ||
00BD | STR 0 | Передача содержимого Асс в ячейку 010B | ||
00BE | ||||
00BF | 0B | 0B | ||
00C0 | LDR 0 | Передача содержимого ячейки памяти | ||
00C1 | 0103 в Асс | |||
00C2 | ||||
00C3 | ADD 1 | Сложение 2 числа с константой, сумма Асс | ||
00C4 | STR 0 | Передача содержимого Асс в ячейку 010C | ||
00C5 | ||||
00C6 | 0C | 0C | ||
00C7 | LDR 0 | Передача содержимого ячейки памяти | ||
00C8 | 0104 в Асс | |||
00C9 | ||||
00CA | ADD 1 | Сложение 3 числа с константой, сумма Асс | ||
00CB | STR 0 | Передача содержимого Асс в ячейку 010D | ||
00CC | ||||
00CD | 0D | 0D | ||
00CE | LDR 0 | Передача содержимого ячейки памяти | ||
00CF | 0105 в Асс | |||
00D0 | ||||
00D1 | ADD 1 | Сложение 4 числа с константой, сумма Асс | ||
00D2 | STR 0 | Передача содержимого Асс в ячейку 010E | ||
00D3 | ||||
00D4 | 0E | 0E | ||
00D5 | LDR 0 | Передача содержимого ячейки памяти | ||
00D6 | 0106 в Асс | |||
00D7 | ||||
00D8 | ADD 1 | Сложение 5 числа с константой, сумма Асс | ||
00D9 | STR 0 | Передача содержимого Асс в ячейку 010F | ||
00DA | ||||
00DB | 0F | 0F | ||
Операция № 1 | ||||
00DC | LDR 0 | Передача содержимого ячейки памяти | ||
00DD | 0102 в Асс | |||
00DE | ||||
00DF | LDR 1 | Передача содержимого ячейки памяти | ||
00E0 | 0103 в регистр 1 | |||
00E1 | ||||
00E2 | ADD 1 | Сложение 0 и 1 регистров, сумма Асс | ||
00E3 | STR 0 | Передача содержимого Асс в ячейку 0110 | ||
00E4 | ||||
00E5 | ||||
Окончание операций | ||||
00E6 | FA | HLT | Остановка программы | |
00E7 | MOV 0 from 5 | Начало подпрограммы для операции № 5. Передача содержимого регистра 5 в Асс | ||
00E8 | STR 0 | Передача содержимого Асс в ячейку 0111 | ||
00E9 | ||||
00EA | ||||
00EB | MOV 1 from 6 | Передача содержимого регистра 6 в регистр 1 | ||
00EC | STR 1 | Передача содержимого регистра 1 в ячейку 0112 | ||
00ED | ||||
00EE | ||||
00EF | MOV 2 from 7 | Передача содержимого регистра 7 в регистр 2 | ||
00F0 | STR 2 | Передача содержимого регистра 2 в ячейку 0113 | ||
00F1 | ||||
00F2 | ||||
00F3 | F8 | RET | Возврат из подпрограммы операции № 5 | |
00F4 | POP | Начало подпрограммы для операции № 6. Извлечение данных из стека | ||
00F5 | STR 1 | Передача содержимого регистра 1 в ячейку 0114 | ||
00F6 | ||||
00F7 | ||||
00F8 | STR 2 | Передача содержимого регистра 2 в ячейку 0115 | ||
00F9 | ||||
00FA | ||||
00FB | POP | Извлечение данных из стека | ||
00FC | STR 1 | Передача содержимого регистра 1 в ячейку 0116 | ||
00FD | ||||
00FE | STR 2 | Передача содержимого регистра 2 в ячейку 0117 | ||
00FF | ||||
F8 | RET | Возврата из подпрограммы операции № 6 | ||
1 элемент массива | ||||
2 элемент массива | ||||
3 элемент массива | ||||
4 элемент массива | ||||
5 элемент массива | ||||
Результат сложения всех чисел | ||||
Результат умножения двух чисел (ст. часть) | ||||
Результат умножения двух чисел (мл. часть) | ||||
010A | Результат нахождения наибольшего числа | |||
010B | Результат сложения 1 числа с константой | |||
010C | Результат сложения 2 числа с константой | |||
010D | Результат сложения 3 числа с константой | |||
010E | Результат сложения 4 числа с константой | |||
010F | Результат сложения 5 числа с константой | |||
Результат сложения 2 чисел | ||||
Данные из регистра | ||||
Данные из регистра | ||||
Данные из регистра | ||||
Данные из стека | ||||
Данные из стека | ||||
Данные из стека | ||||
Данные из стека | ||||
5. Блок — схема программы
6. Карты информационных потоков
Выполнение любой команды состоит из двух этапов. Первый этап — это чтение команды из памяти. Чтение каждого байта занимает один машинный цикл (три такта). После считывания первого байта (код операции), который попадает в регистр команд, блок управления определяет, из какого количества байт состоит команда. Если есть еще один или два байта, то соответственно затрачивается один или два машинных цикла на их считывание. Эти байты попадают в регистр адреса данных. Второй этап — это выполнение команды. Некоторые команды выполняются за последний такт машинного цикла, а другим для выполнения нужен еще один машинный цикл (команды загрузки и сохранения регистра и команды, использующие косвенную адресацию).
Представим карты информационных потоков для операции № 6. Программа для операции № 6 состоит из следующих операций: LRI, PUSH, JMS, POP, STR, RET.
Рисунок 3 — Карта информационных потоков для команды LRI
Команда LRI — двубайтовая команда, ее особенностью является то, что данные являются частью самой команды, при помощи такой команды очень удобно задавать константы. Байт, выбранный в первом цикле, помещается в регистр команд, а байт, выбранный во втором — в регистр адреса данных. После этого, если только R не равен 11112, выполнение команды завершается по третьему синхроимпульсу на втором машинном цикле. Младшие 8 битов регистра адреса данных, содержащие второй байт команды, передаются в общий регистр R. После выборки-дешифрации второй байт с шины данных подается в регистр адреса данных, после чего передается оттуда на R-селектор, где происходит выборка указанного в команде регистра.
Одной из специальных команд программного кода является однобайтовая команда PUSH, которая служит для помещения данных в стек. Стек опускается дважды. В результате во втором регистре стека оказывается значение аккумулятора с переносом, а в первом (вершине стека) содержимое пары регистров Н и L. Карта инфопотоков представлена на рисунке 4.
Рисунок 4 — Карта информационных потоков для команды PUSH
Следующей в заданной операции № 6 является команда JMS, которая содержит три байта и служит командой обращения к подпрограмме. Стек опускается и содержимое счетчика команд помещается в вершину стека. Содержимое последнего регистра стека теряется. Содержимое счетчика команд замещается вторым и третьим байтами команды JMS, причем второй байт замещает старшие 8 разрядов счетчика команд, а третий байт-младшие 8 разрядов, что вызывает передачу управления в заданную ячейку. Карта инфопотоков представлена на рисунке 5.
Рисунок 5 — Карта информационных потоков для команды JMS
Следующей специальной командой программного кода является однобайтовая команда POP, которая служит для извлечения данных из стека. Содержимое вершины стека передается на пару регистров Н и L. Содержимое младшей половины второго регистра стека передается в аккумулятор, а младший бит старшей половины этого же регистра передается на триггер переноса С. Стек поднимается дважды, состояние двух нижних регистров остаётся без изменений. Карта инфопотоков представлена на рисунке 6.
Рисунок 6 — Карта информационных потоков для команды РОР
Команда STR R является трехбайтовой. Она служит для запоминания регистра, причем во втором и третьем байте этой команды содержатся старшая и младшая часть ячейки памяти, в которую необходимо сохранить содержимое нужного нам регистра. Содержимое регистра адреса данных, загруженного в фазе выборки-дешифрации вторым и третьим байтами команды, подается на адресную шину, а содержимое общего регистра r подается на шину данных. Затем устройство управления формирует сигнал «запись», стробирующий запись данных в адресуемую ячейку памяти. Фаза выполнения требует одного внешнего обмена и занимает один машинный цикл. Следовательно, полный командный цикл занимает четыре машинных цикла: три на фазу выборки-дешифрации и один на фазу выполнения. Карта представлена на рисунке 7.
Завершающей командой обращения к подпрограммам является команда возврата из подпрограммы RET, которая содержит один байт. Стек опускается и содержимое счетчика команд помещается в вершину стека. Содержимое последнего регистра стека теряется.
Содержимое счетчика команд замещается вторым и третьим байтами команды JMS, причем второй байт замещает старшие 8 разрядов счетчика команд, а третий байт-младшие 8 разрядов, что вызывает передачу управления в заданную ячейку. Карта инфопотоков представлена на рисунке 8.
Рисунок 7 — Карта информационных потоков для команды STR
Рисунок 8 — Карта информационных потоков для команды RET
7. Заключение
В ходе выполнения курсовой работы были изучены принципы работы гипотетического микропроцессора. Подробно рассматривались система команд иллюстративного микропроцессора, его фазы выборки, декодирования и управления, способы адресации, принципы программирования на машинном уровне, составление блок-схем.
Современные микропроцессоры, использующиеся в персональных компьютерах, их архитектура очень схожа с данным гипотетическим процессором. Различия состоят в основном в том, что у современных процессоров более развиты аппаратные функции (такие, как аппаратное умножение, деление, циклические операции), более удобная система косвенной адресации памяти и т. д.
8. Библиографический список
1. Вирт Н. Алгоритмы и структуры данных. — М.: Мир, 1999.
2. Гивоне Д., Россер Р. Микропроцессоры и микрокомпьютеры. — М.: Мир, 1993.
3. Гудман С., Хидетниеми С.
Введение
в разработку и анализ алгоритмов. — М.: Мир, 1991.
4. Каган Б. М. Электронные вычислительные машины и системы. — М.: Энегроатомиздат, 1997.
5. Методические указания к выполнению курсового проекта для студентов, по дисциплине «Вычислительные, машины системы и сети». 2003 г.
6. Пятибратов А. П., Гудыно Л. П., Кириченко А. А. Вычислительные системы, сети и телекоммуникации. — М.: Финансы и статистика, 2002.