Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

ВАЖНО!!! Все пиццы подаются на горячих тарелках (приблизительно 80 оС) !!! Это делается для того, чтобы на столе у гостей пицца как можно дольше сохраняла температуру. 6 страница




Пример 9. ADD H. Данная команда означает, что содержимое регистра H должно быть просуммировано с содержимым А. Сумма помещается в А.

Пример 10. ADD M. Содержимое ячейки памяти, адрес которой находится в регистровой паре HL, должно быть просуммировано с содержимым А. Результат помещается в А.

Пример 11. Сложить два числа 1210 и 8410 и поместить результат в ячейку памяти с адресом 2AA316.

Решение. MVI A, 12

MVI B, 84

ADD B

LXI H, 2AA3H

MOV M, A

 

Команда ADC

Команда ADC (Add with Carry) является разновидностью команды ADD. По команде ADC происходит не только сложение двух операндов, но и сложение с признаком переноса, оставшимся от предыдущей операции; результат сохраняется в А.

Пример 12. ADC M. Содержимое ячейка памяти, адрес которой записан в регистровой паре HL, и содержимое признака переноса должно быть просуммировано с содержимым А.

Пример 13. ADI 16D. Десятичное число 16 складывается с содержимым А. Сумма помещается в А.

Пример ACI по этой команде складывается непосредственный операнд с содержимым А и с признаком переноса.

 

 

Команда INR.

Команда INR (INcRement) является разновидностью команды ADD. По этой команде МП увеличивает на 1 содержимое одного из регистров блока РОН, аккумулятора или ячейки памяти.

Пример 14. INR C. Содержимое регистра С должно быть увеличено на 1.

 

Команда SUB

Команда SUB позволяет МП непосредственно содержимое одного из регистров блока РОН или содержимое ячейки памяти из содержимого А. Производится суммирование уменьшаемого с вычитаемым в дополнительном коде. Результат операции помещается В А.

 

Команды SBB, SUI, SBI

Команда SUB имеет следующие разновидности:

SBB = SuBtract with Borrow (вычитание с займом)

SUI = Subtract Immediate with Borrow (вычитание непосредственного операнда)

SBI = Subtract Immediate with Borrow (вычитание непосредственного операнда с займом)

 

Команда DCR

Эта команда применяется для уменьшения содержимого одного из регистров блока РОН, А или ячейки памяти на 1.

 

Команды логических операций.

Эти команды предназначены для выполнения логических операций И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ, занесение в А обратного кода числа, сравнение двух чисел, сдвиг содержимого А вправо или влево.

 

Команда ANA

Команда ANA (And with Accumulator) используется для операции логического И над содержимым одного из регистров блока РОН или ячейки памяти и содержимым А.

Пример 15. ANA M. Содержимое ячейки памяти, адрес которой находится в регистрах H и L, участвуют в операции логического И вместе с содержимым А. Результат операции засылается в А.

 

Команда ORA

Команда ORA (OR with Accumulator) используется для выполнения операции логического ИЛИ над содержимым одного из регистров блока РОН или ячейки памяти М и содержимым А.

 

Команда XRA

Команда XRA (eXclusive oR with Accumulator) используется для выполнения операции ИСКЛЮЧАЮЩЕЕ ИЛИ над содержимым одного из регистров блока РОН или ячейки памяти и содержимым аккумулятора.

Команды ANA, ORA и XRA также имеют модификации, оперирующие с непосредственным операндом. Содержимое А участвует в операции вместе с числом, следующим за командой. Эти команды имеют следующие мнемокоды: ANI, ORI и XRI соответственно.

 

Команда CMA

Команда CMA (CoMplement Accumulator) используется для того, чтобы получить обратный код содержимого А. если хотим получить обратный код числа, находящегося в одном из регистров РОН или в ячейке памяти, то прежде всего нужно поместить это число в А.

 

Команда CMP

Команда CMP (CoMPare) используется для сравнения двух чисел. Одно из чисел всегда помещается в А. При сравнении одно из числе вычитается из другого и результат проверяется на нуль и знак: положительный или отрицательный. Проверяется содержимое признаков переноса и нуля.

Разница между командами CMP и SUB заключается в том, что при выполнении команды CMP результат операции не фиксируется в А. Его содержимое остается неизменным.

Разновидностью команды CMP является команда CPI (ComPare Immediate). По этой команде содержимое А сравнивается с числом, следующим непосредственно за кодом операции.

 

Команда RLC

По команде RLC (Rotate Left in Carry) содержимое А циклически сдвигается влево на один разряд. Другими словами, все разряды перемещаются влево на одну позицию. При этом восьмой бит перемещаются в разряд признака переноса и в разряд b0..

 

Если необходимо выполнить операцию сдвига над содержимым ячейки памяти или содержимым одного из регистров РОН, то необходимо прежде всего поместить его в А, а затем выполнять операцию сдвига.

 

Команда RAL

Команда RAL (Rotate Accumulator Left) используется для циклического сдвига влево содержимого А на один разряд. Восьмой разряд (b7) перемещается в разряд переноса.

 

Команда RRC и RAR

По команде RRC (Rotate accumulator Right in Carry) содержимое А циклически сдвигается на один разряд вправо. Содержимое разряда b0 поступает в разряд переноса и в разряд b7 А.

 

По команде RAR (Rotate Accumulator Right through carry) содержимое А циклически сдвигается вправо на один разряд. Значение разряда b0 поступает в разряд переноса. Прежнее содержимое разряда переноса поступает в разряд b7.

 

 

Команды передачи управления

В некоторых случаях появляется необходимость изменения выполнения последовательности команд. Эта последовательность может быть прервана одной из команд передачи управления, которая содержит в себе адрес команды, которая должна быть выполнена следующей. Команды передачи управления бывают безусловными и условными.

По командам безусловной передачи управления выполняется переход по программе к адресу, который указывается в команде.

По команде условной передачи управления переход по программе осуществляется только при условии, что содержимое одного из разрядов регистров признаков соответствует определенному условию.

Эти команды определяют, какое состояние разряда регистра признаков отвечает этому условию (0 или1).

Если это условие не выполняется, переход не может быть осуществлен, и программа продолжает выполняться в соответствии с командой, следующей за командой передачи управления.

Команда условной передачи управления имеет модификации по следующим признакам регистра признаков: ЗНАК, НУЛЬ, ПАРИТЕТ, ПЕРЕНОС.

 

Команда JC

Команда JC (Jump on Carry) осуществляется переход по программе только в том случае, когда в результате выполнения предыдущей операции имеет место переполнение; если признак переноса установлен в 1.

 

Команда JNC

По команде JNC (Jump No Carry) выполняется переход только в том случае, если содержимое разряда переноса регистра признаков равно 0.

 

Команды JZ, JNZ

Команды JZ (Jump on Zero) – команда условного перехода, которая выполняется только в том случае, когда результат выполнения предыдущей операции нулевой, то есть если признак НУЛЬ в регистре признаков имеет значение 1.

Команда JNZ (Jump on No Zero) выполняется только при ненулевом результате, то есть если признак НУЛЬ регистра признаков имеет значение 0.

 

Команда JM, JP

Команда JM (Jump on Minus) выполняется только в том случае, когда результат выполнения предыдущей операции является отрицательным числом, т.е. если содержимое разряда ЗНАК регистра признаков равно 1.

Команда ОЗ (Jump on Positive) выполняется только в том случае, когда результат выполнения предыдущей операции является положительным числом, т.е. если содержимое разряда ЗНАК регистра признаков равно 0.

 

Команда JPE

Команда JPE (Jump on Parity Even) выполняется только в том случае, когда двоичный код результата предыдущей операции содержит четное число единиц.

 

Команда JPO

Команда JPO (Jump on parity Odd) выполняется только в том случае, когда двоичный код результата предыдущей операции содержит нечетное число единиц.

 

Команды CALL и RET

Данные команды также являются командами перехода и условия их выполнения известны. Данные команды выполняются для вызова подпрограмм и возврата из подпрограмм.

 

Специальные команды

Специальные команды не передают т не обрабатыват информацию, но они используются для управления работой МП.

 

Команда HLT

По этой команде (HLT (Halt)) останавливается текущая программа до тех пор, пока не появится запрос прерывания от устройства ввода/вывода.

 

Команды DI, EI

Данные команды являются командами управления прерываниями. По команде DI (Disable Interrupt) МП игнорирует запросы прерывания до тех пор, пока не поступит команда EI (Enable Interrupt).

 

 

СИНТАКСИС И ПОДПРОГРАММЫ

Одним из языков написания программ для 8-разрядных процессоров является машинно-ориентированный язык Ассемблер, который позволяет писать текст программы без использования двоичных чисел, заменяя их мнемокодами команд, и в то же время обеспечивает оптимальную по объему программу. Так как язык Ассемблера ориентирован на конкретную микро-ЭВМ, использующую конкретный тип МП, то разные ЭВМ отличны друг от друга и языки ассемблера для них будут различны. Эти различия относятся к терминам, используемым в командах, и способах адресации операндов. Язык Ассемблера должен соответствовать специфическим особенностям МП. Одно- и двухадресные ЭВМ имеют большую разницу.

Эти различия приводят к тому, что программу нужно писать на языке ассемблера для данного МП. Программа трансляции исходного текста программы в объектную должна также соответствовать типу процессора.

 

Синтаксис

Несмотря на то, что мнемокоды команд для разных ЭВМ отличны, конструкция записи команд ассемблера практически одинакова для всех ассемблеров. Структура записи команд может быть разделена на четыре части, называемые полями.

 

МЕТКА ОПЕРАЦИЯ ОПЕРАНД КОММЕНТАРИЙ

 

В поле метка указывается символическое имя, называемой меткой, которое присваивается адресу перехода. Метка записывается в поле метка. В этом поле кроме метки ничего не записывается. При необходимости перехода к метке, метка ставится после мнемокода операции перехода на месте операнда. Ассемблер в процессе трансляции заменяет метку соответствующим адресом.

В поле операция записывается код операции, который принят в данном ассемблере. Это аббревиатура полного названия операции.

В поле операнда записываются данные, которые участвуют в выполнении данной операции. В зависимости от типа команды поле операнда может содержать операнд, адрес операнда, адрес операнда и операнд, адреса двух операндов. Если заданы два операнда, то они должны быть разделены запятой.

Написанная программа может быть введена в память ЭВМ с пульта управления. В этом случае программист определяет адреса самостоятельно. Затем вводит адреса и команды в двоичным кодах с помощью переключателей. Поэтому необходимо все коды перевести в двоичные числа.

Ввод программы с помощью ассемблера предполагает, что действительные адреса не нужно. Ассемблер вычисляет адреса и ставит им в соответствие последовательности команд. Необходимо только указать ассемблеру адрес первого байта первой команды программы. Так как адреса определяет ассемблер, то можно задавать в команде символические адреса.

В поле комментария указываются пояснения команды. Это поле используется для удобства чтения программы и полностью игнорируется ассемблером в процессе трансляции.

При наборе команд ассемблера следует придерживаться следующих правил.

Для каждой команды должна резервироваться одна строчка. Необходимо нажимать на клавишу ВВОД (ENTER) в конце каждой команды.

Поля команды ассемблера разделяются одним или несколькими пробелами. Эти пробелы выполняются так, чтобы соответствующие поля всегда находились одно над другим и более четко выделялись в тексте программы.

Если метка отсутствует, то первое поле остается пустым.

В некоторых ассемблерах после метки ставится двоеточие. Метка не должна начинаться с цифры, не должна быть такой же, как команда ассемблера.

Поле комментария должно начинаться с точки с запятой.

 

Директивы ассемблера

Директивы ассемблера предназначены для того, чтобы программист имел возможность давать указания ассемблеру, как поступать в тех или иных случаях. Например, откуда должна начинаться программа, где должна заканчиваться и т.д. Директива ассемблера не отображается машинным кодов в объектной программе, а является просто указанием ассемблеру.

Директива ORG (origin – начало) задает ассемблеру адрес ячейки памяти для первой команды транслируемой программы. Директива ORG 0400H обеспечивает размещение по адресу 040016 первой команды программы.

Директива EQU (equate – приравнять) используется, когда при написании программы некоторому символическому имени ставится в соответствие определенный операнд.

Директива END – конец используется для указания того, что исходная программа закончилась.

 

Подпрограммы

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

Команда вызова подпрограммы CALL состоит из 3 байт: 1 байт – для кода операции и 2 байта для указания адреса первой команды подпрограммы. Этот адрес задается символическим именем. Кроме этого, по команде выполняются действия, необходимые для возвращения в основную программу после выполнения подпрограммы:
- в счетчике команд фиксируется адрес команды в основной программе, которая следует за командой вызова;
- содержимое счетчика команд (адрес возврата) загружается в стек; содержимое указателя стека модифицируется;
- счетчик команд загружается адрес, задаваемый командой вызова.

После этого начинается выполнение подпрограммы.

Команда возврата из подпрограммы RET (return – возврат) является последней командой подпрограммы. По этой команде выполняется возврат к главной программе, подготовленной командой вызова. Команда возврата содержит только код операции. По этой команде происходит следующее:

- счетчик команд получает из стека адрес команды в основной программе, следующей за командой вызова;
- содержимое указателя стека соответственно модифицируется.

 

Команды управления стеком

Иногда при выполнении подпрограмм требуется использовать один или несколько регистров общего назначения МП. Но в этих регистрах может находиться информация, которая потребуется далее основной программе. Для сохранения этих данных их необходимо поместить в стек до начала выполнения подпрограммы. Для этого применяется команда PUSH (поместить в стек). Команда POP (вытолкнуть из стека) используется для возврата данных в регистры после выполнения подпрограммы. Команды PUSH и POP всегда оперируют с парой регистров BC, DE, HL; аккумулятором и регистром признаков.

Содержимое аккумулятора и регистра признаков вместе образуют так называемой слово состояния программы PSW (Program Status Word).

Слова в стеке являются 8-разрядными, так как стек является частью общей памяти, отведенной для выполнения стековых операций. Поэтому, чтобы поместить в стек содержимое пары регистров (16 разрядов), требуется два этапа; при этом указатель стека указывает на последний адрес в стеке, по которому были помещены данные (в некоторых МП указатель стека показывает первую свободную ячейку в стеке).

По команде ПОМЕСТИТЬ В СТЕК выполняются следующие действия:
- содержимое указателя стека сначала декрементируется;
- первые 8 бит загружаются в стек;
- содержимое указателя стека вновь декрементируется;
- последующие 8 бит загружаются в стек;

По команде ВЫТОЛКНУТЬ ИЗ СТЕКА выполняются обратные действия. Сначала второй байт выводится из стека в МП и содержимое указателя стека инкрементируется. Затем первый байт передается из стека в МП, и указатель стека вновь инкрементируется.

При операциях со стеком до начала выполнения рабочей программы необходимо дать информацию микро-ЭВМ относительно области памяти, отведенной для стека. Другими словами, необходимо загрузить в указатель стека наибольший адрес стека плюс 1 (указатель стека декрементируется перед загрузкой данных в стек.


 



Литература.

1. Микр-ЭВМ /Пер.с англ. под ред. А.Дирксена.-М.:Энергоиздат, 1982. 328с., ил.

2. Гибсон Г., Лю Ю-Ч. Аппаратные и программные средства микро-ЭВМ.-М.:
Финансы и статистика, 1983.-255 с.,ил.

3. Предко М. Справочник по PIC-микроконтроллерам: Пер. с англ.-М.: ДМК Пресс, 2004-512 с.:ил.

4. Однокристальные 8-разрядные FLASH CMOS микроконтроллеры компании Microchip Technology Incorporated. –техническая документация на микроконтроллеры PIC16F873, PIC16F874, PIC16F876, PIC16F877 –М.:
ООО "Микро-Чип", 2002 г.-170 с.,ил.

5. В.Л.Григорьев. Микропроцессор i486. Архитектура и программирование (в 4-х книгах).-М., ГРАНАЛ, 1993.-с.346, ил.87.

6. Руководство по архитектуре IBM PC AT/Ж.К.Голенкова, А.В.Заболоцкий, М.Л.Марсахин и др.; Под общ.ред. М.Л.Марсахина.-Мн.:ООО"Консул", 1992.-949 с.:ил.

 

 

 




Поделиться с друзьями:


Дата добавления: 2014-12-28; Просмотров: 344; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.