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

Реферат

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

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

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

закрыть
Категория: Реферат
Язык реферата: Русский
Дата добавления:   
 
Скачать
Microsoft Word, 511 kb, скачать бесплатно
Обойти Антиплагиат
Повысьте уникальность файла до 80-100% здесь.
Промокод referatbank - cкидка 20%!
Заказать
Узнать стоимость написания уникального реферата

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

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Экономическая теория

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

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

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

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


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