p align="left">50H 2-й байт 80H 3-й байт стековая адресация (адрес ячейки памяти, содержащей операнд, находится в указателе стека SP) PUSH PSW; ((SP)-1) (A), ((SP-2) (F), (SP) (SP)-2 F5H КОП - код операции записи в стек служебного слова.
6. Программирование на языке ассемблера Язык ассемблера допускает представление всех элементов программы в символической (буквенно-цифровой) форме, отражающей их содержательный смысл. В качестве алфавита допустимых символов принят код ASCII (американский стандартный код для обмена информацией). Каждая строка ассемблера соответствует одной команде или псевдокоманде (директиве) и может содержать поля метки, мнемоники команды, операнда и комментария. При наличии в программе синтаксических ошибок ассемблер в процессе трансляции выдает сообщения об ошибках. Метка ассоциируется с 16-битовым адресом той ячейки памяти, где будет размещен первый байт отмеченной команды. Использование меток освобождает программиста от необходимости оперировать абсолютными адресами памяти при записи команд передачи управления. Метка должна начинаться с буквы и заканчиваться двоеточием, может содержать до шести символов. Не допускается использовать в качестве меток ключевые слова (мнемоники команд и директив). Символическое обозначение должно быть уникальным (может появиться в поле метки только один раз). Мнемокод команды может включать до четырех символов и вместе с обозначениями операндов образует группу ключевых слов ассемблера. Поле операнда содержит числовые и символьные непосредственные данные, обозначения регистров и регистровых пар МП, адреса памяти. Возможно использование выражений, содержащих простейшие арифметические и логические операции, обработку которых ассемблер при трансляции производит в формате 16-разрядных двоичных чисел. Операнд в виде строки символов, заключенной в апострофы, транслируется в последовательность кодов ASCII этих символов. Поле комментария начинается с точки с запятой и полностью игнорируется ассемблером. В поле комментария фиксируется обычно функция, которую выполняет группа команд в конкретной прикладной программе. Кроме команд программа может содержать директивы ассемблера: ORG - начальный адрес массива, END - прекращение трансляции, EQU - эквивалентность (присвоение), DB - определить байт и тд. Команды микропроцессора серии К580 (i8080) |
Команда | N б | N т | Описание команды | Флаги | | Группа команд пересылки данных | | MOV r1,r2 | 1 | 5 | Пересылка данных из r2 в r1 | | | MOV М,r | 1 | 7 | Пересылка данных из r в память | | | MOV r,М | 1 | 7 | Пересылка данных из памяти в r | | | XCHG | 1 | 4 | Обмен данными между парами регистров HL и DL | | | MVI r,d8 | 2 | 7 | Занесение байта данных в регистр | | | MVI M,d8 | 2 | 10 | Занесение байта данных в память | | | LXI rp,d16 | 3 | 10 | Занесение двух байтов данных в пару регистров ( B,D,H,SP ) | | | LDAX rp | 1 | 7 | Занесение в А содержимого ячейки, косвенно адресуемой парой регистров (B или D) | | | LDA adr16 | 3 | 13 | Загрузка в А содержимого ячейки с указанным адресом | | | STAX rp | 1 | 7 | Занесение содержимого А в ячейку, косвенно адресуемую парой регистров (B или D) | | | STA adr16 | 3 | 13 | Занесение содержимого А в ячейку с указанным адресом | | | LHLD adr16 | 3 | 16 | Загрузка в регистры H, L содержимого ячеек с указанным адресом и адресом, на единицу большим | | | SHLD adr16 | 3 | 16 | Занесение содержимого регистров H,L в две ячейки памяти | | | Группа команд обработки данных | | ADD r | 1 | 4 | Сложение содержимого r и А | Z,S,P,C,AC | | ADD M | 1 | 7 | Сложение содержимого ячейки памяти и А | Z,S,P,C,AC | | ADС r | 1 | 4 | Сложение содержимого r и А с учетом переноса С | Z,S,P,C,AC | | ADС M | 1 | 7 | Сложение содержимого ячейки памяти и А с учетом переноса С | Z,S,P,C,AC | | DAA | 1 | 4 | Десятичная коррекция А | Z,S,P,C,AC | | Команда | N б | N т | Описание команды | Флаги | | SUB r | 1 | 4 | Вычитание содержимого r из A | Z,S,P,C,AC | | SUB M | 1 | 7 | Вычитание содержимого ячейки памяти из A | Z,S,P,C,AC | | SBB r | 1 | 4 | Вычитание содержимого r из A с заемом | Z,S,P,C,AC | | SUBB M | 1 | 7 | Вычитание содержимого ячейки памяти из A с заемом | Z,S,P,C,AC | | ANA r | 1 | 4 | Поразрядное «И» над содержимым r и A | Z,S,P,C=0, AC=0 | | ANA M | 1 | 7 | Поразрядное «И» над содержимым ячейки памяти и A | Z,S,P,C=0, AC=0 | | XRA r | 1 | 4 | Поразрядное «Исключающее ИЛИ» над содержимым r и A | Z,S,P,C=0, AC=0 | | XRA M | 1 | 7 | Поразрядное «Исключающее ИЛИ» над содержимым ячейки памяти и A | Z,S,P,C=0, AC=0 | | ORA r | 1 | 4 | Поразрядное «ИЛИ» над содержимым r и A | Z,S,P,C=0, AC=0 | | ORA M | 1 | 7 | Поразрядное «ИЛИ» над содержимым ячейки памяти и A | Z,S,P,C=0, AC=0 | | CMP r | 1 | 4 | Сравнение содержимого r и A | Z,S,P,C,AC | | CMP M | 1 | 7 | Сравнение содержимого ячейки памяти и A | Z,S,P,C,AC | | ADI d8 | 2 | 7 | Сложение байта и A | Z,S,P,C,AC | | ACI d8 | 2 | 7 | Сложение байта и A с учетом переноса | Z,S,P,C,AC | | SUI d8 | 2 | 7 | Вычитание байта из A | Z,S,P,C,AC | | SBI d8 | 2 | 7 | Вычитание байта из A с учетом переноса | Z,S,P,C,AC | | ANI d8 | 2 | 7 | Поразрядное «И» байта и A | Z,S,P,C=0, AC=0 | | XRI d8 | 2 | 7 | Поразрядное «исключающее ИЛИ» байта и A | Z,S,P,C=0, AC=0 | | Команда | N б | N т | Описание команды | Флаги | | ORI d8 | 2 | 7 | Поразрядное «ИЛИ» байта и A | Z,S,P,C=0, AC=0 | | CPI d8 | 2 | 7 | Сравнение содержимого A и байта | Z,S,P,C,AC | | DAD rp | 1 | 10 | Сложение содержимого пары HL и регистровых пар (B,D,H,SP) | Z,S,P,C,AC | | INR r | 1 | 5 | Увеличение содержимого r на 1 | Z,S,P,AC | | INR M | 1 | 10 | Увеличение содержимого ячейки памяти на 1 | Z,S,P,AC | | DCR r | 1 | 5 | Уменьшение содержимого r на 1 | Z,S,P,AC | | DCR M | 1 | 10 | Уменьшение содержимого ячейки памяти на 1 | Z,S,P,AC | | INX rp | 1 | 5 | Увеличение содержимого пары регистров на 1 | | | DCX rp | 1 | 5 | Уменьшение содержимого пары регистров на 1 | | | RLC | 1 | 4 | Циклический сдвиг A влево | C | | RRC | 1 | 4 | Циклический сдвиг A вправо | C | | RAL | 1 | 4 | Циклический сдвиг A влево через перенос | C | | RAR | 1 | 4 | Циклический сдвиг A вправо через перенос | C | | CMA | 1 | 4 | Поразрядное инвертирование A | | | STC | 1 | 4 | Установка признака переноса | C=1 | | CMC | 1 | 4 | Инвертирование флага переноса | C=C | | Группа команд управления ходом выполнения программы | | JMP adr16 | 3 | 10 | Безусловный переход по адресу | | | JC adr16 | 3 | 10 | Переход по адресу при наличии переноса | | | JNC adr16 | 3 | 10 | Переход по адресу при отсутствии переноса | | | JZ adr16 | 3 | 10 | Переход по адресу при нуле | | | JNZ adr16 | 3 | 10 | Переход по адресу при отсутствии нуля | | | JP adr16 | 3 | 10 | Переход по адресу при плюсе | | | Команда | N б | N т | Описание команды | Флаги | | JM adr16 | 3 | 10 | Переход по адресу при минусе | | | JPE adr16 | 3 | 10 | Переход по адресу при четности | | | JPO adr16 | 3 | 10 | Переход по адресу при нечетности | | | CALL adr16 | 3 | 17 | Вызов подпрограммы | | | CC adr16 | 3 | 11/17 | Вызов подпрограммы при переносе | | | CNC adr16 | 3 | 11/17 | Вызов подпрограммы при отсутствии переноса | | | CZ adr16 | 3 | 11/17 | Вызов подпрограммы при нуле | | | CNZ adr16 | 3 | 11/17 | Вызов подпрограммы при отсутствии нуля | | | CP adr16 | 3 | 11/17 | Вызов подпрограммы при плюсе | | | CM adr16 | 3 | 11/17 | Вызов подпрограммы при минусе | | | CPE adr16 | 3 | 11/17 | Вызов подпрограммы при четности | | | CPO adr16 | 3 | 11/17 | Вызов подпрограммы при нечетности | | | RET | 1 | 10 | Возврат | | | RC | 1 | 5/11 | Возврат при переносе | | | RNC | 1 | 5/11 | Возврат при отсутствии переноса | | | RZ | 1 | 5/11 | Возврат при нуле | | | RNZ | 1 | 5/11 | Возврат при отсутствии нуля | | | RP | 1 | 5/11 | Возврат при плюсе | | | RM | 1 | 5/11 | Возврат при минусе | | | RPE | 1 | 5/11 | Возврат при четности | | | RPO | 1 | 5/11 | Возврат при нечетности | | | RST N | 1 | 11 | Повторный запуск с адреса 8N | | | IN adr8 | 2 | 10 | Ввод данных из порта в A | | | OUT adr8 | 2 | 10 | Вывод данных в порт из A | | | PUSH rp | 1 | 11 | Занесение содержимого пары регистров (B,D,H,PSW) в стек | | | POP rp | 1 | 10 | Выдача данных из стека в пару регистров (B,D,H,PSW) | Z,S,P,C,AC | | | | | | | | Команда | N б | N т | Описание команды | Флаги | | XTHL | 1 | 18 | Обмен данными между вершиной стека и парой HL | | | SPHL | 1 | 5 | Занести в указатель стека содержимое регистровой пары HL | | | DI | 1 | 4 | Запретить прерывание | | | EI | 1 | 4 | Разрешить прерывание | | | NOP | 1 | 4 | Холостая операция | | | HLT | 1 | 7 | Останов | | | |
Примечание: Nб - число байт; Nт - число тактов; В знаменателе дроби указано число тактов на выполнение операции при выполнении условия, в числителе - при невыполнении. Рассмотрим примеры записи программ на языке ассемблера ASM80 (разработанного в соответствии с системой команд процессора i8080). 7. Программирование БИС параллельного интерфейса При программировании БИС в регистр РУС1 командой OUT 83H записывается управляющее слово, которое определяет один из трех режимов работы портов параллельного интерфейса: режим 0 - программно управляемый ввод/вывод данных в синхронном режиме по трем 8-разрядным каналам РА, РВ и PC. Каждый канал может быть использован только для ввода или вывода информации, а канал PC дополнительно может быть разделен на два 4-разрядных канала; режим 1 - обмен данными с ВУ по каналам РА и РВ в асинхронном режиме и режиме прерывания программы. Управляющие сигналы при этом передаются по каналу PC; режим 2 - двунаправленный обмен данными с ВУ по каналу РА в режиме прерывания программы. Каналу РC придается пять линий канала PC для передачи и приема управляющих сигналов. Канал РВ может быть при этом запрограммирован на работу в режимах 0 или 1. При программировании БИС используются два формата управляющего слова: первый предназначен для задания режимов работы и направления включения каналов, второй - для установки или сброса произвольного разряда канала PC. Признак формата содержится в старшем бите управляющего слова: 1 соответствует формату 1, а 0 -формату 2. В схеме, изображенной на рис.4, порты РА и РВ работают в режиме 0 и для программирования параллельного интерфейса нам понадобятся управляющие слова обоих форматов для режима 0. Управляющее слово первого формата: |
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | | 1 | 0 | 0 | PA | PC4-PC7 | 0 | PB | PC0-PC3 | | |
Логическая «1» в соответствующем разряде настраивает обозначенный канал на ввод, логический «0» - на вывод информации. Порт С позволяет производить независимую настройку полупортов на ввод-вывод в режиме 0. Управляющее слово второго формата: |
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | | 0 | Х | Х | Х | D3 | D2 | D1 | D0 | | |
В битах D6-D4 управляющего слова может быть произвольная информация. 8. Программирование таймера и контроллера прерываний Контроллер прерываний (КП) содержит регистры: запросов RGI, приоритетов RGB, обслуживания ISR и масок прерывания RGM. Запросы поступают на входы IR0-IR7 и устанавливают соответствующие разряды регистра запросов RGI. КП оценивает их приоритет и формирует запрос INT. Микропроцессор принимает INT, и если прерывания разрешены, то подтверждает прием выдачей флага INTA. КП устанавливает разряд ISR с наивысшим приоритетом, сбрасывает запрос в RGI и выдает на шину данных код команды CALL (0CDH). МП выдает еще два сигнала INTA, по которым КП выдает на ШД последовательно сначала младший, а затем старший байт адреса подпрограммы обслуживания прерываний. Установка КП в исходное состояние и настройка его на определенный режим работы по обслуживанию прерываний программируются двумя типами команд: командами инициализации ICW1, ICW2; командами управления режимом OCW1, OCW2, OCW3. Команды ICW загружаются по команде OUT с учетом разряда АО. ICW1 используется при формировании младшего байта адреса подпрограммы, ICW2 задает старший байт адреса: КП готов работать в режиме с фиксированными приоритетами запросов: IR0 - наивысший, IR7 - низший. Для задания других режимов в любой момент загружаются команды-приказы OCW (Operate Control Word): Mi=1 - запрет прерывания по i-му каналу. Сброс разряда регистра обслуживания ISR и циклический сдвиг приоритета. Записывается в подпрограмме обслуживания прерывания перед RET. Варианты приказа OCW2: 00100000 - сброс бита регистра обслуживания ISR с максимальным приоритетом; 10100000 - сброс бита ISR с максимальным приоритетом и назначение соответствующему входу низшего приоритета; 01100L2L1L0 - сброс бита ISR, определяемого полем L2L1L0; 11000L2L1L0 - назначение входу L2L1L0 низшего приоритета. Режим опроса, считывания состояния КП В режиме опроса КП принимает запросы на прерывание от внешних устройств и формирует слово состояния опроса (D2-D0), содержащее номер запроса с наивысшим приоритетом. Обслуживание запроса происходит по требованию программы. Программно слово-состояние считывается (командой IN при А0=0), декодируется и осуществляется переход к соответствующей подпрограмме обслуживания прерываний. Чтение регистра масок RGM осуществляется (командой IN при А0=1) без OCW3, регистра запроса RGI - после OCW3 с RIS=0. регистра обслуживания ISR - после OCW3 c RIS=1. Формат F в ICW1 задает адресный интервал между начальными адресами подпрограмм обслуживания прерываний. Например, после выполнения команд |
Код операции | Комментарий | | EI | | Разрешить прерывания | | MVI | A,36H | ICW1 - один КП, формат 4, A7A6A5=001 | | OUT | 88H | Адрес регистра управления КП при A0=0 | | MVI | A,0 | ICW2 (A15-A8=00000000) | | OUT | 89H | Адрес регистра управления КП при A0=1 | | |
Начальные адреса подпрограмм обслуживания прерываний будут иметь следующие значения: Программируемый интервальный таймер. Режимы работы программируемого таймера поясняют временные диаграммы (рис.6), на которых показаны сигналы на выходе OUT счетчика (это может быть СТО, СТ1 или СТ2) в каждом режиме, если при программировании в него загружено число N=4. |
CLK | | | | | | | | | | | | | | | | | Тактовые импульсы | | N = 4 | | WR | | | Конец программирования | | | | | GATE | | | Аппаратное разрешение | | | | NT | | | Режим 0 | | | | Программная задержка | | | | | | | Режим 1 | | | | Ждущий мультивибратор | | | | | | NT | | | Режим 2 | | | | | | | | | Генератор такт. импульсов | | | | | NT | | | Режим 3 | | | | | | | | | Генератор меандра | | | | NT | | | Режим 4 | | | | Программно-управл. строб | | | NT | | | Режим 5 | | | Аппаратно-управл. строб | | |
Рисунок 6 - Диаграммы режимов работы программируемого таймера Режим работы каждого счетчика задается записью в регистр управления таймера управляющего слова следующего формата (рис. 7): Затем осуществляется загрузка каждого счетчика одним или двумя информационными байтами. Таймеры работают на вычитание. Микропроцессор может прочитать текущее значение числа Ni в любом счетчике таймера либо непосредственно с помощью команды IN, либо предварительно защелкнув его в буферном регистре счетчика путем ввода в регистр управления слова с D5=D4=0.
Страницы: 1, 2
|