Учебная работа. Реферат: Аналитический обзор книги Программирование на языке ассемблера для микропроцессоров 8080 и 8085
Интенсивное развитие микроэлектроники и увеличения степени интеграции открыли новое направление в ВТ — создание процессоров и микрокомпьютеров. Возникли вы числительные системы с малым уровнем употребления энергии и всепригодными способностями, которые разрешают решать задачки управления объектами различной физической природы. На базе их внедрения понижаются Издержки на автоматизацию главных технических и вспомогательных действий. В итоге будет решена задачка всеохватывающей автоматизации производства во всех отраслях. Это дозволит прирастить производительность труда, уменьшить себестоимость выпускаемой продукции и существенно уменьшить ручные операции в индустрии. Но для широкого развития работ в данном направлении нужно готовить существенное число инженеров — системотехников, умеющих создавать и использовать процессоры и микрокомпьютеры. Не считая того, следует выпускать и много инженеров — математиков, разрабатывающих соответственное программное обеспечение. Для их обучения нужно иметь учебные пособия, посвященные аппаратным и программным средствам современной вычислительной техники.
Невзирая на то что выпущено существенное количество литературы, посвященной разработке и применению процессоров и микрокомпьютеров, также описание программных средств, предлагаемая книжка представляет определенный Энтузиазм всеохватывающим подходом и методической целостностью.
На обзор представлена книжка американских создателей
и
. Книжка переведена с британского, написана в 1987г. в издательстве Радио и связь. Издание содержит в себе 488 страничек.
Для начала разглядим содержание данной книжки чтоб создать окончательный анализ по ее плюсам и недочетам, также конкретизировать к какой группе эта книжка предназначена. На обзор коротко будут представлены части данной книжки, потом остановим свое внимание на определенной главе.
Книжка состоит из 2-ух частей: обзора вопросцев программирования на языке ассемблера и набора подпрограмм. 1-ая часть отлично проиллюстрирована огромным числом примеров, позволяющих стремительно усвоить главные способности программирования для рассматриваемых процессоров. Подпрограммы, приведенные во 2-ой части книжки, могут удовлетворять потребности большинства программистов в обычных процедурах.
Эта книжка, можно сказать, является вроде бы справочным пособием для программистов, работающих на языке ассемблера. Она содержит лаконичный обзор вопросцев программирования на языке ассемблера для определенного процессора и набор нужных подпрограмм. В этих подпрограммах использовались обычные соглашения по формату, документированному оформлению и способам передачи характеристик. При всем этом соблюдались правила более всераспространенных ассемблеров; не считая того, описаны предназначение, процедура, характеристики, результаты, время выполнения и требования к памяти.
ГЛАВА 1. ОБЩИЕ способы ПРОГРАММИРОВАНИЯ
Служит введением в программирование для данного микропроцессора; в ней приводятся главные отличия этого микропроцессора от остальных процессоров и мини-ЭВМ . В данной главе описываются общие способы написания программ на языке ассемблера для процессора 8080 и 8085. Она содержит методы выполнения последующих операций:
* загрузка и сохранение регистров;
* значения;
* числовые сопоставления;
* организация циклов (циклических последовательностей операций);
* обработка массивов;
* поиск в таблице;
* работа с знаками;
* преобразование кодов;
* арифметические операции завышенной точности;
* умножение и деление;
* обработка списков;
* обработка структур данных.
В отдельных разделах описываются передача характеристик подпрограммам, общие способы написания драйверов ввода-вывода и программ обработки прерываний, также приемы, дозволяющие убыстрить выполнение программ и уменьшить применяемую ими память.
Для тех, кто знаком с программированием на языке ассемблера на остальных вычислительных машинках, тут дается лаконичный обзор особенностей микропроцессоров 8080 и 8085.
Арифметические и логические операции разрешены лишь меж аккумом и б конкретных данных либо меж аккумом и регистром общего предназначения. Но один регистр общего предназначения в реальности показывает на адресок в памяти; это регистр М, который в реальности обращается к адресу в памяти, содержащемуся в регистрах Н и L. Таковым образом, команда ADD M
, к примеру, значит: прибавить к аккуму содержимое б памяти, адресуемого через регистры H и L.
Аккумулятор и регистры Н и L являются особыми регистрами. Они являются единственными регистрами , которые могут быть прямо загружены либо записаны в память. Аккумулятор является единственным регистром, который быть может инвертирован, смещен, косвенно загружен с внедрением адреса в паре регистров В либо D, косвенно записан в память по адресу, содержащемуся в паре регистров В либо D, либо применен в командах IN
и О
UT
. Регистры Н и L составляют единственную пару, которая быть может применена косвенно в арифметических командах, при записи в память данных, данных конкретно в команде, либо при загрузке и записи в память остальных регистров, хороших от аккума. Регистры Н и L являются также единственной парой, которая быть может передана в счетчик установок либо указатель стека. Наиболее того, эти регистры употребляются как аккумулятор двойной длины при сложении 16-разрядных чисел (команда DAD
). Регистры D и Е являются в неком смысле также особыми, так как одной командой (XCHG
) можно поменять их содержимое с содержимым регистров Н и L. Таковым образом, регистры в 8080 и 8085 очень асимметричны, и программер должен аккуратненько выбирать, для каких данных и адресов какими регистрами воспользоваться.
Нередко для одних и тех же физических регистров употребляются несколько имен. Для почти всех установок A,B,C,D,E,H и L являются 8-разрядными регистрами. Для остальных установок регистры В и С (В- старший по значению), D и Е (D- старший по значению) либо Н и L (Н- старший по значению) являются 16-разрядной парой регистров. определения пара регистров В, регистры В и С и пара регистров ВС имеют одно и тоже SPHL
, PCHL
, XTHL
и XTHG
. Благодаря тому, что существует команда XCHG
, для второго адреса берут регистры D и Е , а не В и С. Регистры В и С употребляют обычно как отдельные 8-разрядные регистры для временного хранения данных.
действие разных установок на флаги очень непоследовательно. К неким в особенности необыкновенным действиям относятся последующие:
a) логические команды очищают флаг переноса;
b) команды сдвига не действуют на остальные флаги, не считая флага переноса;
c) команды загрузки, записи, пересылки, наращивают на 1 пары регистров и уменьшают на 1 пары регистров совершенно не оказывают воздействия на флаги;
d) 16-разрядное сложение действует лишь на флаг переноса.
5. Отсутствует косвенная адресация через память и индексация. Отсутствие косвенной адресации через память возмещается загрузкой косвенного адреса в регистры Н и L. Действительная косвенная адресация, таковым образом, является двухшаговым действием. При желании загрузить либо записать в память аккумулятор можно также загрузить косвенный адресок в регистры В и С либо D и Е. Отсутствие индексной адресации возмещается добавлением пары регистров при помощи команды DAD
. Эта команда добавляет пару регистров к Н и L. Таковым образом, индексация просит нескольких шагов:
a) загрузить индекс в пару регистров,
b) загрузить базисный адресок в другую пару (одной из пар регистров должны быть Н и L), в) используя команду DAD
, сложить две пары и г) употреблять сумму как косвенный адресок (с помощью воззвания к регистру М). индексация в 8080 и 8085 — длинный и неловкий процесс.
5. Нет флага переполнения при получении дополнения до 2-ух, так что нужно определять такое переполнение программным методом. Из этого следует, что тяжело работать с числами со знаком.
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) либо проверить разряды, используя логические операции с надлежащими масками. Команды сдвига и получение оборотного кода могут оперировать лишь с аккумом, но в то же время для выполнения маленького числа сдвигов могут употребляться арифметические и логические команды. Вероятны последующие операции с отдельными разрядами аккума:
· установить при помощи операции логическое ИЛИ с единицами в соответственных позициях;
· очистить при помощи операции логическое И с нулями в соответственных позициях;
· инвертировать (поменять на оборотное
· проверить (на все нули в проверяемых разрядах) при помощи операции логическое И с единицами в соответственных позициях.
·
ПРИНЯТИЕ РЕШЕНИЙ
Процедуры принятия решений могут быть классифицированы последующим образом
· переход, если разряд установлен (логическая единица) либо очищен (логический нуль);
· переход, если два значения равны либо не равны;
· переход, если одно
наличие процедур первого класса дозволяет микропроцессору реагировать на значения флагов, переключателей, полосы состояния либо остальных двоичных (включено- выключено) сигналов. наличие процедур второго класса дозволяет микропроцессору найти, имеет ли вводимая величина либо итог определенное наличие процедур третьего класса дозволяет микропроцессору найти, превосходит ли к примеру, правильное либо неверное
ОРГАНИЗАЦИЯ ЦИКЛОВ
Самый обычной метод выполнения цикла (т.е. повторения последовательности установок) в процессоре 8080 либо 8085 состоит в последующем:
1. Загрузить в регистр общего предназначения число, указывающее, сколько раз обязана быть выполнена последовательность установок:
2. Выполнить команды;
3. уменьшить данный регистр на 1;
4. возвратиться к шагу 2, если итог шага 3 не равен 0.
ОБРАБОТКА МАССИВОВ
Элемент массива проще всего избрать, поместив его адресок в регистры Н и L. В этом случае можно:
· работать с элементом, обращаясь к нему как к регистру М;
· выбирать последующий элемент массива (по последующему большему адресу);
· используя команду INX
для роста значения пары регистров Н и L, либо предшествующий элемент (по предшествующему наименьшему адресу), используя DCX
для уменьшения Н и L.
· выбирать хоть какой случайный элемент, загрузив в другую пару регистров смещения элемента относительно адреса, содержащегося в НL, и использовав команду DAD
(16-ричное сложение).
ПОИСК В ТАБЛИЦЕ
Потому что в микропроцессорах 8080 и 8085 отсутствует индексация, то адресок, нужный для поиска в таблице, должен рассчитываться очевидно с внедрением команды DAD
. Как и при работе с массивами, поиск в таблице является обычным, если таблица содержит 8-разрядные элементы данных; труднее, когда таблица содержит наиболее длинноватые элементы либо же адреса. В этом случае могут быть полезны команды XCHG
, PCHL
и SPHL
, но они требуют, чтоб программер помещал результаты в определенные пары регистров.
РАБОТА С СИМВОЛАМИ
Простой метод работы с знаками в микропроцессорах 8080 и 8085 состоит в воззвании с ними как с 8-разрядными числами без знака. Буковкы и числа составляют упорядоченную последовательность набора знаков в кодах ASCII
(к примеру, представление буковкы А в коде ASCII
на единицу меньше, чем ASCII
.
ПРЕОБРАЗОВАНИЕ КОДОВ
Данные могут быть преобразованы из 1-го кода в иной при помощи арифметических либо логических операций (если соотношение кодов обычное) либо при помощи поиска в таблицах ( если это соотношение сложное).
АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ ПОВЫШЕННОЙ ТОЧНОСТИ
Арифметические операции завышенной точности требуют ряда 8-разрядных операций. нужно делать последующее:
· поначалу очистить флаг переноса, потому что никогда не происходит переноса в младшие байты либо заема из их;
· употреблять команды сложения с переносом (ADC
) либо вычитание с заемом (SBB
) для выполнения 8-разрядных операций, которые включают перенос либо заем из предшествующей операции.
УМНОЖЕНИЕ И ДЕЛЕНИЕ
Есть много методов выполнения умножения. Один из подходов состоит в подмене умножения маленьких целых чисел на определенную маленькую последовательность сложений и сдвигов на лево. Деление на число, являющееся степенью 2, можно выполнить при помощи ряда логических сдвигов на Право. Если множатся либо делятся числа со знаком, то нужно обращать внимание на отделение знака от абсолютной величины. Логические сдвиги должны быть изменены на арифметические, сохраняющие знаковый разряд.
ОБРАБОТКА СПИСКОВ
Если элементы списков хранятся в памяти в поочередных адресах, то такие списки можно обрабатывать так же, как массивы. Если два массива образуют очереди либо цепочки, то становится тривиальной ограниченность данного набора установок, выражающаяся в последующем:
· не предусмотрена индексация;
· косвенная адресация вероятна лишь через пары регистров;
· адреса в парах регистров могут быть применены лишь для получения либо записи 8-разрядных данных.
·
РАСПРОСТРАНЕННЫЕ СТРУКТУРЫ ДАННЫХ
Наиболее всераспространенные структуры данных можно обрабатывать при помощи процедур, созданных для работы с массивами, таблицами и перечнями. К всераспространенным структурам данных относятся очереди либо связанные списки, также стеки.
СПОСОБЫ ПЕРЕДАЧИ ПАРАМЕТРОВ
Более общими методами передачи характеристик в процессорах 8080 и 8085 являются последующие:
· В регистрах. Доступными являются семь 8-разрядных регистров общего предназначение ( A, B, C, D, E, H и L ), при всем этом три пары регистров (B, D и H) могут служить для передачи адресов.
· В данной области памяти. Для реализации этого подхода проще всего поместить базисный адресок данной области в регистры H и L. Вызывающая программка до передачи управления подпрограмме обязана хранить характеристики в памяти и загрузить базисный адресок в регистры H и L.
· В памяти программки конкретно за вызовом подпрограммы.
· В стеке.
ПРОСТОЙ ВВОД — ВЫВОД
Обычный ввод — вывод можно выполнить, используя либо 8-разрядные адреса устройств, либо 16-разрядные адреса памяти. Достоинства адресов устройств заключаются в том, что они короче и употребляют отдельное адресное место. Недочет заключается в том, что команды IN
и OUT
содержат адреса устройств и допускают лишь прямую адресацию, т. е. команды IN
и OUT
требуют, чтоб были определены адреса; в этом случае отсутствует прямой метод передачи адресов устройств ввода — вывода в виде характеристик, так чтоб одна программка ввода — вывода поддерживала много устройств. С иной стороны, если порты ввода — вывода занимают адреса памяти, то при помощи всех установок, обращающихся к памяти, может выполнятся также ввод — вывод. задачи, связанные с сиим подходом, состоят в его нестандартности, что делает трудности в тех вариантах, когда нужно отличить передачи ввода — вывода от передач в памяти, также когда требуется, чтоб некая область памяти была зарезервирована для устройств ввода — вывода.
состояние И УПРАВЛЕНИЕ
Сигналы состояния и управления могут обрабатываться так же, как любые остальные данные. Единственная изюминка заключается в том, что машина — комплекс технических средств, предназначенных для автоматической обработки информации в процессе решения вычислительных и информационных задач) (либо вычислительной системы) которое делает арифметические и логические операции данные программкой преобразования инфы управляет вычислительным действием и коор не может читать из порта вывода; если нужно знать текущее состояние порта вывода, нужно хранить копию данных в оперативки.
ПЕРИФЕРИЙНЫЕ ИНТЕГРАЛЬНЫЕ МИКРОСХЕМЫ
В системах 8080 и 8085 более общими периферийными интегральными микросхемами являются поочередный интерфейс 8251, программируемый таймер 8253 и параллельны интерфейс 8255. Все эти устройства могут делать огромное количество функций, большая часть из которых подобно функциям самого машина — комплекс технических средств, предназначенных для автоматической обработки информации в процессе решения вычислительных и информационных задач) (либо вычислительной системы) которое делает арифметические и логические операции данные программкой преобразования инфы управляет вычислительным действием и коор, и спектр этих функций значительно уже. В данной части книжки описывается устройство 8255.
НАПИСАНИЕ ПРОГРАММ, РАБОТАЮЩИХ ПО ПРЕРЫВАНИЯМ
В большинстве систем прерывания 8080 и 8085 употребляются команды RST
и входные сигналы, которые передают управление по определенным адресам памяти. Все команды RST
и входные сигналы сохраняют старенькое слово состояния микропроцессора (PSW
) содержит аккумулятор (старший б) и флаги (младший б). Прерывания должны быть разрешены очевидно при помощи команды EI
конкретно перед командой RET
, заканчивающей обслуживающую программку. Команда EI
задерживает действительное разрешение прерываний на один такт команды во избежания излишней записи адреса возврата в стек.
УВЕЛИЧЕНИЕ БЫСТРОДЕЙСТВИЯ ПРОГРАММ
Убыстрить выполнение можно лишь определив, где пропадает время. Для этого нужно найти, какие циклы машина — комплекс технических средств, предназначенных для автоматической обработки информации в процессе решения вычислительных и информационных задач) (либо вычислительной системы) которое делает арифметические и логические операции данные программкой преобразования инфы управляет вычислительным действием и коор делает более нередко. Основное воздействие на понижение издержек времени нередко выполняемого цикла оказывает счетчик числа циклов. Таковым образом, принципиально найти, как нередко производятся команды, и работать дальше с циклами в порядке частоты их выполнения.
Опосля того, как уточнено, какие циклы производятся более нередко, время их выполнения можно уменьшить, используя последующие правила:
* Исключение лишних операций;
* Реорганизация цикла так, чтоб уменьшалось число установок перехода;
* Внедрение линейной возможности установок заместо подпрограмм;
* Внедрение для временного хранения стек заместо определенных адресов памяти;
* Предназначение регистров таковым образом, чтоб получить наибольший выигрыш от специализированных установок, как LHLD,SHLD,XCHG,XTHL
и PCHL
;
* Всюду, где может быть, для работы с 16-разрядными данными внедрение 16-разряднвх установок;
* Внедрение установок MVI M, INR M
и DCR M
для работы с данными памяти;
* Внедрение установок MOV, MVI, INR, DCR, INX, DCX, SHLD, LHLD, XCHG, XTHL, PUSH, POP, PCHL
и SPHL
для работы с данными в регистрах;
* Внедрение RST,PCHL
либо RET
в качестве маленьких установок перехода;
* Организация последовательности условных переходов таковым образом, чтоб была минимизация среднего времени выполнения;
* Проверка на условия, при которых последовательность установок не производится, и обход данной последовательности для варианта выполнения критерий.
Обыденный путь к понижению времени выполнения состоит в подмене длинноватых последовательностей установок таблицами. Если не предусмотрены особые выходы либо не введены элементы логики программки, то при помощи отдельного просмотра таблицы могут производиться те же операции, что и при помощи последовательности установок. Ценой этого является необходимость в расходах на доп память, но при ее наличии это быть может оправдано. Если емкость памяти достаточна, то поиск в таблице быть может оптимальным подходом, даже если почти все записи ее схожи. Не считая того, что ускоряется работа, поиск в таблице обычно легче программировать и проще изменять.
УМЕНЬШЕНИЕ ДЛИНЫ ПРОГРАММЫ
Длину программки можно существенно уменьшить, выделив общие последовательности установок и заменив их подпрограммами. В итоге выходит одна копия этих установок заместо нескольких копий.
Поиск по таблице обычно просит большего размера памяти, но понижает время выполнения.
ГЛАВА 2. РЕАЛИЗАЦИЯ ДОПОЛНИТЕЛЬНЫХ КОМАНД И СПОСОБОВ АДРСАЦИИ
В данной главе показано, как воплотить команды и методы адресации, которые не входят в набор установок 8080 либо 8085. естественно, нет выбора установок, который включал бы все вероятные композиции. Разраб должен выбирать набор установок, исходя из того, сколько кодов операций доступно, как просто могут быть выполнены доп композиции и как нередко они могут употребляться. Описание доп установок и методов адресации не значит, что главный набор установок является неполным либо же плохо разработанным.
РАСШИРЕНИЕ НАБОРА КОМАНД
Команды делятся на последующие группы: арифметические, логические, передачи данных, перехода, пропуска, вызова подпрограммы, возврата из подпрограммы и смешанные. Типы операндов для всякого типа установок дискуссируются в соответственном порядке: б, слово, десятичный операнд, разряд, число, составной операнд. При обсуждении методов адресации употребляется последующий порядок: ровная, косвенная, конкретная, индексная, регистровая, автоиндексирование с подготовительным повышением адреса, автоиндексирование с подготовительным уменьшением адреса, автоиндексирование с следующем уменьшением адреса, косвенная с подготовительным индексированием, и косвенная с следующем индексированием .
АРИФМЕТИЧЕСКИЕ КОМАНДЫ
В эту группу включены последующие команды: сложение, сложение с флагом переноса, вычитание, вычитание при перестановке операндов, вычитание с флагом переноса (заем), повышение на 1, уменьшение на 1, умножение, деление, сопоставление, получение дополнения до 2-ух (отрицательного числа) и расширение. Для удобства те команды, принадлежность которых к определенной группы неясна, повторяются во всех категориях, к которым они могли бы быть отнесены.
ЛОГИЧЕСКИЕ КОМАНДЫ
Эта группа включает последующие команды: логическое И, логическое ИЛИ, логическое ИСКЛЮЧАЮЩЕЕ ИЛИ, логическое НЕ (дополнение), сдвиг, повторяющийся сдвиг и проверку. Она включает также те арифметические команды (такие, как сложение с аккума с самим собой), которые делают логические функции.
КОМАНДЫ ПЕРЕДАЧИ ДАННЫХ
Эта группа включает команды загрузки, запоминания, пересылки, обмена, ввода, вывода, чистки и установки. Не считая того, она включает арифметические команды (такие как вычитание аккума из самого себя), которые вносят определенное иной регистр предназначения, не изменяя при всем этом данных.
КОМАНДЫ ПЕРЕХОДА
Эта группа включает последующие виды переходов:
Команды бесспорного перехода
· Перейти косвенно;
· Перейти по индексу, предполагая, что базисный адресок таблицы адресов находится в регистрах Н и L, а индекс в аккуме;
· Перейти и связать, т.е. передать управление по адресу DEST
, сохранив текущее состояние счетчика установок в регистрах Н и L.
Команды условного перехода
· Перейти при равенстве нулю;
· Перейти при неравенстве нулю;
· Перейти, если значения равны;
· Перейти, если значения не равны;
· Перейти, если
· Перейти, если
· Переходы с учетом знака;
· Перейти, если больше (без учета знака), т.е. если операнды не равны и при сопоставлении не требуется заема;
· Перейти, если
· Перейти, если
· Перейти, если
·
КОМАНДЫ ПРОПУСКА
В процессорах 8080 либо 8085 команда пропуска быть может выполнена при помощи команды перехода с соответственном адресом предназначения. Этот адресок предназначения должен указывать на команду, последующую опосля той, которая стоит конкретно за командой перехода. Действительное число пропускаемых байтов будет изменяться, потому что команды процессоров 8080 и 8085 могут иметь длину 1-3 б.
КОМАНДЫ ВЫЗОВА ПОДПРОГРАММ И ВОЗВРАТА ИЗ ПОДПРОГРАММ
В процессорах 8080 либо 8085 косвенный вызов быть может выполнен при помощи воззвания к промежной подпрограмме, которая перебегает косвенно на вызываемую подпрограмму.
2.
В процессоре 8080 либо 8085 условный вызов подпрограммы быть может выполнен при помощи последовательностей установок для условного перехода. Единственное отличие заключается в том, что команды перехода к реальным адресам предназначения должны быть изменены на команды вызова подпрограмм.
Команды возврата из подпрограмм делятся на:
1.
2.
3.
4.
СМЕШАННЫЕ КОМАНДЫ
В эту категорию входят последующие команды: нет операции, запись в стек, получение из стека, останов, ожидание, захват (программное прерывание) и остальные, не попавшие в описание ранее группы установок.
ДОПОЛНИТЕЛЬНЫЕ СПОСОБЫ АДРЕСАЦИИ
В микропроцессорах 8080 и 8085 косвенную адресацию можно выполнить при помощи загрузки косвенных адресов в регистры Н и L, используя команду LHLD
. Опосля этого воззвание к регистру М является эквивалентом косвенной операции. Таковым образом, этот процесс постоянно включает два шага. Не считая того, можно употреблять также пары регистров В и D в командах LDAX
и STAX
.
Индексную адресацию можно выполнить, добавляя индекс при помощи команды DAD
к базе. Понятно, что программное сложение просит доп времени выполнения.
При предувеличении адресный регистр перед внедрением автоматом возрастает. В микропроцессоре 8080 либо 8085 предувеличение быть может реализовано при помощи роста пары регистров перед ее внедрением в качестве адреса.
При послеувеличении адресный регистр опосля использования в команде автоматом возрастает. В микропроцессоре 8080 либо 8085 послеувеличение быть может реализовано при помощи роста пары регистров опосля ее использования в качестве адреса.
При предуменьшении адресный регистр перед внедрением автоматом миниатюризируется. В микропроцессоре 8080 либо8085 предуменьшение быть может выполнено при помощи уменьшения пары регистров перед ее внедрением в качестве адреса.
При послеуменьшении адресный регистр опосля использования автоматом миниатюризируется. В микропроцессоре 8080 либо 8085 Послеуменьшение быть может выполнено при помощи уменьшения пары регистров опосля использования ее в качестве адреса.
При предындексировании машина — комплекс технических средств, предназначенных для автоматической обработки информации в процессе решения вычислительных и информационных задач) (либо вычислительной системы) которое делает арифметические и логические операции данные программкой преобразования инфы управляет вычислительным действием и коор должен поначалу вычислить индексный адресок, а потом употреблять этот адресок косвенно. Потому что таблица, для которой делается индексирование, обязана содержать двухбайтные косвенные адреса, индексирование обязано сопровождаться умножением на 2.
При послеиндексировании машина — комплекс технических средств, предназначенных для автоматической обработки информации в процессе решения вычислительных и информационных задач) (либо вычислительной системы) которое делает арифметические и логические операции данные программкой преобразования инфы управляет вычислительным действием и коор должен поначалу получить косвенный адресок, а потом употреблять его как базу для индексирования.
ГЛАВА 3. РАСПРОСТРАНЕННЫЕ ОШИБКИ
ПРОГРАММИРОВАНИЯ
В данной главе описываются всераспространенные ошибки в программках на языке ассемблера 8080 и 8085. Заключительный раздел данной главы посвящен описанию нередко встречающихся ошибок в драйверах ввода-вывода и программках обслуживания прерываний. Эта глава преследует последующие цели:
* Предупредить программера о вероятных противных местах и источниках ошибок,
* Обрисовать возможные источники ошибок программирования,
* Выделить те способы и предостережения, которые дискуссировались в главах 1 и 2,
* Информировать программистов, занимающихся поддержкой математического обеспечения, о вероятных местах ошибок и некорректных истолкований,
* Отдать начинающему программеру отправную точку в тяжелом процессе обнаружения и исправления ошибок.
Естественно, никакой перечень ошибок не быть может полным, тем не наименее, данное в данной главе описание поможет читателю отлаживать большая часть программ.
систематизация ОШИБОК
ПРОГРАММИРОВАНИЯ
Рассмотренные ошибки программирования для процессоров 8080 и 8085 могут быть разбиты на последующие группы:
Перестановка операндов ли частей операндов. К обычным ошибкам этого рода относятся перестановка операндов, указывающих на источник и предназначение в командах пересылки, перевертывание формата, в каком запоминаются 16-разрядные значения, изменение направления при вычитаниях и сопоставлениях.
Неверное внедрение флагов. Обычные ошибки последующие:
· внедрение не того флага, который в данном определенном случае должен проверяться (как, к примеру, флага знака заместо флага переноса),
· условный переход опосля установок, которые не действуют на данный флаг,
· инвертирование критерий перехода (в особенности при использовании флага нуля),
· неверный условный переход в вариантах равенства и случайное изменение флага перед условным переходом.
Смешивание регистров и пар регистров. Обычная ошибка состоит в работе с регистром (В, D либо Н) заместо пары регистров с аналогичным именованием.
Смешивание адресов и данных. К обычным ошибкам относятся внедрение конкретной адресации заместо прямой адресации либо напротив, смешивание регистров с ячейками памяти, адресуемыми через пары регистров.
Внедрение неправильных форматов. Обычные ошибки состоят в использовании формата BCD (десятичного) заместо двоичного либо напротив и внедрение двоичного и шестнадцатеричного кода заместо ASCII.
Некорректная работа с массивами. Рядовая ошибка состоит в выходе за границы массивов.
Неучет неявных эффектов. К обычным ошибкам относятся внедрение аккума, пары регистров, указателя стека, флагов либо ячеек памяти без учета воздействия участвующих в работе установок. Большая часть ошибок вызываются командами, которые дают неожиданные, неявные либо косвенные результаты.
Ошибки при задании нужных исходных критерий для отдельных программ либо микро-ЭВМ в целом. Большая часть программ просит инициализации счетчиков, косвенных адресов, регистров, флагов и ячеек для временного хранения. Микро-ЭВМ в целом просит инициализации всех общих ячеек в ОЗУ (особо отметим косвенные адреса и счетчики).
Некорректная организация программки. К обычным ошибкам относятся обход либо повторение секций инициализации, неверное изменение регистров с адресами либо счетчиками и утрата промежных либо окончательных результатов.
Обыденным источником ошибок, которые тут не рассматриваются, является конфликт меж программкой юзера и системными программками. Обычным примером такового конфликта является попытка сохранять данные программки юзера в ячейках памяти системной программки. В этом случае каждый раз, когда производится системная программка, меняются данные, которые необходимы для программки юзера.
Наиболее сложные источники конфликтов соединены с системой прерываний, портами ввода-вывода, стеком и флагами. Системные программки в конечном счете должны эксплуатировать те же самые ресурсы, что и программки юзера. При всем этом обычно в системных программках предусматривается сохранение и восстановление программной среды, в какой работают пользовательские программки, но это нередко приводит к трудноуловимым либо нежданным последствиям. Создать такую операционную систему, которая была бы совсем прозрачной для юзера — это задачка, сопоставимая с выработкой правил и законов либо сводов о налогах, которые не имели бы лазеек либо побочных эффектов.
РАСПОЗНОВАНИЕ ОШИБОК АССЕМБЛЕРОМ
Большая часть ассемблеров немедля распознает более всераспространенные ошибки, такие как:
Неопределенный код операции (обычно это неверное написание либо отсутствие двоеточия либо метки);
Неопределенное имя (нередко это неверное написание либо отсутствие определенного имени);
Неправильный знак (к примеру, 2 в двоичном числе либо В в десятичном числе);
Неверное
Отсутствует операнд;
Двойное определение (одному и тому же имени присваиваются два разных значения);
Недопустимая метка (к примеру, метка, предписанная псевдооперации, не допускающей метки);
Отсутствие метки ( к примеру, при псевдооперации EQU
, для которой требуется метка).
Эти ошибки неприятны, но они просто исправимы. Единственная трудность возникает тогда, когда ошибка (таковая, как отсутствие точки с запятой у строчки с комментарием) приводит ассемблер в «замешательство», результатом что является ряд глупых сообщений о ошибках.
Существует, но, много обычных ошибок, которые ассемблер не может распознать. Программеру следует подразумевать, что его программка может содержать такие ошибки, даже если ассемблер и не сказал о их. Типичны последующие примеры.
1. Пропущенные строчки.
2. Пропущенные определения.
3. Ошибки в написании, когда запись сама по для себя допустима.
4. Обозначение установок как объяснений.
5. Если в команде, которая работает с парой регистров, задается одинарный регистр.
6. Если вводится некорректная цифра, таковая как Х
в десятичном либо шестнадцатеричном числе либо 7 в двоичном числе.
В ассемблере могут распознаваться лишь такие ошибки, которые предугадал его разраб. Программеры же нередко способны созодать ошибки, которые разраб не мог и вообразить, такие ошибки может быть отыскать при проверке программ вручную строка за строкой.
РАСПРОСТРАНЕННЫЕ ОШИБКИ В ДРАЙВЕРАХ
ВВОДА — ВЫВОДА
Потому что большая часть ошибок в драйверах ввода-вывода соединено как с аппаратурным, так и с программным обеспечением, они тяжело поддаются систематизации. Приведем некие вероятные случаи.
Смешивание портов ввода и вывода.
Попытка выполнить операции, которые на физическом уровне невозможны.
Упущенные из вида неявных эффектов аппаратуры.
Чтение либо запись без проверки состояния.
Игнорирование различия меж вводом и выводом.
Ошибка при сохранении копии выводимых данных.
Чтение данных до того, как они стабилизируются, либо во время их конфигурации.
Отсутствие конфигурации полярности данных, которые передаются к устройству либо от устройства, работающего с отрицательной логикой.
Смешивание реальных портов ввода-вывода с внутренними регистрами интегральных схем ввода-вывода.
Неверное внедрение двунаправленных портов.
Отсутствие чистки состояния опосля выполнения команды ввода-вывода.
РАСПРОСТРАНЕННЫЕ ОШИБКИ В
ПРОГРАММАХ ПРЕРЫВАНИЯ
Почти все ошибки, связанные с прерываниями, зависят как от аппаратного, так и программного обеспечения. Самыми всераспространенными ошибками являются последующие.
1. Отсутствие разрешения прерываний.
2. Отсутствие сохранения регистров.
3. Сохранение либо восстановление регистров в неверном порядке.
4. Разрешение прерываний до инициализации ценностей и остальных характеристик системы прерываний.
5. Неучет того, что реакция на прерывание включает сохранение счетчика установок в верхушке стека.
6. Отсутствие воспрещения прерываний во время многобайтных передач либо выполнения последовательности установок, которая не обязана прерываться.
7. Отсутствие разрешения прерываний опосля последовательности установок, которая обязана производиться без прерываний.
8. Отсутствие чистки сигнала, вызывающего прерывание.
9. Ошибка в разговоре с главный программкой.
10. Отсутствие сохранения и восстановления ценностей.
11. Отсутствие разрешения прерываний от доп аппаратурных входов, которое производится при помощи чистки разрядов масок в регистре I.
12. Неверное внедрение разрядов разрешения прерываний в командах SIM
.
ВВЕДЕНИЕ В ПРОГРАММНЫЙ РАЗДЕЛ
Программный раздел содержит наборы подпрограмм на языке ассемблера для процессоров 8080 и 8085. Каждой подпрограмме предпосланы введение и комменты; за каждой подпрограммой следует по последней мере один пример ее использования. Введение содержит последующую информацию: предназначение подпрограммы, функцию ее выполнения, применяемые регистры, время выполнения, размер памяти, нужный для программки и ее данных, также особые случаи, входные и выходные условия.
Любая подпрограмма изготовлена так общей, как это может быть.
Во всех подпрограммах был применен последующий способ передачи характеристик:
1-ый 8-разрядный параметр передается в аккуме, 2-ой 8-разрядный параметр- регистре В, а третий- в регистре С.
1-ый 16-разрядный параметр передается в регистрах Н и L, при всем этом старший б— в регистре Н. 2-ой 16-разрядный параметр передается в регистрах D и Е со старшим б в D.
Большее число характеристик передается в стеке, прямо либо косвенно. Считается, что вход в подпрограмму осуществляется при помощи команды CALL
, которая помещает адресок возврата в верхушку стека и, как следует, выше характеристик.
Для большинства маленьких подпрограмм было определено время выполнения.
Приведенная тут документация постоянно содержит по последней мере один типовой пример, показывающий ориентировочное либо наибольшее время выполнения.
Приводятся последующие подпрограммы:
* Преобразование двоичных данных в код BCD
;
* Преобразование данных в коде BCD
в двоичные;
* Преобразование двоичных данных в шестнадцатеричные в коде ASCII
;
* Преобразование шестнадцатеричных данных в коде ASCII
в двоичные;
* Преобразование двоичного числа в десятичное к коде ASCII
;
* Преобразование десятичного числа в коде ASCII
в двоичное;
* Трансляция строчных букв в строчные;
* Преобразование кода знака из системы ASCII
в систему EBCDIC
;
* Преобразование кода знака из системы EBCDIC
в систему ASCII
.
* Наполнение памяти;
* Пересылка блоков;
* Индексирование двухмерного массива байтов;
* Индексирование двухмерного массива слов;
* Индексирование N- мерного массива;
* 16- разрядное вычитание;
* 16- разрядное умножение;
* 16- разрядное деление;
* 16- разрядное сопоставление;
* Двоичное сложение с завышенной точностью;
* Двоичное вычитание с завышенной точностью;
* Двоичное умножение с завышенной точностью;
* Двоичное деление с завышенной точностью;
* Двоичное сопоставление с завышенной точностью;
* Десятичное сложение с завышенной точностью;
* Десятичное вычитание с завышенной точностью;
* Десятичное умножение с завышенной точностью;
* Десятичное деление с завышенной точностью;
* Десятичное сопоставление с завышенной точностью;
* установка разряда;
* Чистка разряда;
* Проверка разряда;
* Выделение поля разрядов;
* Запись поля разрядов;
* Арифметический сдвиг на Право с завышенной точностью;
* Логический сдвиг на лево с завышенной точностью;
* Логический сдвиг на Право с завышенной точностью;
* Повторяющийся сдвиг на Право с завышенной точностью;
* Повторяющийся сдвиг на лево с завышенной точностью;
* Сопоставление строк;
* Объединение строк;
* Поиск позиции подстроки;
* Копирование подстроки из строчки;
* Удаление подстроки из строчки;
* Вставка подстроки в строчку;
* Суммирование 8-разрядного массива;
* Суммирование 16-разрядного массива;
* Поиск малого элемента длиной 1 б;
* Поиск наибольшего элемента длиной 1 б;
* Двоичный поиск;
* Стремительная сортировка;
* тест ОЗУ;
* Таблица переходов;
* Чтение строчки с терминала;
* Запись строчки на устройство вывода;
* Проверка и генерация 16-разрядного кода контроля по избыточности;
* Диспетчер таблицы устройств ввода — вывода;
* инициализация портов ввода — вывода;
* Задержка в миллисекундах;
* Небуферизованный ввод — вывод о прерываниям с внедрением программируемого интерфейса связи 8251;
* Небуферизованный ввод — вывод о прерываниям с внедрением программируемого параллельного интерфейса 8255;
* Буферизованный ввод — вывод о прерываниям с внедрением программируемого интерфейса связи 8251;
* Часы настоящего времени и календарь
АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ
Вычитаются два 16-разрядных числа. При всем этом флаг переноса действует как заем.
. Просто из уменьшаемого вычитается вычитаемое по одному б за один раз, начиная с младших байтов. При вычитании старших байтов учитывается заем. При вычитании старших байтов инсталлируются флаги.
Множатся два 16-разрядных операнда и ворачивается младшее по значению слово (16-разрядное) произведения.
. Употребляется обыденный механизм сложения и сдвигов, при котором множимое добавляется к частичному произведению всякий раз, когда в множителе находится единичный разряд. Для правильного относительного расположения операндов и произведения в программке 15 раз осуществляется сдвиг на лево множителя и промежного произведения (т.е. на число разрядов в множителе минус один). При всем этом старший (16-й) разряд произведения пропадает.
Делятся два 16-разрядных операнда и ворачивается личное и остаток. Имеются две входные точки: SDIV16 разделяет два 16-разрядных операнда со знаками, в то время как USDIV16 разделяет два 16-разрядных операнда без символов. При делении на 0 флаг переноса устанавливается в 1, а личное и остаток равны 0; в неприятном случае флаг переноса очищается.
. Если операнды имеют знаки, то определяется символ личного и берутся абсолютные значения отрицательных операндов. Не считая того, должен сохраняться символ делимого, потому что он описывает символ остатка. Потом при помощи метода сдвигов и вычитания производится беззнаковое деление. Личное и делимое сдвигаются на лево, при всем этом всякий раз, когда пробное вычитание было удачным, единичный разряд помещается в личное. Если операнды имели знаки, то программка обязана перевоплотить в отрицательное число (т.е. отнять из 0) личное либо остаток, если лишь они должны быть отрицательными. При делении без ошибок флаг переноса очищается, а при делении на 0 — устанавливается. Не считая того, если делитель равен 0, то личное и остаток также равны 0.
Сравниваются два 16-разрядных операнда и подходящим образом инсталлируются флаги. Флаг нуля постоянно показывает, были ли операнды равны. Если операнды были беззнаковые, то флаг переноса показывает, какой из их больше (флаг переноса = 1, если вычитаемое больше, и 0 — в неприятном случае). Если операнды имеют знаки, то флаг знака показывает, какой из их больше (флаг знака равен 1, если вычитаемое больше, и 0 — в неприятном случае); при всем этом учитывается переполнение по дополнению до 2-ух, и если оно происходит, то флаг знака инвертируется.
. Поначалу проверяется, может ли произойти переполнение по дополнению да 2-ух. Это может быть лишь в том случае, если знаки операндов различаются. Если переполнение по дополнению до 2-ух может быть, то вычитается младший б вычитаемого из уменьшаемого. Если младшие байты равны, то инсталлируются то инсталлируются флаги по результату вычитания старших байтов. Если младшие байты не равны, до выхода должен очистится флаг нуля (при помощи логической операции ИЛИ с 1, но при постоянных других флагах). Если переполнение по дополнению до 2-ух может произойти, то устанавливается флаг знака по знаку уменьшаемого. Это производится при помощи загрузки в аккумулятор старшего б уменьшаемого перед установкой флага знака.
Складываются два многобайтовых двоичных числа. Числа хранятся в памяти таковым образом, что их самые младшие по значению байты занимают самые младшие адреса. Сумма подменяет 1-ое слагаемое.
. Поначалу очищается флаг переноса, а потом складываются операнды, по б за раз, начиная с самых младших по значению байтов. В конце флаг переноса отражает итог сложения самых старших байтов. Длина 0 вызывает незамедлительный выход без сложения.
Вычитаются два многобайтовых беззнаковых двоичных числа. Оба числа хранятся в памяти таковым образом что их самые младшие по значению байты занимают самые младшие адреса. Разность замещает уменьшаемое. Длина чисел равна 255 б либо меньше.
. Поначалу очищается флаг переноса, а потом рассчитываются операнды, по б за один раз, начиная с самых младших по значению байтов. В конце флаг переноса отражает итог вычитания самых старших байтов. Длина 0 вызывает незамедлительный выход без вычитания.
Двоичное умножение чисел с завышенной точностью
Множатся два многобайтовых беззнаковых двоичных числа. Оба числа хранятся в памяти таковым образом что их самые младшие по значению байты занимают самые младшие адреса. Произведение замещает множимое. Длина чисел равна 255 б либо меньше. Чтоб сохранялась сопоставимость с иными двоичными операциями завышенной точности, ворачиваются лишь младшие по значению байты произведения.
. Употребляется обыденный механизм сложения и сдвигов, при котором множимое добавляется к частичному произведению всякий раз, когда в множителе находится единичный разряд. Промежуточное произведение и множимое сдвигаются на число разрядов в множимом плюс один; этот доп цикл сдвигает окончательный флаг переноса в произведении. Полное беззнаковое промежуточное произведение двойной длины хранится в ячейках памяти и в множимом. Длина 0 вызывает незамедлительный выход без умножения.
Делятся два многобайтовых беззнаковых двоичных числа. Оба числа хранятся в памяти таковым образом что их самые младшие по значению байты занимают самые младшие адреса. Личное замещает делимое; адресок младшего по значению б остатка находится в регистрах H и L. Длина чисел равна 255 б либо меньше. Если нет ошибок, флаг переноса очищается; при попытке деления на ноль флаг переноса устанавливается в 1, делимое остается без конфигурации, а остаток равен 0.
. При помощи обыденного метода сдвигов и вычитания осуществляется деление, при всем этом двигается личное и делимое и 1 помещается в делимое всякий раз, когда вычитание удачно. Итог пробного вычитания хранится в доп буфере; если пробное вычитание удачно, то указатели этого буфера и буфера делимого просто переключаются (т.е. буферы изменяются местами). Если определяется, что делитель равен нулю, немедля осуществляется выход из программки и устанавливается флаг переноса. В неприятном случае флаг переноса очищается.
Двоичное сопоставление чисел с завышенной точностью
Сравниваются два многобайтовых беззнаковых двоичных числа и подходящим образом инсталлируются флаги. Флаг нуля постоянно показывает, были ли операнды равны. Если операнды были беззнаковые, то флаг переноса показывает, какой из их больше (флаг переноса = 1, если вычитаемое больше, и 0 — в неприятном случае). Флаг переноса устанавливается в 1, если вычитаемое больше уменьшаемого; в неприятном случае флаг переноса очищается. Таковым образом, флаги инсталлируются так же, как если б вычитаемое вычиталось из уменьшаемого.
. Сравниваются операнды побайтно, начиная с самых старших байтов и продолжая до того времени, пока не будут найдены неравные надлежащие байты. Если все байты равны, осуществляется выход с флагом нуля, установленном в 1. Заметим, что пи сопоставлении работа происходит с операндами, начиная с самых старших байтов, в то время как при вычитании — начиная с самых младших.
ЗАКЛЮЧЕНИЕ
Проанализировав представленную к рассмотрению книжку Ланс А. Левенталь, Уинтроп Сэйвилл
выделим плюсы данной публикации:
* материал изложен в отлично структурированной форме;
* создатели неоднократно повторяют некие части материала для наилучшего усвоения;
* книжка снабжена подробным указателем, словарем определений и приложениями.
К недочетам данной книжки можно отнести последующее:
* при написании
применялись обычные и общеизвестные методы вычислений;
* некие части описаний даны очень сжато и предусмотрены для программистов имеющих опыт в написании программ на языке ассемблера;
* отсутствует приложение с обобщающим описанием мнемоники установок и коротким пояснением выполняемых действий — нужное для программистов исходного уровня.
По нашей оценке книжка создана для опытнейших программистов, желающих получить сведения для использования процессоров 8080 либо 8085 в прикладных целях.
]]>