Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пособие_модуль_1 МПТ.doc
Скачиваний:
11
Добавлен:
12.02.2016
Размер:
985.09 Кб
Скачать

Формат описания

Последующий материал представляет собой детальное описание системы команд МП 8080. Каждая команда описывается следующим образом:

1. В начале первой строки полужирным шрифтом приводятся мнемокод операции и операнд команды по правилам языка ассемблера МАС 80.

2. Имя команды (раскрытие аббревиатуры) представляется в конце первой строки.

3. Следующая строка (строки) представляет собой символическое описание операции, выполняемой по данной команде.

4. В следующей строке (строках) содержится словесное описание операции, выполняемой по данной команде.

5. Следующая строка (строки) содержат двоичные коды и формат команды.

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

Группа команд пересылки

Группа команд пересылки реализует операции обмена данными между регистрами и памятью. Ни одна из команд данной группы не изменяет содержимое регистра признаков состояния.

Содержимое регистра r2 передать в регистр r1

Циклы : 1 Состояния:5 Адресация: регистровая Признаки : отсутствуют

MOV r, M (Move from memory) (r)←((H)(L))

Содержимое ячейки памяти, адрес которой содержится в регистрах H и L, передать в регистр r.

Команды пересылок

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

2. если источник или приемник данных в команде есть ячейка памяти М, то ее адрес всегда содержится в регистрах H и L блока РОН. Старший байт адреса всегда находится в регистре H, а младший – в регистре L.

Команда MOV

В командах MOV (move) в качестве источника и приемника данных могут быть использованы: регистр и ячейка памяти; ячейка памяти и регистр; регистр и другой регистр.

Пример 1. MOV A,B. Символ А обозначает аккумулятор, В – регистр блока РОН в МП. Это означает, что содержимое регистра В должно быть помещено в А. Прежнее содержимое А пропадает, после выполнения команды содержимое регистра В не изменяется и представляет собой просто копию содержимого А.

Пример 2. MOV M,D. M – это слово в памяти, а D – один из регистров МП. Эта команда означает, что содержимое регистра D должно быть передано в ячейку памяти, адрес которой указан в регистрах H и L.

Команды MOV однобайтные. Первые 2 бита – код операции (01), остальные 6 бит – адрес источника и приемника данных. В команде MOV M,D, биты 3-5 определяют, что приемником данных является ячейка памяти, адрес которой указан в регистрах H и L. Биты 6-8 задают в качестве источника данных регистр D.

Команда MVI

Команда MVI (MoVe Immediate) отличается от команды MOV тем, что в качестве источника данных используется 8-битная константа, которая следует непосредственно за кодом операции. Приемником данных может быть регистр или ячейка памяти.

Пример 3. MVI M,10111011В. по этой команде число 10111011 должно быть передано в ячейку памяти, адрес которой содержится в регистровой паре H,L. Буква В после кода 10111011 означает, что речь идет о двоичном числе. Константа может быть представлена в десятичной или шестнадцатеричной системе счисления. В этом случае буквы D или H нужно поместить непосредственно за числом, записанным в команде. Ассемблер преобразует это число в двоичный код.

Пример 4. MVI A,D. По этой команде буква D в коде ASCII будет помещена в А. Ассемблер переведет символ в двоичный код. Буква D в кавычках означает, что D – символ. Кавычки не следует забывать при написании программы, чтобы не перепутать с шестнадцатеричным числом.

Команда LDA

По команде LDA (Load Accumulator) в А загружается содержимое ячейки памяти, адрес которой следует за кодом операции.

Пример 5. LDA 2FFFH. Это означает, что содержимое ячейки памяти с адресом 2FFF16 должно быть передано в А. Команда LDA 3-байтная: 1 байт содержит код операции (LDA), а два других – адрес (2FFF16).

Команда LXI

Команда LXI (Load register pair Immediate) может быть использована для загрузки регистровых пар BC, DE или HL 16-битным числом ( за один цикл команды). Это число непосредственно следует за кодом операции. Команда LXI представляет собой разновидность команды MVI, которая оперирует с 8-битным числом.

Пример6. Загрузить в регистровую пару H,L число 3FF416.

Решение 1. MVI H,3FH

MVI L,F4H.

Решение 2 LXI H,3FF4H.

Команды OUT, IN

Данные команды обеспечивают обмен информацией с устройствами ввода-вывода (УВВ).

В команде OUT источником всегда является А.

В команде IN приемником всегда является А.

Пи этом необходимо, чтобы номер порта следовал непосредственно за кодом операции IN или OUT то есть в команде должен быт указан адрес УВВ, с которого должна приниматься или на который должна передаваться информация.

Пример 7. OUT 03H. Это означает, что содержимое А должно быть передано в выходной порт с номером 0316 .

Пример 8. IN 06H

MOV M,A.

В результате выполнения первой команды данные передаются из порта ввода 0616 в А. По второй команде они засылаются в память. Адрес ячейки памяти содержится в регистровой паре HL.

Команды арифметических операций

МП 8080 может выполнять только две арифметические операции: сложение, вычитание.

Команда ADD

МП 8080 является одноадресной машиной, поэтому один из операндов всегда помещается в А, который неявно адресуется самим кодом операции. За кодом операции указывается, где находится второй операнд. Результат помещается в А. Операнд, находящийся в А, в результате выполнения команды уничтожается.

Пример 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 с.:ил.