Реферат: Аналитический обзор книги Программирование на языке ассемблера - текст реферата. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Реферат

Аналитический обзор книги Программирование на языке ассемблера

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Реферат
Язык реферата: Русский
Дата добавления:   
 
Скачать
Microsoft Word, 511 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникального реферата

Узнайте стоимость написания уникальной работы

16 ВВЕДЕНИЕ Инте нсивное развитие микроэле ктроники и повышения степени интеграции откры ли новое направление в ВТ - создание микро процессоров и микрокомпьютеров . Появились вы числительные системы с малым уровнем потребле ния энергии и универсальными возможностями , к оторые п о зволяют решать задачи уп равления объектами различной физической природы . На основе их применения снижаются затрат ы на автоматизацию основных технических и вспомогательных процессов . В результате будет решена задача комплексной автоматизации прои зводства в о всех отраслях . Это п озволит увеличить производительность труда , умень шить себестоимость выпускаемой продукции и зн ачительно сократить ручные операции в промышл енности . Однако для широкого развития работ в данном направлении необходимо готовить з начительн о е число инженеров - системот ехников , умеющих создавать и применять микроп роцессоры и микрокомпьютеры . Кроме того , следу ет выпускать и много инженеров - математиков , разрабатывающих соответствующее программное обесп ечение . Для их обучения необходимо иметь учебные пособия , посвященные аппаратн ым и программным средствам современной вычисл ительной техники. Несмотря на то что выпущено значительное количество литературы , посвященной р азработке и применению микропроцессоров и мик рокомпьютеров , а также описание пр ограммн ых средств , предлагаемая книга представляет о пределенный интерес комплексным подходом и ме тодической целостностью. На обзор представлена книга американски х авторов Левенталя Л. и Сэйвилла У. "Программирование на языке ассемблер для микропроцессоров 8080 и 8085" . Книга переведена с английского , напечатана в 1987г . в издательстве Радио и связь . Издание включает в себ я 488 страниц. Для начала рассмотрим содержан ие этой книги чтобы сделать окончательный анализ по ее достоинствам и недостаткам , а также конкретизировать к какой гру ппе эта книга предназначена . На обзор крат ко будут представлены части этой книги , за тем остановим свое внимание на определенной главе. Книга состоит из двух частей : обзора вопросов программирования на языке ассемблер а и набора п одпрограмм . Первая часть хорошо проиллюстрирована большим числом прим еров , позволяющих быстро усвоить основные нав ыки программирования для рассматриваемых микропр оцессоров . Подпрограммы , приведенные во второй части книги , могут удовлетворять потребности б о льшинства программистов в станда ртных процедурах. Эта книга , можно сказать , я вляется как бы справочным пособием для пр ограммистов , работающих на языке ассемблера . О на содержит краткий обзор вопросов программир ования на языке ассемблера для конкретного микр опроцессора и набор полезных подпр ограмм . В этих подпрограммах использовались с тандартные соглашения по формату , документированн ому оформлению и методам передачи параметров . При этом соблюдались правила наиболее ра спространенных ассемблеров ; кроме того , о писаны назначение , процедура , параметры , ре зультаты , время выполнения и требования к памяти. ГЛАВА 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-разрядной парой регистров . Термины пара ре гистров В , регистры В и С и пара р егистров ВС имеют одно и тоже значение ; подобные же варианты существуют для регист ров D и Е и H и L . Заметим , что пара регистров и два одиночных регистра физически одно и то же , и они не могут служить однов ременно для различных целей . Регистры Н и L факти чески почти всегда применяют для косвенного адреса из-за наличия команд , имеющих дост уп к регистру М , и таких специальных к оманд , как 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. Нет флага переполнения при получении дополнения до двух , так что надо определять такое переполнение про граммным путем . Из этого следует , что труд но работать с числами со знаком. 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- разрядных адресов младший байт з аписывает ся первым (т.е . по меньшему адресу ). Порядок байтов в адресах тот же , что и в микропроцессоре Z 80 и 6502, но является обратным порядком байтов , принятому в микропроцессорах 6800 и 6809. · Указатель стека содер жит младший адрес , действительно зан ятый в стеке . Это соглашение также принято в микропроцессорах Z 80 и 6809, но явно противоположно при нятому 6502 и 6800 (следующий доступный адрес ). Соглас но всем командам 8080 и 8085 данные в стек за писываются с предварительным уменьшением на 1 ( вычитанием перед записью байта 1 из указа теля стека ) и загружаются из стека с п оследующим увеличением на 1 (добавлением после загрузки байта 1 к указателю стека ). · Флаг разрешения преры ваний (только в 8085), равный 1, разрешает прерывания , а 0 - запрещает их . Так ое же соглаше ние принято и в Z 80, но оно обратно принятому в 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 . ПРЕО БРАЗОВАНИЕ КОДОВ Данные могут быть преобразованы из одного кода в другой с помощью арифметических или логических операций (если соотношение к одов простое ) или с помощью поиска в т аблицах ( если это соотношение сложное ). АРИФ МЕТИЧЕСКИЕ ОПЕРАЦИИ ПОВЫШЕННОЙ ТОЧНОСТИ Арифме тические операции повышенной точности требуют ряда 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. НАПИСА НИЕ ПРОГРАММ , РАБОТАЮЩИХ ПО ПРЕРЫВАНИЯМ В б ольшинстве систем прерывания 8 080 и 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, умножение , деление , сравнение , полу чение дополнения до двух (отрицательного числ а ) и расширение . Для удобства те команды , принадлежность которых к конкретной категории неясна , повторяются во всех катег о риях , к которым они могли бы быть отнесены. ЛОГИЧЕСКИЕ К ОМАНДЫ Эта группа включает следующие команды : логическое И , ло гическое ИЛИ , логическое ИСКЛЮЧАЮЩЕЕ ИЛИ , логи ческое НЕ (дополнение ), сдвиг , циклический сдвиг и проверку . Она включает также те ари фмети ческие команды (такие , как сложение с аккумулятора с самим собой ), которые в ыполняют логические функции. КОМАНДЫ ПЕРЕ ДАЧИ ДАННЫХ Эта группа включает команды загрузки , запоминания , пересыл ки , обмена , ввода , вывода , очистки и установ ки . Кроме того , она вклю чает арифметич еские команды (такие как вычитание аккумулято ра из самого себя ), которые заносят опреде ленное значение или содержимое какого-либо ре гистра в аккумулятора или другой регистр назначения , не изменяя при этом данных. КОМАНДЫ ПЕРЕ ХОДА Эта группа включает следующие виды переходов : Команды безусловного перехода · Перейти косвенно ; · Перейти по индексу , п редполагая , что базовый адрес таблицы адресов находится в регистрах Н и 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 в двоичном числе или В в десятичном числе ); Неправильное значение (обычно это число , которое сл ишком велико для 8 или 16 разрядов ); Отсутствует операнд ; Двойное определе ние (одному и тому же имени присваиваются два различных значения ); Недопустимая метка (например , метка , пре дписанная псевдооперации , не допускающей метки ); Отсутс твие метки ( например , при псевдооперации EQU , для которой требуется метка ). Эти ошибки неприятны , но они легко исправимы . Единственна я трудность возникает тогда , когда ошибка (такая , как отсутствие точки с запятой у строки с комментарием ) приводит ассембл ер в "замешательство ", результатом чего являетс я ряд бессмысленных сообщений об ошибках. Существует , однако , много простых ошибок , которые ассемблер не может распознать . Прог раммисту следует иметь в виду , что его программа может содержать такие ошибки , даж е если ассемблер и не сообщил о них . Типичны следующие примеры. 1. Пропущенные строки. 2. Пропущенные определения. 3. Ошибки в написании , когда запись сама по себе допустима. 4. Обозначение команд к ак комментариев. 5. Если в команде , к оторая рабо тает с парой регистров , зад ается одинарный регистр. 6. Если вводится неправ ильная цифра , такая как Х в десятичном или шестнадцате ричном числе или 7 в двоичном числе. В ассемблере могут распознаваться только такие ошибки , к оторые предусмотрел его разработ чик . Прог раммисты же часто способны делать ошибки , которые разработчик не мог и вообразить , т акие ошибки возможно найти при проверке п рограмм вручную строчка за строчкой. РАСПРОСТРАНЕННЫЕ ОШИБКИ В ДРАЙВЕРАХ ВВОДА - ВЫВОДА Так как бол ьшинство ошибок в дра йверах ввода-вывода связано как с аппаратурным , так и с программным обеспечением , они трудно поддаются классификации . Приведем некоторые возможные случаи. Смешивание портов ввода и вывода. Попытка выполнить операции , которые физ ически невозможны. Упущенные из вида неявных эффектов аппаратуры. Чтение или запись без проверки сос тояния. Игнорирование различия между вводом и выводом. Ошибка при сохранении копии выводимых данных. Чтение данных до того , как они стабилизируются , или во время их изменен ия. Отсутствие изменения полярности данных , которые передаются к устройству или от устройства , работающего с отрицательной логикой . Смешивание действительных портов ввода-выво да с внутренними регистрами интегральных схем вв ода-вывода. Неправильное использование двунаправленных портов. Отсутствие очистки состояния после вып олнения команды ввода-вывода. РАСПРОСТРАНЕННЫЕ ОШИБКИ В ПРОГРАММАХ ПРЕРЫВАНИЯ Многие ошибки , связанные с прерываниями , зависят как от ап паратного , так и программного обеспеч ения . Самыми распространенными ошибками являются следующие. 1. Отсутствие разрешения п рерываний. 2. Отсутствие сохранения регистров. 3. Сохранение или восст ановление регистров в неправильном порядке. 4. Разрешени е преры ваний до инициализации приоритетов и других параметров системы прерываний. 5. Неучет того , что реакция на прерывание включает сохранение сче тчика команд в вершине стека. 6. Отсутствие запрещения прерываний во время многобайтных передач и ли выпол нения последовательности команд , которая не должна прерываться. 7. Отсутствие разрешения прерываний после последовательности команд , кот орая должна выполняться без прерываний. 8. Отсутствие очистки с игнала , вызывающего прерывание. 9. Ошибка в общении с основной программой. 10. Отсутствие сохранения и восстановления приоритетов. 11. Отсутствие разрешения прерываний от дополнительных аппаратурных вход ов , которое выполняется с помощью очистки разрядов масок в регистре I . 12. Неправильное использова ние разрядов разрешения прерываний в командах SIM . ВВЕДЕНИЕ В ПРОГРАММНЫЙ РАЗДЕЛ Программный раз дел содержит наборы подпрограмм на языке ассемблера для микропроцессоров 8080 и 8085. Каждой п одпрограмме предпосланы введение и комментарии ; за каждой подпрог раммой следует по крайней мере один пример ее использования . Введение содержит следующую информацию : назн ачение подпрограммы , процедуру ее выполнения , используемые регистры , время выполнения , размер памяти , необходимый для программы и ее данных , а также с п ециальные случаи , входные и выходные условия. Каждая подпрограмма сделана настолько общ ей , насколько это возможно. Во всех подпрограммах был использован следующий метод передачи параметров : Первый 8-разрядный параметр передается в аккумуляторе , второй 8-разрядный параметр - регистре В , а третий - в регистре С. Первый 16-разрядный параметр передается в регистрах Н и L , при этом старший байт - в регистре Н . Второй 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 - в противн ом случае ); при этом учитывается переполнение по дополнению до двух , и если оно происходит , то флаг знака инвертируется. Процедура . Снач ала проверяется , может ли произойти переполне ние по дополнению да двух . Это возможно только в том случае , если знаки оп ерандов различаются . Если переполнение по доп олнению до двух возможно , то вычитается мл адший байт вычитаемого из уменьшаемого . Если младшие байты равны , то устанавливаются т о устанавливаются флаги по результату вычитан ия старши х байтов . Если младшие байты не равны , перед выходом должен очист ится флаг нуля (с помощью логической опера ции ИЛИ с 1, но при неизменных остальных флагах ). Если переполнение по дополнению до двух может произойти , то устанавливается флаг знака по знаку ум е ньшаемого . Это выполняется с помощью загрузки в аккумулятор старшего байта уменьшаемого перед установкой флага знака. Двоичное сложение чисел с повышенной точностью Склады ваются два многобайтовых двоичных числа . Числ а хранятся в памяти таким образом , ч то их самые младшие по значению б айты занимают самые младшие адреса . Сумма заменяет первое слагаемое. Процедура . Снач ала очищается флаг переноса , а затем склад ываются операнды , по байту за раз , начиная с самых младших по значению байтов . В конце флаг перен оса отражает результ ат сложения самых старших байтов . Длина 0 в ызывает немедленный выход без сложения. Двоичное вычитание чисел с повышенной точностью Вычита ются два многобайтовых беззнаковых двоичных ч исла . Оба числа хранятся в памяти таким образом чт о их самые младшие по значению байты занимают самые младшие адре са . Разность замещает уменьшаемое . Длина чисел равна 255 байт или меньше. Процедура . Снач ала очищается флаг переноса , а затем вычис ляются операнды , по байту за один раз , начиная с самых младши х по значению байтов . В конце флаг переноса отражает результат вычитания самых старших байтов . Дли на 0 вызывает немедленный выход без вычитания . Двоичное умножение чисел с повышенной точностью Умножа ются два многобайтовых беззнаковых двоичных ч исла . О ба числа хранятся в памяти таким образом что их самые младшие по значению байты занимают самые младшие адре са . Произведение замещает множимое . Длина чисе л равна 255 байт или меньше . Чтобы сохранялас ь совместимость с другими двоичными операциям и повышенной точности , возвращаются то лько младшие по значению байты произведения. Процедура . Испо льзуется обычный механизм сложения и сдвигов , при котором множимое добавляется к части чному произведению каждый раз , когда в мно жителе находится единичный разряд . Промежут очное произведение и множимое сдвигаются на число разрядов в множимом плюс од ин ; этот дополнительный цикл сдвигает окончат ельный флаг переноса в произведении . Полное беззнаковое промежуточное произведение двойной длины хранится в ячейках памяти и в множим о м . Длина 0 вызывает немедленн ый выход без умножения. Двоичное деление чисел повышенной точност и Делятс я два многобайтовых беззнаковых двоичных числ а . Оба числа хранятся в памяти таким о бразом что их самые младшие по значению байты занимают самые младши е адреса . Частное замещает делимое ; адрес младшего по значению байта остатка находится в регис трах H и L . Длина чисел равна 255 байт или меньше . Если нет ошибок , флаг переноса очищается ; при попы тке деления на ноль флаг переноса устанав ливается в 1, делимо е остается без изме нения , а остаток равен 0. Процедура . С помощью обычного алгоритма сдвигов и вычит ания осуществляется деление , при этом сдвигае тся частное и делимое и 1 помещается в делимое каждый раз , когда вычитание успешно . Результат пробного вычитани я хранится в дополнительном буфере ; если пробное вычитан ие успешно , то указатели этого буфера и буфера делимого просто переключаются (т.е . б уферы меняются местами ). Если определяется , что делитель равен нулю , немедленно осуществляет ся выход из программы и устанавлив ается флаг переноса . В противном случае фл аг переноса очищается. Двоичное сравнение чисел с повышенной точностью Сравниваются два многобайтовых беззнаковых двоичных числа и соответствующим образом устанавливаются флаги . Флаг нуля всегда указы вает , были ли операнды равны . Если операнды были безз наковые , то флаг переноса указывает , какой из них больше (флаг переноса = 1, если вычита емое больше , и 0 - в противном случае ). Флаг переноса устанавливается в 1, если вычитаемое больше уменьшаемого ; в п ротивном случае флаг переноса очищается . Таким образом , флаги устанавливаются так же , как если бы вычитаемое вычиталось из уменьшаемого. Процедура . Срав ниваются операнды побайтно , начиная с самых старших байтов и продолжая до тех пор , пока не будут найдены неравные соо тветствующие байты . Если все байты равны , осуществляется выход с флагом нуля , установле нном в 1. Заметим , что пи сравнении работа происходит с операндами , начиная с самых старших байтов , в то время как при вычитании - начиная с самых младших. ЗАКЛЮЧЕНИЕ Проанализировав представленную к рассмотрению книгу Ланс А . Левенталь , Уинтроп Сэйвилл "Программирование на языке ассемблера д ля микропроцессора 8080 и 8085" выдели м достоинства данной публикации : * материал изложен в хорошо структурированно й форме ; * авторы многократно по вторяют некоторые части материала для лучшего усвоения ; * книга снабжена подроб ным указателем , словарем терминов и приложени ями. К недостаткам данной книги можно отнести следую щее : * при написании Программного раздела применялись стандартные и общеизвестные а лгоритмы вычислений ; * некоторые части описа ний даны слишком сжато и предназначены дл я программистов имеющих опыт в написании программ на языке ассемблера ; * отсутствует приложение с обобщающим описанием мнемони ки коман д и кратким пояснением выполняемых действий - необходимое для программистов начального ур овня. По нашей оценке книга предназначена для опытных програ ммистов , желающих получить сведения для испол ьзования микропроцессоров 8080 или 8085 в прикладных ц елях.
1Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
- Рабинович, к сожалению, мы не можем повысить вам зарплату.
- Ой, я таки и не прошу повысить. Но хотя бы чаще платить её вы можете?
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

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

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru