Скачать 3.11 Mb.
|
Таблица 4.4
Команда SUI <В2> производит вычитание содержимого второго байта (команда двухбайтовая) из содержимого аккумулятора и помещает результат в аккумулятор (рис. 4.9,в). Восьмеричный код команды — 326Q (см. приложение 1). Кроме команд, приведенных в качестве примеров, группа арифметических команд содержит команды сложения и вычитания содержимого аккумулятора с содержимым ячеек памяти, а также команды увеличения и уменьшения на единицу содержимого различных регистров. 4.6.3. ГРУППА ЛОГИЧЕСКИХ КОМАНД Команды этой группы предназначены для выполнения логических, или булевых, операций над данными, .содержащимися в регистрах, ячейках памяти, а также над флагами условий. К этим операциям относятся операции: логического сложения (ИЛИ), логического умножения (И), суммирования по модулю 2, сравнения, сдвига, дополнения до 1 и до 2. Как и команды предыдущей группы, все логические команды оказывают влияние на флаги. Команда ANA г выполняет параллельно поразрядное логическое И над содержимым регистра-источника и аккумулятора. Результат операции заносится в аккумулятор (рис. 4.10,а). Например, команда 10 100 100 В выполняет операцию логического умножения поразрядно над содержимым регистра Н и А и заносит результат в аккумулятор. Двоичный код 10 100 100 В соответствует восьмеричному коду 244Q команды ANA H. ![]() Рис. 4.10. Примеры размещения некоторых логических команд в байтах Команда ANI < В2 > является двухбайтовой и также выполняет поразрядную операцию логического И, но над содержимым второго байта команды и аккумулятора. Команда имеет восьмеричный код-3460 (рис. 4.10,6). Результат операции заносится в аккумулятор. Команда ORAr аналогична команде ANA r, но в отличие от нее выполняет операцию поразрядного логического ИЛИ. Результат операции заносится в аккумулятор (рис. 4.10,в). 4.6.4. ГРУППА КОМАНД ПЕРЕХОДОВ Эта группа команд предназначена для организации правильной последовательности выполнения программы. Сюда входят команды безусловного и условного переходов, команды вызова подпрограммы и возвращения к главной программе. Все команды этой группы на флаги влияния не оказывают. Команды безусловного перехода выполняют специальные операции над содержимым счетчика команд. Команды условного перехода обеспечивают необходимое ветвление программы путем анализа состояния одного из четырех флагов: нуля, знака, четности и переноса, коды которых указаны в табл. 4.4. Команда JMP <В2> <ВЗ> — трехбайтовая команда передает управление команде по адресу, содержащемуся в третьем и втором байтах текущей команды. Это осуществляется путем записи содержимого третьего и второго байтов команды в счетчик команд (рис. 4.11,а). Как уже отмечалось в § 4.3, счетчик команд представляет собой 16-разрядный регистр, содержащий адрес, по которому можно обратиться для считывания очередного байта команды. Восьмеричный код этой команды - 303 Q. Команды CALL и RET — команды безусловного перехода. Первая из них передает управление подпрограмме, прекращая выполнение основной программы; вторая передает управление главной программе, возвращаясь к ее выполнению (рис. 4.11,£, в). Первая команда — трехбайтовая. Восемь старших разрядов адреса следующей команды пересылаются в ячейку памяти, адрес которой на единицу меньше содержимого указателя стека. Восемь младших разрядов адреса следующей команды пересылаются в ячейку памяти, адрес которой на две единицы меньше содержимого указателя стека. Содержимое указателя стека уменьшается на две единицы. Управление передается команде, адрес которой размещается в третьем и втором байтах команды CALL ![]() Рис. 4.11. Примеры размещения некоторых команд переходов в байтах Команда RET — однобайтовая. Ее восьмеричный код — 311Q (код предыдущей команды CALL — 315Q). В процессе выполнения этой команды содержимое указателя стека получает приращение на две единицы. Содержимое ячейки памяти по адресу, хранящемуся в указателе стека, пересылается в счетчик команд на место младших восьми разрядов. Содержимое ячейки памяти по адресу, на единицу большему, чем содержимое указателя стека, пересылается в счетчик команд на место старших восьми разрядов. Таким образом, возвращение к главной программе происходит всегда путем обращения к байту команды, непосредственно следующему за байтом, используемым командой CALL 4.6.5. ГРУППА КОМАНД УПРАВЛЕНИЯ И РАБОТЫ СО СТЕКОМ Команды этой группы предназначены для управления работой микропроцессора, устройствами ввода/вывода и стеком. Команды этой группы не оказывают влияния на флаги. Рассмотрим в качестве примера работу некоторых команд из этой группы. Команда XTHL — однобайтовая команда с восьмеричным номером 343Q. Является примером наиболее длинных по времени исполнения команд - занимает 18 машинных тактов. В процессе выполнения команды содержимое регистра L меняется на содержимое ячейки памяти по адресу, содержащемуся в указателе стека, и наоборот. Содержимое регистра Н меняется на содержимое ячейки памяти по адресу, на единицу большему, чем содержимое указателя стека, и наоборот (рис. 4.12,я). На это уходит пять машинных циклов. Команды IN ![]() Рис. 4.12. Примеры размещения некоторых команд управления в байтах На этом закончим рассмотрение примеров размещения в байтах команд описанных выше групп и перейдем к вопросу о том, как составляется программа решения на ПМ-ЭВМ задачи с использованием приведенного в приложении 1 списка команд. 4.7. ПРОГРАММИРОВАНИЕ ПМ-ЭВМ Как уже отмечалось в гл. 3, ПМ-ЭВМ не имеет программного обеспечения, позволяющего пользоваться для решения задач языками высокого уровня. Поэтому запись программы для ПМ-ЭВМ осуществляется пользователем на машинном языке с применением команд описанных выше групп. Полный перечень команд, приведенных в сжатой форме в табл. 4.1 — 4.3, должен быть хорошо известен пользователю, решающему свою задачу. Это даст ему возможность варьировать при составлении своих программ различными командами и способами их включения в программы с целью составления программ либо более коротких, либо экономящих используемую память, либо сокращающих время счета. В ряде случаев способ решения той или иной задачи становится более понятным, если он представлен в виде специальной схемы, называемой схемой алгоритма решения и имеющей вид ориентированной сети с вершинами различных типов, соответствующими используемым операциям. В качестве примера рассмотрим решение задачи суммирования первых 20 чисел натурального ряда, схема которой приведена на рис. 4.13,а. Для реализации первых двух операторов (не считая Start) можно воспользоваться двухбайтовой командой MVI г, осуществляющей непосредственную загрузку в какой-либо регистр данных, содержащихся во втором байте команды (в данном случае - чисел OD). Для осуществления операции S = S + N можно воспользоваться командой ADD r, выполняющей суммирование содержимого какого-либо регистра с содержимым аккумулятора и запись результата в аккумулятор. Для выполнения операции N = N + 1 в машинном языке ПМ-ЭВМ предусмотрена специальная команда INR г, осуществляющая увеличение на единицу содержимого какого-либо регистра. Остается еще организовать в программе цикл с использованием условного оператора. Для этой цели подошла бы команда JNZ, осуществляющая переход в программе при отсутствии нуля в результате какой-либо предшествующей переходу операции (в нашем случае — операции вычитания: 21 — N). Однако этого можно и не делать, построив несколько иначе схему решения задачи. Вместо того чтобы суммировать последовательно увеличивающиеся числа от О D до 20 D, можно суммировать последовательно уменьшающиеся числа от 20 D до OD. Тогда содержимое регистра, хранящего число N, на некотором шаге выполнения программы обратится в нуль и этот результат можно будет использовать при организации условного перехода. Итак, новая схема алгоритма может быть построена следующим образом. Шаг 1. Заносим число О D в аккумулятор (А). Шаг 2. Заносим число 20 D в какой-нибудь регистр, например в регистр D. Шаг 3. Суммируем содержимое регистров А и D. Шаг 4. Уменьшаем содержимое регистра Она единицу. Шаг 5. Если содержимое регистра Вне равно нулю, осуществляем переход к шагу 3; в противном случае переходим к следующему шагу. Ш а г 6. Переписываем содержимое регистра А в какой-нибудь из портов вывода, например в порт Р0оо- Ш а г 7. Конец работы программы. Соответствующая схема представлена йа рис. 4.13,6. Приступим к программированию этой схемы. Для этой цели нам понадобятся все указанные выше команды, за исключением команды INR г (увеличение содержимого регистра на единицу). Вместо нее следует взять команду DCR г (уменьшение содержимого регистра на единицу), которая будет использована применительно к регистру D. Кроме того, нам будут необходимы еще следующие две команды: OUT — двухбайтовая команда вывода данных из аккумулятора в порт вывода, определяемый адресом, содержащимся во втором байте команды, и однобайтовая команда HLT — останов программы. Коды всех используемых команд можно взять из таблицы, приведенной в приложении 1. Для размещения всей программы нам понадобятся 12 ячеек памяти с номерами от 014QOOOQ до 014Q013Q. В первые две ячейки с номерами 014 000 и 014 001 поместим оба байта первой команды MVI A OOOQ загрузки аккумулятора (регистра А) числом OD. При этом в первую ячейку поместим восьмеричный код команды 076, а во вторую — содержимое второго байта этой команды — восьмеричный код числа OD (число 000). В следующие две ячейки с номерами 014 002 и 014 003 поместим два байта следующей команды, загружающей регистр D десятичным числом 20. Восьмеричный код этой операции 026 будет находиться в первой ячейке, а восьмеричный код 024 десятичного числа 20 - во второй и т. д. В последнюю ячейку с номером 014 013 поместим восьмеричный код 166 команды HLT, осуществляющей останов программы. В табл. 4.5 приведен полный текст составленной программы вместе с комментарием. При организации цикла использована специальная метка Ml, указывающая на операцию, которую следует выполнить, если содержимое регистра D не равно нулю. ![]() Рис. 4.13. Схемы алгоритмов для задачи сложения первых 20 чисел Таблица 4.5
|
![]() | Развитие высших форм запоминания 1 Леонтьев Алексей Николаевич Леонтьев Алексей Николаевич (5 февраля 1903 — 21 января 1979) — советский психолог, доктор психологических наук, профессор, академик... | ![]() | Свидетельство о государственной регистрации программы для ЭВМ регистрационный номер: 2011618 693 ( 08. 1 2011) Заявка: 2011616 954 ( 19. 0 2011) Алексеевич, Липов Денис Игоревич, Петрик Алексей Николаевич, Лобанов Павел Сергеевич, Семенов Роман Александрович, Киселев Алексей... |
![]() | Реферат Авторы: Захаров Михаил Юрьевич, Виноградов Кирилл Евгеньевич, Кренев Александр Николаевич Образования "Ярославский государственный университет имени П. Г. Демидова" 150000, г. Ярославль, ул. Советская, 14 | ![]() | Алексей Николаевич Толстой Гиперболоид инженера Гарина Этот роман написан в 1926–1927 годах. Переработан, со включением новых глав, в 1937 году |
![]() | Лекции по общей психологии Алексей Николаевич Леонтьев (1903-1979) выдающийся советский психолог, действительный член апн рсфср, доктор педагогических наук,... | ![]() | Разработка принципов однопроходной прокатки изделий из волокнистых композиционных материалов Мануйлов Виталий Федорович, Соколов Алексей Викторович, Нуждин Виталий Николаевич, Преображенский Евгений Владимирович |
![]() | Василий Александрович Токарев П. Михайлов Игорь Львович Андреев Вячеслав Николаевич Козляков День народного единства: биография праздника Книга посвящена драматичным событиям российской истории XVII в. – Смутному времени. На основе широкого круга источников и литературы... | ![]() | Контрольная работа по литературе в 7 классе Мать, Надежда Осиповна, была правнучкой Ганнибала. Александр Львович литературой не увлекался, а вот его брат, Сергей Львович,- был... |
![]() | Происхождение Александра Сергеевича Пушкина Сергей Львович (1767—1848), светский острослов и поэт-любитель, дядя по отцу, Василий Львович (1766—1830), был известным поэтом круга... | ![]() | Алексей Николаевич Толстой Гиперболоид инженера Гарина «Аэлита. Гиперболоид инженера Гарина»: Гос уч пед из во Министерства просвещения бсср; Минск; 1959 |