Реферат: Аналитический обзор книги Программирование на языке ассемблера для микропроцессоров 8080 и 8085
b) команды сдвига не действуют на другие флаги, кроме флага переноса;
c) команды загрузки, записи, пересылки, увеличивают на 1 пары регистров и уменьшают на 1 пары регистров вообще не оказывают влияния на флаги;
d) 16-разрядное сложение действует только на флаг переноса.
5. Отсутствует косвенная адресация через память и индексация. Отсутствие косвенной адресации через память компенсируется загрузкой косвенного адреса в регистры Н и L. Действительная косвенная адресация, таким образом, является двухшаговым процессом. При желании загрузить или записать в память аккумулятор можно также загрузить косвенный адрес в регистры В и С или D и Е. Отсутствие индексной адресации компенсируется добавлением пары регистров с помощью команды DAD . Эта команда добавляет пару регистров к Н и L. Таким образом, индексация требует нескольких шагов:
a) загрузить индекс в пару регистров,
b) загрузить базовый адрес в другую пару (одной из пар регистров должны быть Н и L), в) используя команду DAD , сложить две пары и г) использовать сумму как косвенный адрес (при помощи обращения к регистру М). Индексация в 8080 и 8085 - долгий и неудобный процесс.
5. Нет флага переполнения при получении дополнения до двух, так что надо определять такое переполнение программным путем. Из этого следует, что трудно работать с числами со знаком.
6. Многие обычные команды отсутствуют, но могут быть легко смоделированы с помощью регистровых команд. Примерами являются очистка аккумулятора ( с использованием SUB A или XRA A ), логический сдвиг аккумулятора влево (с помощью ADD A ), очистка флага переноса (ANA A или ORA A ) и проверка аккумулятора (ANA A или ORA A ). Команда ANA A и ORA A очищают флаг переноса и устанавливают остальные флаги в соответствии с содержимым аккумулятора. Причем загрузка регистра не действует на флаги.
7. Нет относительных переходов. Фактически, единственной командой перехода, которая не требует абсолютного адреса, является PCHL , по которой загружается счетчик команд из регистров Н и L и, таким образом, производится косвенный переход.
8. Есть два отдельных набора команд увеличения и уменьшения на 1. Команды DCR и INR применяются к 8-разрядным регистрам и действуют на все флаги, за исключением флага переноса. Команды DCX и INX применяются к 16-различным парам регистров и вообще не действуют на флаги. Можно использовать 16-разрядные пары регистров как обыкновенные счетчики, но единственным способом проверки пары на 0 является использование команды логическое ИЛИ к двум регистрам вместе с аккумулятором.
9. Нет арифметических или логических сдвигов. Единственными командами сдвига являются команды циклического сдвига с флагом переноса или без него. Другие сдвиги могут быть смоделированы при помощи команд циклического сдвига (RRC, RLC, RAR и RAL ) и команд сложения (ADD A, ADC A и DAD H ). Флаг переноса может быть установлен с помощью STC , а очищен с помощью ANA A (или ORA A ).
10.Аккумулятор является единственным регистром, который может быть сдвинут, инвертирован или использован для ввода или вывода. Единственными командами, которые оперируют непосредственно с регистрами общего назначения, являются команды MOV ( пересылка содержимого в другой регистр или из другого регистра), MVI (загрузка непосредственного операнда), DCR (уменьшает на 1) и INR (увеличение на 1). Эти команды могут оперировать также с регистром М, т.е. байтом из памяти, адресуемым через регистры Н и L.
11.В стек или из стека могут быть переданы только пары регистров. Одной из таких пар является слово состояния процессора (PSW ), которое содержит аккумулятор (старший байт) и флаги (младший байт). Команды CALL и RETURN передают адреса в стек или из него.
12.В микропроцессоре 8080 отсутствует читаемый флаг системы прерываний. Это создает трудности в том случае, когда исходное состояние системы прерываний должно быть восстановлено после выполнения секции команд, которая должна выполняться при закрытых прерываниях. Для решения этой проблемы можно копию состояния прерываний хранить в ОЗУ. С другой стороны, 8085 имеет читаемый флаг разрешения прерываний.
13. В микропроцессорах 8080 и 8085 приняты следующие общие соглашения.
· При записи всех 16-разрядных адресов младший байт записывается первым (т.е. по меньшему адресу). Порядок байтов в адресах тот же, что и в микропроцессоре Z80 и 6502, но является обратным порядком байтов, принятому в микропроцессорах 6800 и 6809.
· Указатель стека содержит младший адрес, действительно занятый в стеке. Это соглашение также принято в микропроцессорах Z80 и 6809, но явно противоположно принятому 6502 и 6800 (следующий доступный адрес). Согласно всем командам 8080 и 8085 данные в стек записываются с предварительным уменьшением на 1 (вычитанием перед записью байта 1 из указателя стека) и загружаются из стека с последующим увеличением на 1 (добавлением после загрузки байта 1 к указателю стека).
· Флаг разрешения прерываний (только в 8085), равный 1, разрешает прерывания, а 0 - запрещает их. Такое же соглашение принято и в Z80, но оно обратно принятому в 6502, 6800 и 6809.
Представленная часть первой главы рассмотрела особенности процессоров, она так и называется - краткий обзор для опытных программистов. Теперь будем рассматривать дальше, причем не указывая конкретно команды, а описывая понятия и особенности операций представленной на обзор первой главы данной книги.
ЗАГРУЗКА РЕГИСТРОВ ИЗ ПАМЯТИ
В микропроцессорах 8080 и 8085 предусмотрены четыре способа адресации, которыми можно пользоваться при загрузке регистров из памяти: прямая (из памяти с конкретным адресом), непосредственная (с конкретным значением), косвенная (из адреса, помещенного в паре регистров) и стековая ( из вершины стека).
ЗАПОМИНАНИЕ РЕГИСТРОВ В ПАМЯТИ
Для запоминания регистров в памяти существуют три способа адресации: прямая (в память с конкретным адресом), косвенная (в память с адресом, который находится в паре регистров) и стековая (в вершину стека).
ЗАПОМИНАНИЕ ДАННЫХ В ОЗУ
Начальные значения ячеек ОЗУ задаются либо через аккумулятор, либо прямо или косвенно с использованием регистров Н и L.
АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ ОПЕРАЦИИ
Для большинства арифметических и логических операций (сложение, вычитание, логическое И, логическое ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ и сравнение) одним из операндов является аккумулятор, а вторым 8-разрядный регистр или байт данных, заданный непосредственно в команде. Результат (если он существует) помещается в аккумулятор. Если используется регистр М, то процессор получает операнд из памяти по адресу, который содержится в регистрах Н и L.
РАБОТА С РАЗРЯДАМИ
Программист может установить, очистить, получить обратный код (дополнение к 1) или проверить разряды, используя логические операции с соответствующими масками. Команды сдвига и получение обратного кода могут оперировать только с аккумулятором, но в то же время для выполнения небольшого числа сдвигов могут использоваться арифметические и логические команды. Возможны следующие операции с отдельными разрядами аккумулятора:
· установить с помощью операции логическое ИЛИ с единицами в соответствующих позициях;
· очистить с помощью операции логическое И с нулями в соответствующих позициях;
· инвертировать (изменить на обратное значение) с помощью операции ИСКЛЮЧАЮЩЕЕ ИЛИ с единицами в соответствующих позициях;
· проверить (на все нули в проверяемых разрядах) с помощью операции логическое И с единицами в соответствующих позициях.
·
ПРИНЯТИЕ РЕШЕНИЙ