У вас вопросы?
У нас ответы:) SamZan.net

основы микропроцессорной техники

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 26.12.2024

PAGE   \* MERGEFORMAT 75

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

Федеральное государственное образовательное учреждение

высшего профессионального образования

«Сибирский федеральный университет»

Авторы:

Рыбин А. А.

Основы микропроцессорной техники

(название дисциплины0

Учебное пособие по циклу лабораторных работ

Красноярск

2010

В учебном пособии представлены методические материалы посвящённые практическому изучению основ программирования микропроцессорных устройств. Рассмотрены приёмы и способы разработки программ на языке ассемблер. Охвачен круг задач программирования микропроцессора 8080.

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


ОГЛАВЛЕНИЕ

[1] ВВЕДЕНИЕ

[2] 1. Система команд микропроцессора 8080

[3] Представление команд в числовой форме

[4] Мнемоническое представление команд

[4.0.1] Ассемблер

[4.0.2] Директивы Ассемблера процессора 8080

[5] Методы адресации операндов команд

[6] Биты признаков

[7] Общее представление команд

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

[8.0.1] Однобайтные пересылки

[8.0.2] Двухбайтные пересылки

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

[9.0.1] Команды безусловных переходов

[9.0.2] Команды условных переходов

[10] Команды организации подпрограмм

[10.0.1] Команды безусловных вызовов и возврата

[10.0.2] Команды условных вызовов и возврата

[11] Команды арифметических, логических и сдвиговых операций

[11.0.1] Команды сложения

[11.0.2] Команды вычитания

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

[11.0.4] Команды сравнения

[11.0.5] Команды сдвига

[11.0.6] Специальные арифметическо-логические команды

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

[13] Команды ввода, вывода и управления состоянием процессора

[13.0.1] Команды ввода и вывода

[13.0.2] Команды управления прерываниями

[13.0.3] Команда перевода процессора в состояние останова

[13.0.4] Команда NOP

[14] 2. Программирование процессора 8080

[15] Лабораторная работа № 1.1

[15.0.1] Краткие сведения из теории

[15.0.1.1] Назначение УМК-80

[15.0.1.2] Структура  УМК-80 и распределения адресного пространства

[15.0.1.3] Управление микро-ЭВМ средствами Монитора

[15.0.1.4] Вычисление контрольной суммы массива

[15.0.1.5] Пошаговые режимы выполнения программы

[15.0.2] Порядок выполнения работы

[15.0.2.1] Заполнение памяти средствами Монитора

[15.0.2.2] Определение исходного положения области стека

[15.0.2.3] Ввод программы средствами Монитора

[15.0.2.4] Запуск программы средствами Монитора без точек останова

[15.0.2.5] Приёмы отладки программы с применением точек останова

[15.0.2.6] Приёмы отладки программы с применением пошагового режима

[15.0.3] Содержание отчёта

[15.0.4] Контрольные вопросы

[16] Лабораторная работа № 1.2

[16.0.1] Краткие сведения из теории

[16.0.1.1] Назначение УМПК-80

[16.0.1.2] Структура  УМПК-80 и распределения адресного пространства

[16.0.1.3] Управление микро-ЭВМ средствами Монитора

[16.0.1.4] Тестирование микро-ЭВМ и начальная установка

[16.0.2] Порядок выполнения работы

[16.0.2.1] Исследование порядка включения УМПК-80

[16.0.2.2] Исследование содержимого памяти

[16.0.2.3] Запись числа в память УМПК-80

[16.0.2.4] Запись числа в программно-доступные регистры

[16.0.2.5] Запуск программы

[16.0.2.6] Контроль выполнения команд программы

[16.0.3] Содержание отчёта

[16.0.4] Контрольные вопросы

[17] Лабораторная работа № 2

[17.0.1] Краткие сведения из теории

[17.0.1.1] Типы команд

[17.0.1.2] Форматы команд

[17.0.1.3] Способы адресации операндов

[17.0.1.4] Признаки результатов операций

[17.0.1.5] Представление программы

[17.0.2] Порядок выполнения работы

[17.0.2.1] Исследование отдельных команд арифметических и логических операций

[17.0.2.2] Исследование команд пересылок и способов адресации операндов

[17.0.2.3] Исследование команд арифметического сложения

[17.0.2.4] Исследование операций сравнения однобайтных чисел

[17.0.3] Содержание отчёта

[17.0.4] Контрольные вопросы

[18] Библиографический список


ВВЕДЕНИЕ

Настоящее учебное пособие по циклу лабораторных работ построено на  базе теоретического курса. В нём подробно представлена архитектура микропроцессора 8080, дана структурная схема, описаны его состояния и типовые машинные циклы.

Для лучшего освоения  особенностей программирования интерфейсных микросхем, которым посвящены лабораторные работы раздела 3, в курсе лекций можно найти информацию об общих принципах построения механизма прерываний микро-ЭВМ, об организации временных задержек, о способах организации обмена с внешними устройствами. Там также более подробно представлены микросхемы типовых интерфейсов (контроллер прерываний 8259, таймер 8253, параллельный интерфейс 8255).

В курсе лекций более подробно рассмотрен микроконтроллер семейства MCS-51, который программируется в лабораторных работах раздела 4. Даны архитектурные особенности микроконтроллера, описание системы команд, механизма прерываний, средств связи и др. Этот материал поможет при выполнении соответствующих лабораторных работ.

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

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

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

Имеется (Internet) много бесплатных программ симуляторов микропроцессора 8080 или родственных с ним процессоров 8085 или Z80. Рекомендуется их применять на первых этапах обучения программированию. С их помощью можно работать с программами лабораторных работ № 2 и № 3.

Для программирования в симуляторе микроконтроллера семейства MCS-51 можно использовать симулятор, поставляемый вместе с эмулятором в составе  учебно-отладочного комплекса. Он не пригоден для работы № 11.


1. Система команд микропроцессора 8080

Представление команд в числовой форме

Команды хранятся в основной памяти микро-ЭВМ в виде двоичных чисел. Каждая команда процессора состоит из однобайтного кода операции и возможных, в зависимости от формата, дополнительных одного или двух байтов. Типы форматов команд представлены в табл. 1.1.

Таблица  1.

Форматы команд

Адрес

Биты байта

Обозн

Назначение байта

Формат однобайтной команды

Adr

D7...0

B1

Код операции

Формат двухбайтной команды

Adr

D7..0

B1

Код операции

Adr+1

D7..0

B2

Байт данных или адреса

Формат трёхбайтной команды

Adr

D7..0

B1

Код операции

Adr+1

D7..0

B2

Младший байт числа данных или адреса

Adr+2

D7..0

B3

Старший байт числа данных или адреса

В коде операции 8-битной двоичной комбинацией определяются действия процессора, предписываемые командой. Кроме того, в некоторых кодах операций указываются также операнды, с которыми должны выполняться действия. Делается это через указание на регистры процессора, содержащие операнд или его адрес согласно табл. 1.2.

Таблица  1.

Кодирование регистров в коде операции

Регистр или память M(HL)

Имя

Код

Номер

B

0  0  0

0

C

0  0  1

1

D

0  1  0

2

E

0  1  1

3

H

1  0  0

4

L

1  0  1

5

M(HL)

1  1  0

6

A

1  1  1

7

Пример 1.1.

Адрес Число Комментарий

0800  78  ;однобайтная команда, выполняющая

   ;пересылку в аккумулятор из регистра B

В двоичной форме код операции выглядит так

D7 D6 D5 D4 D3 D2 D1 D0

0 1 1 1 1 0 0 0

Находящиеся в составе данного кода операции биты D7, D6 кодируют действия команды; биты D5..3 кодируют операнд-приёмник –  регистр A; биты D2..0 кодируют операнд-источник – регистр B.

Пример 1.2.

Адрес Число Комментарий

0801  06  ; двухбайтная команда, выполняющая

0802  4C  ; пересылку в регистр B числа 4C (2й байт команды)

В двоичной форме код операции выглядит так

D7 D6 D5 D4 D3 D2 D1 D0

0 1 1 1 1  0 0 0

Находящиеся в составе данного кода операции биты D7, D6 кодируют действия команды; биты D5..3 кодируют операнд-приёмник –  регистр B; биты D2..0 кодируют операнд источника – 2-й байт команды.

Пример 1.3.

Адрес Число Комментарий

0803     D3 ;двухбайтная команда, выполняющая вывод байта из

0804 … F0 ;аккумулятора в порт с адресом F0, являющимся 2-м байтом

 ; команды

В двоичной форме код операции выглядит так

D7 D6 D5 D4 D3 D2 D1 D0

1 1 0 1 0 0 1 1

Все биты находящиеся в составе данного кода операции кодируют действия команды.

Пример 1.4.

Адрес Число Комментарий

0805     21 ;трёхбайтная команда, выполняющая пересылку

0806 …00 ; в регистровую пару HL

0807 …0B ; двухбайтного числа 0B00

В двоичной форме код операции выглядит так

D7 D6 D5 D4 D3 D2 D1 D0

0  0  1  0  0  0  0   1

Биты D5..4 кодируют операнд-приёмник –   регистровую пару HL; остальные биты кодируют действия команды.

Пример 1.5.

Адрес  Число Комментарий

0808     3A ;трёхбайтная команда, выполняющая пересылку

0809 …01 ;в аккумулятор операнда из ячейки памяти

080A …0B ;с адресом 0B01 размещённым прямо в команде

0809  …01 ;в аккумулятор операнда из ячейки памяти

080A …0B ;с адресом 0B01 размещённым прямо в команде

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

Многобайтные числа в составе команды или в составе данных хранятся согласно следующему правилу.

Байты числа размещаются в последовательно расположенных ячейках памяти (адреса ячеек последовательно увеличиваются), причём сначала в младших адресах размещаются младшие байты, а затем в более старших адресах –   более старшие байты числа. Адресом числа называют адрес самого младшего байта этого числа.

Например, трёхбайтное число 126A38 должно хранится в памяти по адресу 0B00 следующим образом:

0B00 38

0B01 6A

0B02 12

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

Мнемоническое представление команд

Ассемблер 

Язык машинных кодов понятен процессору, но неудобен для работы программисту поскольку команды трудно запоминаются и читаются. Гораздо удобнее символьное представление команд, когда символы команды напоминают о её действиях, а двухбайтные операнды и адреса в командах пишутся в нормальном виде (начиная слева, от старших байт). Такая форма представления команд используется в языке Ассемблер. Символы, представляющие команды, называются мнемокодами. Характерной особенностью языка Ассемблер, определяющей его принадлежность в языкам нижнего уровня, является то, что каждой команде Ассемблера соответствует одна и только одна машинная команда.

Пример 1.6

Адрес Число Мнемокод

0800     78 MOV A,B

MOV – сокращёние от MOVe (переместить). После пробела указываются операнды: сначала – операнд-приёмник (регистр A), а затем – операнд-источник (регистр B). Операнды разделяются друг от друга запятой.

Пример 1.7

Адрес Число Мнемокод

0801   06 4С MVI B,4C

MVI – сокращёние от MOVe Immediate (переместить непосредственно). После пробела указываются операнды: сначала – операнд-приёмник (регистр B), а затем – операнд-источник (число 4C).

Пример 1.8

Адрес Число Мнемокод

0803   D3 F0 OUT F0

OUT –  сокращёние от OUTput (вывести). После пробела указывается операнд-приёмник через адрес порта вывода F0. Источник (выводимый байт) для команд вывода всегда находится в аккумуляторе, и поэтому сведений о нём в мнемокоде нет.

Пример 1.9

Адрес Число Мнемокод

0805   32 01 0B STA 0B01

STA – сокращёние от STore A direct (записать аккумулятор прямым методом адресации). После пробела указывается операнд-приёмник через определение его адреса в памяти (0B01). Источник в команде такого типа всегда находится в аккумуляторе, и поэтому сведений о нём в мнемокоде нет.

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

Пример 1.10

Программа инвертирования чисел, в количестве Cnt_1, размещённых в последовательно расположенных ячейках памяти, начиная с адреса Adr_dat, может быть представлена на Ассемблере следующим образом

Метка Мнемокод Комментарий

Beg: LXI H,Adr_dat ;записать в HL число Adr_dat

MVI B,Cnt_1 ;записать в B число Cnt_1

M00: MOV A,M ; принять очередной байт из памяти в A

CMA ; проинвертировать биты байта в A

MOV M,A ; проинвертированный байт записать на место

INX H ; инкрементировать указатель ячеек в HL

DCR B ; декрементировать счётчик байтов в B

JNZ M00 ; проверить завершение счёта и перейти к M00

 ; когда счёт байтов не завершён

HLT ; когда счёт байтов завершён – останов

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

Если выбраны Beg=0800, Adr_dat=0B00, Cnt_1=08, то оттранслированная программа будет иметь следующий вид

Адрес Число Метка  Мнемокод Комментарий

0800 21 00 0B Beg: LXI H,0B00

0803 06 08  MVI B,08

0805 7E M00: MOV A,M

0806 2F  CMA

0807 77  MOV M,A

0808 23  INX H

0809 05   DCR B

080A C2 05 08  JNZ M00

080D 76   HLT

Трансляция ассемблерной программы может быть выполнена программистом вручную при помощи справочных таблиц с мнемониками и кодами команд. Если в подготовке программ для процессора 8080, в качестве средства автоматизации программирования, применяется компьютер, то трансляция также может быть выполнена специальной компьютерной программой называемой транслятором Ассемблера или просто Ассемблером. Программист подготавливает исходный текст в таком виде, который требует транслятор. Программа Ассемблер предполагает определённый формат представления исходной программы, а также – наличие в исходном тексте программы дополнительных команд, управляющих процессом трансляции, но не транслируемых в выходной листинг (в отличие от мнемокодов). Они именуются директивами Ассемблера.

Директивы Ассемблера процессора 8080

Директива .org

[<имя>:] org <адрес> [;комментарий]

Она указывает адрес ячейки памяти, в которую следует поместить первый байт следующий за директивой org команды.

Пример 1.11:

begin: .org 100h ;Начало программы

 MVI A,34h

MOV B,A

 

mm1: .org 300h ;Продолжение программы

LXI B,400h

  .....

Директива .org 100h указывает, что байты команды нужно расположить в памяти с адреса 100h (h-шестнадцатеричная форма представления числа), а команда LXI B,400h разместится по адресу 300h. После трансляции этот фрагмент программы будет выглядеть следующим образом:

Адрес Число Метка  Мнемокод Комментарий

0100  begin: .org 100h ;Начало программы

0100 3E 34  MVI A,34h

0102 47  MOV B,A

…………………………………………

0300  mml: .org 300h ;Продолжение программы

0300 01 00 04  LXI B,400h

…………………………………………

Директивы .db и .dw 

[<имя>:] .db <число,число,..> [;комментарий]

Эта директива определяет значения ячеек памяти размером в байт. Значения определяются числами, записанными после директивы .db (define byte).

Пример 1.12:

Prog: .org 100h ;Начало программы

 LDA Param1 ;

MOV D,A ;

LDA Param2+1 ;

ADD D ;

STA Param1+2 ;

…………………………

Data: .org 500h ;Область данных

Param1: .db 10h, 0h, 36h, 0A

Param2: .db 32h, 64h

Листинг трансляции выглядит так:

Адрес Число Метка  Мнемокод Комментарий

0100  begin: .org 100h ;Начало программы

0100 3A 00 05  LDA Param1 ;

0103 57  MOV D,A ;

0104 3A 05 05  LDA Param2+1 ;

0107 82  ADD D ;

0108 32 02 05  STA Param1+2 ;

…………………………………………………

0500  Data: .org 500h ;Область данных

0500 10 00 36 Param1: .db 10h, 0h, 36h, 0A

 0A

0504 32, 64 Param2: .db 32h, 64h

Можно определять ячейки размером в слово (два байта). Для этого служит директива .dw (define word). Если в предыдущем примере db заменить на dw, то часть листинга с областью данных может выглядеть следующим образом

Пример 1.13:

0500  Data: .org 500h ;Область данных

0500 0010 Param1: .dw 0010h, 0A36 h

0A36

0504 6432 Param2: .dw 6432h

Директива .equ

[<имя>:] .equ <число> [;комментарий]

Язык Ассемблера позволяет вместо адресов ячеек памяти оперировать с их символическими именами. Это является его преимуществом по сравнению с программированием в машинных кодах. Директива .equ присваивает имени в поле метки конкретное значение числа в поле операндов.

Пример 1.14:

Adr_Tbl .equ 500h ;Определение адреса начала таблицы данных

Adress .equ 400h ;Определение адреса байта данных

Prog: .org 100h ;Начало программы

 LXI B,Adr_Tbl ;

 LXI H,Adress ;

LDAX B ;

ADI 05 ;

MOV M,A ;

……………………………;

.org 400h ;Начало таблицы Adr_Tbl

 .db 00, 01, 04, 09 ;

.org 500h ;Место байта данных Adress

.db 0

Директива .end

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

Методы адресации операндов команд

Выполнение процессором команд приводит либо к каким-то действиям над операндами, либо к изменению состояния процессора. Операнды в командах микропроцессора 8080 определяются одним из 5 способов (методов) адресации, представленных в табл. 1.3.

Пример 1.15

Адрес Число Метка  Мнемокод Комментарий

0800 3E 03  MVI A,03 ;

команда пересылки числа 03 из состава команды в аккумулятор: операнд-источник 03 указан в составе команды при помощи непосредственного метода, а операнд-приёмник указан в аккумуляторе (регистр А) то есть регистровым методом.

Таблица  1.3

Способы адресации операндов в командах

Название

Описание

Непосредст-венный

Операнд содержится в байте B2 двухбайтной команды или в байтах B2, B3 трёхбайтной команды

Регистровый

Операнд находится в регистре, указываемом в коде команды

Прямой

Младший байт адреса операнда указывается в байте B2, a старший – в байте B3 команды

Косвенно-регистровый

Адрес операнда определяется парой регистров, указываемой в коде команды

Стековый

Адрес операнда определяется текущим содержимым регистра указателя стека SP

Пример 1.16

Адрес Число Метка  Мнемокод Комментарий

0802 01 00 0B  LXI B,0B00h ;

команда пересылки числа 0B00 из состава команды в регистровую пару BC: операнд-источник 0B00 указан в составе команды при помощи непосредственного метода, а операнд-приёмник указан в регистровой паре BC то есть регистровым методом.

Пример 1.17

Адрес Число Метка  Мнемокод Комментарий

0805 02  STAX B ;

команда пересылки числа из аккумулятора в ячейку памяти с адресом взятым из регистровой пары BC: операнд-источник указан в аккумуляторе регистровым методом, а операнд-приёмник адресован через адрес, хранящийся в регистрах BC, то есть косвенно-регистровым методом.

Пример 1.18

Адрес Число Метка  Мнемокод Комментарий

0806 32 01 0B  STA 0B01h ;

команда пересылки из аккумулятора в ячейку памяти с адресом 0B01: операнд-источник указан в аккумуляторе регистровым методом, а операнд-приёмник адресован через адрес, входящий в состав самой команды, то есть прямым методом.

Пример 1.19

Адрес Число Метка Мнемокод Комментарий

0809 D5  PUSH D ;

команда записи в стек содержимого регистровой пары DE: операнд-источник определён в регистровой паре регистровым методом, а операнд-приёмник адресован через адрес вершины стека, хранящийся в регистре SP, то есть стековым методом.

Биты признаков

В результате выполнения команд арифметических или логических операций над исходными операндами, кроме собственно результата этих операций, процессор обеспечивает формирование признаков (флагов), характеризующих полученный результат операций. Признаки представляются альтернативными состояниями битов. Например, признак нулевого результата операции предполагает равенство “1” соответствующего бита при наличии нулевого результата и равенство этого бита “0” при отсутствии нулевого результата. Биты всех признаков объединены в общий регистр признаков (флагов) –  F. Его формат показан в табл. 1.4, а значения отдельных битов признаков – в табл. 1.5.

Таблица  1.4

Формат регистра признаков

Биты

D7

D6

D5

D4

D3

D2

D1

D0

Обозн

S

Z

0

AC

0

P

1

CY

Таблица  1.5

Значения битов признаков

Слово

Назначение

Sign

Знак результата: "1"– минус; "0"– плюс. Знаком двоичного числа принято считать (как в схемотехнике цифроаналогового преобразования) значение старшего бита этого числа. Поэтому в бит S просто копируется старший бит результата операции, выполняемой процессором.

Zero

Нулевой результат: да–"1"; нет–"0".

CarrY

В этот бит помещается перенос из старшего разряда аккумулятора при сложении или из него берётся заём в старший разряд аккумулятора при вычитании: "1"– есть перенос или заём.: "1"–нет.

Add Carry

Дополнительный перенос – то же что и Carry, но для границы полубайтов результата операции (биты D3 и D4).

Parity

Паритет (чётность) для числа, показывающего количество битов равных "1" в составе байта результата: чётное (Even) –"1"; нечётное (Odd) – 0.

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

Кроме того, бит CY может принимать участие в арифметических, логических и сдвиговых операциях вместе с другими операндами.

Пример 1.20

Метка Мнемокод Комментарий

M00: ACI 25h ;Сложить содержимое аккумулятора, число 25h    ;и бит CY. Результат записать в аккумулятор и    ;отразить его признаки в регистре признаков F

JNC M00 ;Анализировать состояние бита CY регистра F    ;если CY=0 перейти к метке M00, иначе

HLT ; выполнить останов

Первая команда выполнит сложение двух однобайтных чисел (операндов) и бита переноса CY из регистра признаков:

операнд1+операнд2+CY=сумма и новое состояние F.

В результате сложения байт суммы окажется в аккумуляторе, а признаки результата – в регистре F.

Вторая команда JNC M00 будет анализировать условие (текущее состояние бита CY) и выбирать по результатам анализа один из двух альтернативных вариантов переходов в программе: при CY=0 команда обеспечит переход программы к метке M00, а при CY=1 будет выполняться следующая по порядку команда программы.

Общее представление команд

Для кодирования команд в системе команд микропроцессора 8080 использованы практически все возможные варианты 8-разрядного кода команд, то есть команд чуть меньше 256.

По функциональному назначению их можно разделить на 6 основных групп.

  •  Команды пересылок – обеспечивают операции перемещения однобайтных или двухбайтных операндов между регистрами процессора, памятью данных или памятью программ;
  •  Команды передач управления – обеспечивают безусловные и условные ветвления в программе.
  •  Команды организации подпрограмм – обеспечивают условные и безусловные вызовы подпрограмм и возвраты из подпрограмм.
  •  Команды арифметических, логических и сдвиговых операций среди которых арифметические сложение и вычитание, а также логические “И”, “ИЛИ”, “НЕ”, “Исключающее ИЛИ”, сдвига вправо и влево, сравнения.
  •  Команды управления стеком – обеспечивают установку указателя стека, а также операции чтения и записи стека.
  •  Команды ввода, вывода и управления состоянием процессора – обеспечивают операции обмена байтами процессора с регистрами интерфейсов внешних устройств, а также управление триггером разрешения прерываний процессора, перевод процессора в состояние останова и отсутствие операций.

Полный список команд с выделением групп представлен в табл. 1.6, а перечень использованных для описания команд сокращений представлен в табл. 1.7. Буквы в заголовке табл. 1.6 обозначают: Ф – формат команды, выраженный количеством байтов команды; Т – количество машинных тактов в команде; Ц – количество машинных циклов в команде.

Таблица  1.6

Список команд микропроцессора 8080

Мнемокод

Действия

F

Название

Код

Ф

Т

Ц

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

MOV r1,r2

(r1)(r2)

MOVe Register to Regist

01DDDSSS

1

5

1

MOV M,r

M(HL)(r)

MOVe Register to Memory

01110SSS

1

5

2

MOV r,M

(r)M(HL)

MOVe Memory to Register

01DDD110

1

7

2

MVI r,d8

(r)d8

MOVe Immediate Register

00DDD110

2

7

2

MVI M,d8

M(HL)d8

MOVe Immediate Memory

00110110

2

10

3

STA adr

M(adr)(A)

STore A direct

00110010

3

13

4

LDA adr

(A)M(adr)

LoaD A direct

00111010

3

13

4

STAX B

M(BC)(A)

STore A indirect

00000010

1

7

2

STAX D

M(DE)(A)

STore A indirect

00010010

1

7

2

LDAX B

(A)M(BC)

LoaD A indirect

00001010

1

7

2

LDAX D

(A)M(DE)

LoaD A indirect

00011010

1

7

2

LXI B,d16

(BC)d16

Load Immediate Register pair B&C

00000001

3

10

3

LXI D,d16

(DE)d16

Load Immediate register pair D&E

00010001

3

10

3

LXI H,d16

(HL)d16

Load Immediate register pair H&L

00100001

3

10

3

LXI SP,d16

(SP)d16

Load Immediate stack pointer

00110001

3

10

3

SHLD adr

M(adr)(L)

M(adr+1)(H)

Store H&L Direct

00100010

3

16

5

LHLD adr

(L)M(adr)

(H)M(adr+1)

Load H&L Direct

00101010

3

16

5

XCHG

(HL)(DE)

eXCHanGe H&L, D&E

11101011

1

4

1

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

PCHL

(PC)(HL)

H&L to Programm Counter

11101001

1

5

1

JMP adr

(PC)adr

JuMP unconditional

11000011

3

10

3

JNZ adr

JMP if Z=0

Jump on No Zero

11000010

3

10

3

JZ adr

JMP if Z=1

Jump on Zero

11001010

3

10

3

JNC adr

JMP if CY=0

Jump on No Carry

11010010

3

10

3

JC adr

JMP if CY=1

Jump on Carry

11011010

3

10

3

JPO adr

JMP if P=0

Jump on Parity Odd

11100010

3

10

3

JPE adr

JMP if P=1

Jump on Parity Even

11101010

3

10

3

JP adr

JMP if S=0

Jump on Positive

11110010

3

10

3

JM adr

JMP if S=1

Jump on Minus

11111010

3

10

3

Команды организации подпрограмм

CALL adr

stack(PC)

(PC)adr

CALL unconditional

11001101

3

17

5

CNZ adr

CALL if Z=0

Call on No Zero

11000100

3

17

5

CZ adr

CALL if Z=1

Call on Zero

11001100

3

17

5

CNC adr

CALL if CY=0

Call on No Carry

11010100

3

17

5

CC adr

CALL if CY=1

Call on Carry

11011100

3

17

5

CPO adr

CALL if P=0

Call on Parity Odd

11100100

3

17

5

CPE adr

CALL if P=1

Call on Parity Even

11101100

3

17

5

CP adr

CALL if S=0

Call on Positive

11110100

3

17

5

CM adr

CALL if S=1

Call on Minus

11111100

3

17

5

RST N

stack(PC)

(PC)N*8

ReSTart

11nnn111

1

11

3

RET

(PC)stack

RETurn

11001001

1

10

3

RNZ

RET if Z=0

Return on No Zero

11000000

1

11

3

RZ

RET if Z=1

Return on Zero

11001000

1

11

3

RNC

RET if CY=0

Return on No Carry

11010000

1

11

3

RC

RET if CY=1

Return on Carry

11011000

1

11

3

RPO

RET if P=0

Return on Parity Odd

11100000

1

11

3

RPE

RET if P=1

Return on Parity Even

11101000

1

11

3

RP

RET if S=0

Return on Positive

11110000

1

11

3

RM

RET if S=1

Return on Minus

11111000

1

11

3

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

ADD r

(A)(A)+(r)

+

ADD Register to A

10000SSS

1

4

1

ADD M

(A)(A)+M(HL)

+

ADD Memory to A

10000110

1

7

2

ADI d8

(A)(A)+d8

+

ADd Immediate to A

11000110

2

7

2

ADC r

(A)(A)+(r)+ (CY)

+

ADd Register to A with Carry

10001SSS

1

4

1

ADC M

A)(A)+M(HL)+(CY)

+

ADd Memory to A with Carry

10001110

1

7

2

ACI d8

(A)(A)+d8+ (CY)

+

Add Immediate to A with Carry

11001110

2

7

2

INR r

(r)(r)+1

–CY

INcRement Register

00DDD100

1

5

1

INR M

M(HL)

M(HL)+1

–CY

INcRement Memory

00110100

1

10

3

INX B

(BC)(BC)+1

INcrement register pair B&C

00000011

1

5

1

INX D

(DE)(DE)+1

INcrement register pair D&E

00010011

1

5

1

INX H

(HL)(HL)+1

INcrement register pair H&L

00100011

1

5

1

DAD B

(HL)(HL)+ (BC)

CY

Double register ADd.

Add B&C to H&L

00001001

1

10

3

DAD D

(HL)(HL)+ (DE)

CY

Double register ADd.

Add D&E to H&L

00011001

1

10

3

DAD H

(HL)(HL)+ (HL)

CY

Double register ADd.

Add H&L to H&L

00101001

1

10

3

DAD SP

(HL)(HL)+ (SP)

CY

Double register ADd.

Add SP to H&L

00111001

1

10

3

SUB r

(A)(A)–(r)

+

SUBtract Register from A

10010SSS

1

4

1

SUB M

(A)(A)–M(HL)

+

SUBtract Memory from A

10010110

1

7

2

SUI d8

(A)(A)–d8

+

SUbtract Immediate from A

11010110

2

7

2

SBB r

(A)(A)–(r)–(CY)

+

SUbtract Register from A with borrow

10011SSS

1

4

1

SBB M

(A)(A)–M(HL)– (CY)

+

Subtract Memory from A with borrow

10011110

1

7

2

SBI d8

(A)(A)–d8–(CY)

+

Subtract Immediate from A with Borrow

11011110

2

7

2

DCR r

(r)(r)–1

–CY

DeCrement Register

00DDD101

1

5

1

DCR M

M(HL) M(HL)–1

–CY

DeCrement Memory

00110101

1

10

3

DCX B

(BC)(BC)–1

DeCrement register pair B&C

00001101

1

5

1

DCX D

(DE)(DE)–1

DeCrement register pair D&E

00011101

1

5

1

DCX H

(HL)(HL)–1

DeCrement register pair H&L

00101101

1

5

1

ANA r

(A)(A)(r)

+

ANd Register with A

10100SSS

1

4

1

ANA M

(A) (A)M(HL)

+

ANd Memory with A

10100110

1

7

2

ANI d8

(A)(A)d8

+

ANd Immediate with A

11100110

2

7

2

ORA r

(A)(A)(r)

+

OR Register with A

10110SSS

1

4

1

ORA M

(A)

(A)M(HL)

+

OR Memory with A

10110110

1

7

2

ORI d8

(A)(A)d8

+

OR Immediate with A

11110110

2

7

2

XRA r

(A)(A)(r)

+

eXclusive or Register with A

10101SSS

1

4

1

XRA M

(A)(A)M(HL)

+

eXclusive or Memory with A

10101110

1

7

2

XRI d8

(A)(A)d8

+

eXclusive or Immediate with A

11101110

2

7

2

CMP r

(F)(A–(r)

+

CoMPare Register with A

00DDD101

1

5

1

CMP M

(F)(A)–M

+

CoMPare Memory with A

10111110

1

7

2

CPI d8

(F)(A)–d8

+

ComPare Immediate with A

11111110

2

7

2

RAR

CY

Rotate A Right through carry

00011111

1

4

1

RAL

CY

Rotate A Left through carry

00010111

1

4

1

RRC

CY

Rotate A Right into the Carry

00001111

1

4

1

RLC

CY

Rotate A Left into the Carry

00000111

1

4

1

DAA

Десятичная коррекция

+

Decimal Adjust A

00100111

1

4

1

CMA

(A)()

CoMplement A

00101111

1

4

1

STC

(CY)1

CY

SeT Carry

00110111

1

4

1

CMC

(CY)()

CY

CoMplement Carry

00111111

1

4

1

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

SPHL

(SP)(HL)

H&L to Stack Pointer

11111001

1

5

1

PUSH B

stack(BC)

PUSH register pair B&C on stack

11000101

1

11

3

PUSH D

stack(DE)

PUSH register pair D&E on stack

11010101

1

11

3

PUSH H

stack(HL)

PUSH register pair H&L on stack

11100101

1

11

3

PUSH PSW

stack(A)(F)

PUSH A&F on stack

11110101

1

11

3

POP B

(BC)stack

POP register pair B&C off stack

11000001

1

10

3

POP D

(DE)stack

POP register pair D&E off stack

11010001

1

10

3

POP H

(HL)stack

POP register pair H&L off stack

11100001

1

10

3

POP PSW

(A)(F)stack

POP A&F off stack

11110001

1

10

3

XTHL

(HL)stack

eXchange H&L, Top of stack

11100011

1

18

5

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

IN port

ABport

(A)DB

INput

11011011

2

10

3

OUT port

ABport

DB(A)

OUTput

11010011

2

10

3

DI

Запрет

прерываний

Disable Interrupts

11110011

1

4

1

EI

Разрешение прерываний

Enable Interrupts

11111011

1

4

1

HLT

Останов

HaLT

01110110

1

7

1

NOP

Нет операции

No-OPeration

00000000

1

4

1


Таблица  1.7

Обозначения принятые при описании команд

Обозн.

Пояснения

r,r1,r2

один из 8 разрядных регистров общего назначения: A,B,C,D,E,H,L

SSS

адрес регистра источника информации (Табл.1)

DDD

адрес регистра приёмника информации (Табл.1);

( )

содержимое. Например,(A) – содержимое регистра A.

M( )

содержимое ячейки памяти, адрес которой задан косвенно. Например, M(HL) – содержимое ячейки памяти, адрес которой хранится в регистровой паре HL.

d8,d16

соответсвенно 8- и 16-разрядный операнды, адресуемые непосредственно

adr

16-разрядный адрес памяти

port

8-разрядный адрес устройства ввода-вывода

PC

регистр-счётчик команд (Programm Counter)

SP

регистр-указатель стека (Stack Pointer)

nnn

двоичный код номера N

AB

шина адреса (Adress Bus)

DB

шина данных (Data Bus)

F

влияние команды на признаки

+

команда влияет на все признаки

команда не влияет ни на какой признак

+CY

команда влияет только на признак CY

–CY

команда влияет на все признаки кроме признака CY

Ф

формат команды (количество байт)

Т

количество машинных тактов в команде

Ц

количество машинных циклов в команде

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

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

В качестве операнда источника может быть:

  •  регистр (однобайтные операции) или регистровая пара процессора (двухбайтные операции);
  •  одна или две последовательно расположенные ячейки памяти данных;
  •  одна или две последовательно расположенные ячейки памяти программы, в которых размещены второй и третий байты самой команды пересылки.

В качестве операнда приёмника может быть:

  •  регистр или регистровая пара процессора;
  •  одна или две последовательно расположенные ячейки памяти данных.

Следует отметить, что команды пересылок между ячейками памяти отсутствуют в составе системы команд микропроцессора 8080. Такого рода пересылки предполагается выполнять через регистры процессора путём нескольких соответствующих команд.

 Однобайтные пересылки

Для пересылок между регистрами процессора предназначены команды типа MOV r1,r2, в которых r1 – регистр приёмника, r2 – регистр источника. Приёмником или источником может быть любой регистр общего назначения процессора.

 Пример 1.21

Адрес Число Мнемокод Комментарий

0800 78 MOV A,B ; пересылка из регистра В в аккумулятор

0801 4C MOV C,H ; пересылка из регистра H в регистр C

0802 55 MOV D,L ; пересылка из регистра L в регистр D

Всё это короткие однобайтные по формату 5-тактовые команды. На их интерпретацию процессору требуется только один машинный цикл для выборки самой команды.

Для пересылок между регистрами процессора и памятью данных предназначены команды типа MOV r,M – для чтения памяти и MOV M,r – для записи памяти. В этих командах M – ячейка памяти, адрес которой будет взят из регистровой пары HL.

Пример 1.22

Адрес Число Мнемокод Комментарий

0800 56 MOV D,M ; пересылка из ячейки M в регистр D

0801 71 MOV M,C ; пересылка из регистра C в ячейку M

Это однобайтовые по формату, но уже 7-тактовые команды. Дополнительный машинный цикл нужен в фазе выполнения команды. Кроме того, программисту, применяющему данные команды, следует помнить о необходимости предварительной подготовки адреса памяти M в регистровой паре HL.

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

  •  прямым адресом adr в командах типа LDA adr – чтение из памяти и STA adr – запись в память;
  •  косвенно через одну из двух возможных регистровых пар – BC или DE в командах LDAX B, LDAX D – чтение из памяти и в командах STAX B, STAX D – запись в память.

Пример 1.23.

Адрес Число Мнемокод Комментарий

0800 3A 00 0B LDA 0B00h ; пересылка из ячейки адресом 0B00 в ре-                                           ;гистр A

0803 32 10 0B STA 0B10h ; пересылка из A в ячейку с адресом 0B10

Это – медленные трёхбайтные 13-тактовые команды. Кроме трёх машинных циклов требуемых для чтения байтов команды, необходим ещё один цикл на выполнение операции пересылки.

Пример 1.24.

Адрес Число Мнемокод Комментарий

0800 1A LDAX D ; пересылка из ячейки M(DE) в

  ; аккумулятор

0801 02 STAX B ;пересылка из аккумулятора в ячейку     ;M(BC)

Эти команды занимают в памяти только один байт памяти. Они требуют на выполнение 7 машинных тактов и предварительного определения адреса в регистровой паре.

Для пересылок с целью записать в регистр процессора или в память какое-то непосредственно указанное число применяются команды типа MVI r,d8 – для записи в регистр и MVI M,d8 – для записи в память. В этих командах непосредственно указанное число обозначено в общем виде – d8, а ячейка памяти M определена косвенно через адрес в регистровой паре HL.

Пример 1.25.

Адрес Число Мнемокод Комментарий

0800 0E 45   MVI B,45h ;пересылка числа 45 в регистр B

0802 36 6B   MVI M,6Bh ;пересылка числа 6B в ячейку памяти

  ;M(HL)

 Двухбайтные пересылки

Для пересылок между регистрами процессора и памятью имеются команды типа LHLD adr – чтение памяти и SHLD adr – запись в память. Регистрами в этих командах являются регистры пары HL, а память можно определять прямо в самой команде адресом adr. Этот адрес определит место младшего байта числа, а место старшего байта числа окажется по адресу adr+1.

Пример 1.26.

Адрес Число Мнемокод Комментарий

0800 2A 00 0B LHLD 0B00h ; пересылка числа из регистровой пары

  ; HL в память:  M(0B00)(L),

  ;  M(0B01)(H)

0803 22 10 0B SHLD 0B10h ; пересылка числа из памяти

  ; в регистровую пару HL: M(0B00)(L),

  ; M(0B01)(H)

Несмотря на то что на выполнение этих команд требуется 16 тактов, аналогичные действия с применением нескольких команд однобайтных пересылок оказываются гораздо более долгими. Например, 36 тактов потребуется в варианте примера 6.7:

Пример 1.27

Метка Мнемокод Комментарий

LDA 0B00 ; 13 тактов

MOV L,A ; 5 тактов

LDA 0B01 ; 13 тактов

MOV H,A ; 5 тактов

Для двухбайтных пересылок между регистрами есть только одна команда, причём не обычная пересылка, а обмен содержимым регистровых пар DE и HL – команда HCHG.

Кроме того, имеются команды непосредственной загрузки регистровых пар и 16-разрядного регистра указателя стека SP вторым и третьим байтами из состава байтов команды – LXI B,d16; LXI D,d16; LXI H,d16; LXI SP,d16. В этих командах d16 – загружаемое двухбайтное число, а регистровые пары обозначены буквами своих старших регистров.

Пример 1.28.

Адрес Число Мнемокод Комментарий

0800 01 00 00 LXI B,0000h ; Пересылка числа 0 в регистр. пару BC

0803 21 97 19 LXI H,1997h ; Пересылка числа 1997 в регистровую

  ; пару HL: (H)19, (L)97.

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

Работая обычным образом в состоянии выполнения программы, процессор интерпретирует команды программы последовательно. Прочитав из памяти код очередной команды по адресу, на который указывает счётчик команд, процессор дешифрирует этот код, определяет из скольки байт эта текущая команда состоит. Далее он увеличивает содержимое счётчика команд (PC) на число равное количеству байт текущей команды. Если команда однобайтная, то (PC)(PC)+1; если команда двухбайтная, то (PC)(PC)+2; если команда трёхбайтная, то (PC)(PC)+3. После выполнения текущей команды в счётчике команд, таким образом, уже готов адрес новой команды. Новая команда и последующие интерпретируются далее аналогичным образом. Команды выполняются по очереди в порядке их размещения в памяти.

Вместе с тем, часто по условиям алгоритма возникает необходимость в изменении последовательного хода выполнения команд и организации переходов в различные точки программы. Для этой цели предназначены команды передачи управления. Они способны сформировать новое содержимое счётчика команд таким образом, чтобы обеспечить переход нужную точку. То есть – передать управление процессором тем командам, которые начинаются с адреса точки перехода.

Кроме того, нередко алгоритм требует не просто переходов в программе. Он требует ветвлений хода программы на разные пути, выбираемые в зависимости от результата анализа выполнения каких-то задаваемых условий. В системе команд процессора 8080 для реализации таких действий имеются команды условных переходов. При этом условиями для переходов являются состояния битов регистра признаков.

Команды передач управления различаются наличием или отсутствием условия на выполнение перехода (условный или безусловный переходы). Команды безусловных переходов различаются способом определения нового содержимого счётчика команд. А команды условных переходов различаются вариантами условий.

Команды безусловных переходов

Команда PCHL обеспечивает загрузку счётчика команд из регистровой пары HL.

(PC)(HL)

Адрес перехода предварительно должен быть определён в регистровой паре HL. Данная команда – очень короткая (1 байт) и быстрая (всего 5 тактов). Эффективность её применения зависит от решения с подготовкой адреса в HL.

Пример 1.29

Адрес Число Метка  Мнемокод Комментарий

0800 21 10 08  LXI H,M00 ;Загрузка в HL адреса перехода

0803 E9  PCHL ;Переход по адресу в HL

…………………………………….

0810 78 M00: MOV A,B

0811 41  MOV B,C

…………………………………….

Команда JMP adr обеспечивает непосредственную прямую загрузку счётчика команд байтами adr из состава команды. Она по формату состоит из трёх байтов и требует для выполнения 10 тактов. Но, в отличие от команды PCHL, эта команда не требует подготовительных операций.

Команды условных переходов

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

Общая схема выполнения таких команд

JMP if cnd (перейти, если выполнено условие cnd)

Условиями могут быть выбранные состояния битов регистра признаков. Например, Z=0, Z=1, CY=0, CY=1, так далее. Для каждого из пяти битов признаков возможны по два условия. Поэтому имеется всего 10 команд условных переходов.

Общий формат мнемоник таких команд

Jcnd adr

где adr – адрес перехода для случая выполнения условия, а вместо cnd добавляются символы выбранного условия:

JNZ adr – переход, если обнаружен ненулевой результат,

JZ adr – переход, если обнаружен нулевой результат,

JNC adr – переход, если обнаружено отсутствие переноса,

JC adr – переход, если обнаружен наличие переноса,

JPO adr – переход, если обнаружено нечётное число битов “1” результата,

JPE adr – переход, если обнаружено чётное число битов “1” результата,

JP adr – переход, если обнаружен положительный знак результата,

JM adr – переход, если обнаружен отрицательный знак результата.

Все команды – трёхбайтные по формату и требуют на выполнение 10 тактов, как и команда JMP.

Пример 1.30

Метка Мнемокод Комментарий

 MVI C,55h   ;Установка счётчика проходов цикла

 LXI H,0BF0h ;Установка указателя ячеек памяти

 MVI A,00 ;Обнуление аккумулятора

M00:  MOV M,A   ;Обнуление очередной ячейки памяти

 INX H ;HL+1 Продвижение указателя ячеек

 DCR C ;C–1 Подсчёт ячеек и установка Z

 JNZ M00 ;Переход к M00, если не выполнено Z=1

 HLT ;Останов, если Z=1

Команды организации подпрограмм

Команды организации подпрограмм, как и команды передачи управления, обеспечивают переключение процессора от нормальной последовательности выполнения команд к выполнению действий команд, начинающихся в выбираемом месте памяти. Но при этом команды организации подпрограмм реализуют не простой переход внутри программы, а переход в соответствии с правилами организации подпрограммы – независимой структурной единицы программы. Согласно этим правилам переход предполагает возврат из подпрограммы к тому месту вызывающей программы, из которого переход был выполнен. Поэтому переход к подпрограмме называют вызовом подпрограммы и он обеспечивается из вызывающей программы командами вызова подпрограммы. А вызываемая подпрограмма, в свою очередь, должна быть структурно построена так, чтобы по завершении операций для выполнения которых она была вызвана, подпрограмма обеспечила бы возврат в исходное место вызывающей программы для продолжения последовательного её хода. Такой возврат обеспечивают команды возврата из подпрограммы.

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

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

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

Команды безусловных вызовов и возврата

Команда CALL adr безусловного вызова подпрограммы, расположенной по адресу adr, выполняется по следующей схеме:

stack(PC)

(PC)adr

На момент завершения дешифрации данной команды в счётчике команд процессора (PC) сформируется адрес команды стоящей в программе вслед за данной командой. Выполнением данной команды сначала запишется в стек этот адрес из (PC), а затем загрузкой в счётчик команд двухбайтного адреса adr из состава выполняемой команды управление процессором будет передано первой команде подпрограммы. Команда занимает в памяти 3 байта, состоит из 5 машинных циклов и требует на выполнение 17 тактов, то есть это одна из наиболее длительных по времени команд.

Команды вызова подпрограмм типа RST N, где N – номер команды (0..7), также обеспечивают безусловный вызов подпрограммы. Но при этом адрес подпрограммы фиксирован и определяется номером команды adr=N*8. Например, для команды RST 0 адрес подпрограммы будет 0000h, для RST 1 адрес подпрограммы будет 0008h, для RST 2 адрес подпрограммы будет 0010h и т.д. По формату команда однобайтная, требует на выполнение 11 тактов. Выполняются по той же схеме, что и команда CALL adr.

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

Рис. 1.1. Пример организации вызовов подпрограмм

Команды условных вызовов и возврата

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

Общая схема выполнения условных вызовов подпрограмм команд

CALL if cnd (вызов, если выполнено условие cnd)

Условиями могут быть выбранные состояния битов регистра признаков. Например, Z=0, Z=1, CY=0, CY=1, так далее. Для каждого из пяти битов признаков возможны по два условия. Поэтому имеется всего 10 команд условных переходов.

Общий формат мнемоник таких команд

Ccnd adr

где adr – адрес перехода для случая выполнения условия, а вместо точек добавляются символы выбранного условия:

CNZ adr – вызов, если обнаружен ненулевой результат,

CZ adr – вызов, если обнаружен нулевой результат,

CNC adr – вызов, если обнаружено отсутствие переноса,

CC adr – вызов, если обнаружен наличие переноса,

CPO adr – вызов, если обнаружено нечётное число битов “1” результата,

CPE adr – вызов, если обнаружено чётное число битов “1” результата,

CP adr – вызов, если обнаружен положительный знак результата,

CM adr – вызов, если обнаружен отрицательный знак результата.

Все команды – трёхбайтные по формату. В отличие от большинства других, эти команды могут иметь два варианта времени выполнения, в зависимости от результата анализа условия.

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

Другой вариант – когда обнаружено выполнение условия, поставленного командой. Тогда процессору потребуется выполнить в полном объёме все действия команды вызова подпрограммы, включая 2 машинных цикла записи в стек. И, в целом, тогда на команду потратится 17 тактов.

Общая схема выполнения условных возвратов из подпрограмм команд

RET if cnd (возврат, если выполнено условие cnd)

Общий формат мнемоник таких команд R.., где вместо точек добавляются символы выбранного условия:

RNZ –возврат, если обнаружен ненулевой результат,

RZ – возврат, если обнаружен нулевой результат,

RNC – возврат, если обнаружено отсутствие переноса,

RC – возврат, если обнаружен наличие переноса,

RPO – возврат, если обнаружено нечётное число битов “1” результата,

RPE – возврат, если обнаружено чётное число битов “1” результата,

RP – возврат, если обнаружен положительный знак результата,

RM – возврат, если обнаружен отрицательный знак результата.

Все команды – однобайтные по формату. В отличие от большинства других, эти команды могут иметь два варианта времени выполнения, в зависимости от результата анализа условия.

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

Другой вариант – когда обнаружено выполнение условия, поставленного командой. Тогда процессору потребуется выполнить в полном объёме все действия команды возврата из подпрограммы, включая 2 машинных цикла чтения из стека. И в целом тогда на команду потратится 10 тактов.

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

Данная группа включает в себя команды, непосредственное выполнение которых обеспечивает арифметическо-логическое устройство (АЛУ) процессора 8080. Поэтому способ выполнения и возможности этих команд целиком определяются архитектурными особенностями АЛУ.

Возможности арифметических команд ограничиваются только операциями сложения и вычитания. Умножение, деление и более сложные арифметические операции можно организовать, составив соответствующие подпрограммы на основе имеющихся в распоряжении команд. Кроме того, возможности АЛУ позволяют одной команде оперировать лишь с однобайтными (и немного с двухбайтными) числами. Реализовать операции с многобайтными числами можно программным путём, понимая и используя признаки результатов однобайтных операций, которые устанавливаются командами этой группы в регистре признаков. К арифметическим командам относятся также команды сравнения, поскольку сравнение производится путём вычитания и установки признаков Z и CY, способных отразить равенство сравниваемых чисел или указать на большее из них.

Логические команды предоставляют возможности непосредственно выполнить следующие операции с однобайтными числами: “И” (конъюнкция), “ИЛИ” (дизъюнкция), “исключающее ИЛИ” (сложение по модулю два), “НЕ” (инверсия).

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

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

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

(A) (A) <op> <2-й операнд>

где <op> – символ операции: “+”, “–”, “&” и т.д. Второй операнд может храниться в регистре процессора, в ячейке памяти или быть в составе самой команды. Первый операнд (или единственный операнд для операций с одним операндом) всегда хранится в аккумуляторе. Результат операции отправляется командой в аккумулятор, а признаки этого результата устанавливаются в регистре признаков.

Команды сложения

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

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

Команды сложения двухбайтных операндов работают с операндами только в регистровых парах: первое слагаемое и результат все такие команды хранят в регистровой HL (регистровая пара HL выступает в роли аккумулятора для однобайтных  операций), второе слагаемое можно определять в любой из регистровых трёх пар процессора. Двоичное сложение выполняется в соответствии с правилами двоичной арифметики, представленными в Табл.9.1.

Таблица  1.8

Правила двоичного сложения

1

0 + 0 = 0

2

0 + 1 = 1

3

1 + 1 = 0 + перенос 1 в следующий разряд

4

1 + 1 + 1 = 1 + перенос 1 в следующий разряд

Сначала рассмотрим команды сложения однобайтных чисел.

Команды типа ADD r, ADС r обеспечивают выбор второго операнда регистровым методом. Выполняемое командой ADD r действие:

(A) (A) + (r)

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

Пример 1.31

Требуется сложить числа 8Eh и C5h.

Адрес Число Мнемокод Комментарий

0800 3E 8E  MVI A,8Eh ;поместить в аккумулятор 1-е слагаемое

0802 06 C5 MVI B,C5h ; поместить в регистр B 2-е слагаемое

0804 80 ADD B ; выполнить сложение: (A) (A) + (B)

Операция сложения должна дать такой результат:

1 0 0 0 1 1 0 0    8 C

+ 1 1 1 0 0 1 0 1 + E 5

1 0 1 1 1 0 0 0 1 1 7 1

Процессор, выполнив команду ADD B, сохранит младшие 8 разрядов результата в аккумуляторе, а 9-й старший разряд – в бите CY регистра признаков. Бит CY в этом случае как бы дополняет до 9 количество разрядов хранения результата. Другие команды могут использовать бит CY для новых операций сложения, когда выполняется сложение следующих байтов многобайтных чисел.

Команды типа ADC r обеспечивают сложение двух операндов подобно команде ADD r, но кроме того к результату ещё суммируется бит CY регистра признаков:

(A) (A) + (r) + (CY)

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

Пример 1.32

Запрограммировать сложение двухбайтных чисел 358Eh+24C5h.

Адрес Число Мнемокод Комментарий

0800 01 8E 35 LXI B,358E ; поместить в BC 1-е слагаемое

0803 11 C5 24 LXI D,24C5 ; поместить в DE 2-е слагаемое

0806 79 MOV A,C   ; подготовить и

0807 83 ADD E ; выполнить сложение младших байтов без

  ;учёта переноса

0808 6F MOV L,A  ; поместить младший байт результата в L

0809 78     MOV A,B   ; подготовить и

080A 8A ADC D ; выполнить сложение старших байтов с

   ;учётом переноса

080B 67 MOV H,A ; поместить старший байт результата в H

Команды типа ADD M, ADС M обеспечивают выбор второго операнда косвенно-регистровым методом, когда адрес операнда определяется в регистровой паре HL. Выполняемое командой ADD M действие:

(A) (A) + M(HL)

Выполняемое командой ADC M действие:

(A) (A) + M(HL) + (CY)

Пример 1.33

Выполнить сложение 8Eh+C5h, если 2-е слагаемое C5h находится в ячейке с адресом 0B00h.

Адрес Число Мнемокод Комментарий

0800 3E 8E   MVI A,8E   ; поместить в аккумулятор 1-е слагаемое

0802 21 00 0B LXI H,0B00 ; подготовить в HL адрес ячейки M

0804 86 ADD M ; выполнить сложение: (A) (A) + M(HL)

Команды типа ADI d8, ACI d8 обеспечивают выбор второго операнда непосредственным методом, то есть путём указания числа в составе самой команды. Выполняемое командой ADI d8 действие:

(A) (A) + d8

Выполняемое командой ACI d8 действие:

(A) (A) + d8 + (CY)

Пример 1.34

Выполнить сложение 8Eh+C5h.

Адрес Число Мнемокод Комментарий

0800 3E 8E   MVI A,8E   ; поместить в аккумулятор 1-е слагаемое

0802 C6 C5   ADI C5    ; выполнить сложение: (A) (A) + C5h

Ещё один тип команд сложения обеспечивает сложение задаваемого операнда с числом 1, то есть инкремент операнда. Операнд может быть определён одним из двух способов. В команде INR r операнд определён регистровым способом и схема выполнения команды выглядит следующим образом:

(r) (r) + 1

В команде INR M операнд определён косвенно-регистровым способом по адресу в регистровой паре HL и схема выполнения команды выглядит следующим образом:

M(HL) M(HL) + 1

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

Пример 2.35

Пусть в исходном состоянии было: M(0B00)=8Eh, M(0B01)=C5h. Затем выполнятся следующие команды.

Адрес Число Мнемокод Комментарий

0800 21 00 0B LXI H,0B00 ; подготовить в HL адрес ячейки M

0803 34 INR M ; инкремент содержимого ячейки M(0B00)

0804 2C INR L ; инкремент содержимого регистра     ;(L)(L)+1

0805 34 INR M ; инкремент содержимого ячейки M(0B01)

и после выполнения этих команд в памяти данных будет: M(0B00)=8Fh, M(0B01)=C6h.

На основе таких команд удобно организовывать суммирующие счётчики повторений каких-либо циклов операций.

Кроме команд сложения однобайтных операндов есть среди команд сложения команды сложения двухбайтных операндов – DAD B, DAD D, DAD H, DAD SP. Схема их выполнения

(HL) (HL) + (rp),

где rp – регистровая пара BC, DE, HL или регистр SP. Характерным отличием таких команд сложения от команд однобайтных операций является то, что эти команды воздействуют своим выполнением не на все признаки регистра признаков, а только на один из них – на признак CY. Команды двухбайтных операций с участием бита CY вообще отсутствуют, поэтому для суммирования многобайтных чисел (более 3-х байтов) их применять не рекомендуется, а лучше использовать команды однобайтных операций.

Пример 1.36

Адрес Число Мнемокод Комментарий

0800 09   DAD B ; выполнить сложение: (HL)(HL)+(BC)

Существуют также команды сложения двухбайтного операнда регистровой пары с числом 1 то есть инкремент регистровых пар: INX B, INX D, INX H. Схема их выполнения

(rp) (rp) + 1

Отличает их от других арифметическо-логических команд полное отсутствие влияния на биты признаков. Применение этих команд может быть эффективным, например, в случае последовательной работы с ячейками области памяти для организации в регистровой паре указателя ячеек области, когда применяется косвенная адресация к этим ячейкам (пример приведён далее при рассмотрении команд декремента).

Команды вычитания

Команды вычитания позволяют выполняют операции только с однобайтными операндами. По схеме выполнения и способам определения 2-го операнда, а также по участию или неучастию в операциях бита CY эти команды аналогичны командам однобайтного сложения. Команды выполняют вычитание по правилам двоичного вычитания из двоичной арифметики, представленным в Табл.9.2.

Таблица  1.9

Правила двоичного вычитания

1

0 – 0 = 0

2

1 – 0 = 1

3

1 – 1 = 0

4

0 – 1 = 1 – заём 1 из следующего разряда

Команды вычитания SUB r и SBB r определяют второй операнд (вычитаемое) регистровым способом. Команды SUB r выполняется по схеме:

(A) (A) – (r)

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

Пример 1.37

Требуется вычесть из числа 8Eh число C5h.

Адрес Число Мнемокод Комментарий

0800 3E 8E   MVI A,8E ; поместить в аккумулятор уменьшаемое

0802 06 C5   MVI B,C5 ; поместить в регистр B вычитаемое

0804 90 SUB B   ; выполнить вычитание: (A) (A) – (B)

Операция вычитания должна дать такой результат:

 1 0 0 0 1 1 0 0    8 C

– 1 1 1 0 0 1 0 1 – E 5

1 1 0 1 0 0 1 1 1 1 A 7

В результате операции присутствует заём, так как уменьшаемое меньше вычитаемого. Выполняя команду SUB B, процессор сохранит младшие 8 разрядов результата в аккумуляторе, а наличие заёма отразит состоянием бита CY регистра признаков: CY=1. Для операций вычитания бит CY, таким образом, становится битом заёма. Следующие команды вычитания могут использовать бит CY для новых операций вычитания, когда требуется выполнять вычитание более старших байтов многобайтных чисел.

Команда SBB r работает так же как команда SUB r, но кроме того из результата вычитания двух операндов вычитается ещё бит CY.

(A) (A) – (r) – (CY)

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

Пример 1.38

Запрограммировать вычитание двухбайтных чисел 358Eh–24C5h.

Адрес Число Мнемокод Комментарий

0800 01 8E 35 LXI B,358E ; поместить в BC уменьшаемое

0803 11 C5 24 LXI D,24C5 ; поместить в DE вычитаемое

0806 79 MOV A,C  ; подготовить и выполнить вычитание

0807 93 SUB E    ; младших байтов без учёта заёма

0808 6F MOV L,A ; поместить младший байт результата в L

0809 78  MOV A,B   ; подготовить и выполнить вычитание

080A 9A  SBB D    ; старших байтов с учётом заёма

080B 67 MOV H,A   ; поместить старший байт результата в H

Команды типа SUB M, SBB M обеспечивают выбор операнда-вычитаемого косвенно-регистровым методом, когда адрес операнда определяется в регистровой паре HL. Выполняемое командой SUB M действие:

(A) (A) – M(HL)

Выполняемое командой SBB M действие:

(A) (A) – M(HL) – (CY)

Пример 1.39

Выполнить вычитание 8Eh–C5h, если вычитаемое C5h находится в ячейке с адресом 0B00h.

Адрес Число Мнемокод Комментарий

0800 3E 8E   MVI A,8E   ; поместить в аккумулятор уменьшаемое

0802 21 00 0B LXI H,0B00 ; подготовить в HL адрес ячейки M

0804 96 SUB M ; выполнить вычитание: (A) (A) – M(HL)

Команды типа SUI d8, SBI d8 обеспечивают выбор операнда-уменьшаемого прямым методом, то есть путём указания числа в составе самой команды. Выполняемое командой SUI d8 действие:

(A) (A) – d8

Выполняемое командой SBI d8 действие:

(A) (A) – d8 – (CY)

Пример 1.40

Выполнить вычитание 8Eh–C5h.

Адрес Число Мнемокод Комментарий

0800 3E 8E   MVI A,8E   ; поместить в аккумулятор уменьшаемое

0802 D6 C5   SUI C5    ; выполнить вычитание: (A) (A) – C5h

Ещё один тип команд вычитания обеспечивает вычитание из задаваемого операнда числа 1, то есть декремент операнда. Операнд может быть определён одним из двух способов. В команде DCR r операнд определён регистровым способом и схема выполнения команды выглядит следующим образом:

(r) (r) – 1

В команде DCR M операнд определён косвенно-регистровым способом по адресу в регистровой паре HL и схема выполнения команды выглядит следующим образом:

M(HL) M(HL) – 1

В отличие от большинства других арифметическо-логических команд, воздействующих на все признаки, данные команды декремента никак не влияют на один из битов признаков – бит CY. На основе таких команд удобно организовывать вычитающие счётчики повторений каких-либо циклов операций с контролем количества повторений по признаку Z (см. пример 9.11).

Существуют также команды вычитания из двухбайтного операнда регистровой пары числа 1 то есть декремент регистровых пар: DCX B, DCX D, DCX H. Схема их выполнения:

(rp) (rp) – 1

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

Пример 1.41

Требуется выполнить обнуление области из 55h ячеек памяти, начинающейся по адресу 0B00.

Метка Мнемокод Комментарий

 MVI C,55h   ;загрузка счётчика повторений цикла

 LXI H,0BF0h ;загрузка в HL указателя начала области

 MVI A,00 ;обнуление аккумулятора

M00:  MOV M,A   ;обнуление очередной ячейки

 INX H ;HLHL+1 продвижение указателя ячеек

 DCR C ;CC–1 подсчёт ячеек и установка Z

 JNZ M00 ;переход к M00, если не выполнено Z=1

 HLT ;останов, если Z=1

На основе команды декремента DCR C здесь организуется счётчик проходов цикла, а на основе команды инкремента регистровой пары INX H реализуется модификация указателя ячеек рабочей области памяти. Вместо этой команды можно с тем же успехом применить команду DCX H, при этом число исходного значения указателя должно быть 0C45h.

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

Команды логических операций обеспечивают логические операции над соответствующими (имеющими одинаковый номер) битами однобайтных операндов. Влияния битов друг на друга типа переноса или заёма, имевшие место при арифметических операциях, в логических операциях отсутствуют. Поэтому, за счёт влияния логических команд на все биты признаков, биты CY и AC после этих команд всегда будут сброшены в 0.

Основные логические команды обеспечивают логические операции – “И” (конъюнкция), – “ИЛИ” (дизъюнкция), – “исключающее ИЛИ” (сложение по модулю два) в соответствии с правилами логики (Табл.10). Эти команды выполняются по общей схеме арифметическо-логических команд: первый операнд и результат операции всегда хранятся в аккумуляторе, а второй операнд может быть выбран модификациями команд: либо в любом из регистров процессора; либо в ячейке памяти M, хранящей адрес в HL; либо непосредственно в составе самой команды.

Таблица  1.10.

Результаты логических операций

Исходные числа

0

0

0

0

0

0

1

0

1

1

1

1

1

1

0

Команда CMA обеспечивает логическую операцию “НЕ” над операндом из аккумулятора. Выполняется инвертирование всех битов и результат остаётся в аккумуляторе. Если например, до выполнения команды в аккумуляторе было число 10110101, то после команды CMA там будет число 01001010.

Команды типа ANA r, ORA r, XRA r обеспечивают операции “И”, “ИЛИ”, “исключающее ИЛИ” соответственно, притом, что второй операнд адресуется регистровым способом через выбор регистра r из регистров A, B, C, D, E, H, L.

Команды типа ANA M, ORA M, XRA M обеспечивают операции “И”, “ИЛИ”, “исключающее ИЛИ” соответственно, притом, что второй операнд адресуется косвенно-регистровым способом через адрес подготовленный предварительно в регистровой паре HL.

Команды типа ANI d8, ORI d8, XRI d8 обеспечивают операции “И”, “ИЛИ”, “исключающее ИЛИ” соответственно, притом, что второй операнд адресуется прямым способом то есть является вторым байтом d8 в составе самой команды.

Команды операций “И” используется когда требуется, например, оценить состояние какого-то одного из битов в составе байта.

Пример 1.42

Требуется оценить значение бита D4 в составе байта из регистра B.

Адрес Число Мнемокод Комментарий

0800 78 MOV A,B ; поместить в A исследуемый байт

0801 E6 10  ANI 10h   ; выполнить операцию (A)(A)00010000b

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

Команда операции “И” может также быть применена для сброса в ноль какого-то одного или нескольких битов в составе байта.

Пример 1.43

Требуется сбросить в ноль бит D6 в составе байта из регистра B..

Адрес Число Мнемокод Комментарий

0800 78 MOV A,B ; поместить в A исследуемый байт

0801 E6 BF  ANI BFh   ; выполнить операцию (A)(A)10111111b

Команды операций “ИЛИ” уместно применить в случае необходимости установить в единицу один из битов в составе байта.

Пример 1.44

Требуется установить в единицу бит D2 в составе байта из регистра B.

Адрес Число Мнемокод Комментарий

0800 78 MOV A,B ; поместить в A исследуемый байт

0801 F6 02  ORI 02h   ; выполнить операцию (A)(A)00000010b

Команда XRA A эффективна для очистки аккумулятора, так как занимает в памяти только один байт и выполняется всего за 4 такта.

Команды сравнения 

Программисту часто бывает необходимо организовать сравнение двух чисел, для того чтобы по результату этого сравнения выбрать один из возможных путей продолжения программы. Такое сравнение однобайтных чисел реализуется посредством оценки разности сравниваемых чисел. Командами сравнения CMP r, CMP M и CPI d8 организуется обычное однобайтное арифметическое вычитание (как в командах SUB r, SUB M и SUI d8), устанавливающее все биты признаков. Но в отличие от команд вычитания команды сравнения не сохраняют в аккумуляторе сам результат вычитания, поскольку целью сравнения является показ признаков вычитания. Имея состояния битов переноса CY и нулевого результата Z, и применяя команды условных ветвлений в программе, умеющих оценивать состояния признаков и выбирать пути продолжения программы, программист может воспользоваться результатами сравнения.

Три варианта команд сравнения различаются способом адресации операнда уменьшаемого. Команда CMP r адресует уменьшаемое в регистре r; команда CMP M адресует уменьшаемое в ячейке памяти M, адрес которой будет взят из регистровой пары HL; команда CPI d8 адресует уменьшаемое прямым определением его через байт d8 в составе команды.

Пример 1.45

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

Метка Мнемокод Комментарий

MOV A,E ; подготовить в A 1-й байт для сравнения из E

CMP C ; выполнить вычитание F(CY,Z)(A)–(C)

JZ M1   ; перейти к M1, если числа равны (Z=1)

JMP M2   ; иначе перейти к M2

……………………………..

M1:

……………………………..

M2:

……………………………..

Пример 1.46

Требуется сравнить число в регистре D с числом 36h и записать большее в аккумулятор.

Метка Мнемокод Комментарий

MOV A,D ; подготовить в A 1-й байт для сравнения из D

CPI 36h ; выполнить вычитание F(CY,Z)(A)–36h

 JC M1 ; к M1, если в результате операции потребовался

 ;заём, то есть он – отрицательный: (A)<36h

 HLT ; иначе, когда останов (A)≥36h

M1: MVI A,36h ; записать 36h в A

 HLT ; останов

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

Команды сдвига 

Команды выполняют сдвиг содержимого аккумулятора на один разряд в указанном кодом команды направлении. Арифметически сдвиг двоичного числа влево даёт его удвоение, а сдвиг двоичного числа вправо приводит к уменьшению числа в два раза. Вместе с битами аккумулятора в этих операциях участвует бит CY регистра признаков. Причём, возможны два варианта участия бита CY в операциях сдвига. Схемы выполнения команд сдвигов приведены на рис. 1.2.

Рис.1.2. Выполнение операций сдвига

Команды сдвига влево RAL и RLC обеспечивают одновременное перемещение всех битов числа на один разряд влево: всякий бит с номером m устанавливается равным биту с номером m+1. Различия этих команд связаны с поведением бита CY при сдвиге. В команде RLC выполняется обычный сдвиг влево, при котором содержимое старшего бита уходит в бит CY, а прежнее состояние бита CY теряется. Получается, что команда RLC выполняет сдвиг без учёта предшествующего сдвигу состояния бита CY. В команде RAL бит CY становится как бы девятым битом сдвигаемого байта и его прежнее состояние не теряется, а сдвигается в бит D0. Получается, что команда RAL выполняет сдвиг с учётом состояния бита CY, предшествующего сдвигу. На этой основе можно организовывать сдвиги многобайтных чисел.

Команды сдвига вправо RAR и RRC обеспечивают одновременное перемещение всех битов числа на один разряд вправо: всякий бит с номером m устанавливается равным биту с номером m–1. Различия этих команд связаны с поведением бита CY при сдвиге. В команде RRC выполняется обычный сдвиг вправо, при котором содержимое младшего бита уходит в бит CY, а прежнее состояние бита CY теряется. Получается, что команда RRC выполняет сдвиг без учёта предшествующего сдвигу состояния бита CY. В команде RAR бит CY становится как бы девятым битом сдвигаемого байта и его прежнее состояние не теряется, а сдвигается в бит D7. Получается, что команда RAR выполняет сдвиг с учётом состояния бита CY, предшествующего сдвигу.

Пример 1.47

Требуется уменьшить в 2 раза двухбайтное число, хранящееся в регистровой паре HL.

Метка Мнемокод Комментарий

ANA A ; сброс бита CY

MOV A,H   ; загружаем для сдвига старший байт

RAR    ; выполняем сдвиг вправо или деление на 2

MOV H,A   ; сохраняем старший байт результата

MOV A,L   ; загружаем для сдвига младший байт

RAR ; сдвиг вправо с учётом переноса от

 ;предыдущего сдвига

MOV L,A   ; сохраняем младший байт результата

В результате этих операций в регистровой паре HL окажется число вдвое меньше исходного.

Специальные арифметическо-логические команды

Специальные арифметическо-логические команды не имеют операндов и занимают в памяти всего один байт.

Команда DAA осуществляет десятичную коррекцию результата операции однобайтного сложения. Она преобразует двоичный код содержимого аккумулятора в двоично-десятичный код. Это помогает интерпретировать результат сложения в привычной десятичной форме.

Алгоритм выполнения процессором команды DAA представлен на рис.9.1.

Если воспользоваться известными командами Бейсика, то схему выполнения команды DAA можно представить в следующем виде:

IF ((A)0Fh)>09h OR AC=1 THEN (A)(A)+06h

IF ((A)F0h)>90h OR CY=1 THEN (A)(A)+60h

Пример 1.48

Метка Мнемокод Комментарий

MVI A,13   ; первое слагаемое подготавливаем в A

MVI B,77  ; второе слагаемое подготавливаем в B

 ADD B ; сложение: A=13+77=8A AC=0 CY=0

 DAA     ; выполняем коррекцию числа в аккумуляторе

После этого в аккумуляторе окажется число 90.

Рис. 1.3. Блок-схема алгоритма выполнения команды DAA

Другие специальные арифметическо-логические команды предназначены работы с битом переноса CY регистра признаков.

Команда STC устанавливает в 1 бит переноса CY регистра признаков.

Команда CMC инвертирует бит переноса CY регистра признаков.

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

Часто в ходе выполнения процессором какой-то последовательности основных действий возникает необходимость переключиться на выполнение другой последовательности действий, а выполнив её снова вернуться к продолжению основной последовательности действий. Успешная реализация такого рода переключений предполагает наличие возможности сохранения в памяти состояния регистров процессора на момент использования этих регистров в действиях, на которые выполнено переключение. Сохранение необходимо для того, чтобы сначала вернуть сохранённое состояние регистров назад в процессор, а затем только вернуться к продолжению основных действий.

Часто в ходе выполнения процессором какой-то основной программы возникает необходимость переключаться на выполнение разных подпрограмм, а выполнив их снова возвращаться к продолжению основной программы (см. пример на рис.8.1). Успешная реализация такого рода переключений предполагает наличие возможности сохранения в памяти состояния регистров процессора на момент использования этих регистров в подпрограммах.

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

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

Стеком называется структура данных, в которой новый элемент всегда записывается в её начало (вершину) и очередной читаемый элемент также всегда выбирается из её начала. Примером стека может служить магазин пистолета.

Структура данных стекового типа организуется в оперативной памяти. Начало области стека (вершина стека) определяется через адрес, который процессор хранит всегда в своём регистре SP, который поэтому называется указателем стека. Механизм взаимодействия процессора со стеком предполагает автоматическое изменение адреса в SP при каждом очередном обращении процессора к стеку: при записи в стек очередного байта происходит автоматический декремент указателя стека, а при чтении из стека очередного байта происходит автоматический инкремент указателя стека. За счёт того, что адрес памяти при стековых операциях формировать не приходится (он всегда имеется в регистре SP) время обращения к памяти сильно сокращается по сравнению с обычными операциями.

Для организации стековых операций в системе команд процессора 8080 имеются команды

  •  инициализации стека,
  •  записи в стек,
  •  чтения стека,
  •  обмена стека с регистровой парой HL.

Инициализация стека заключается в исходной установке его вершины, то есть в загрузке адреса в регистр указателя стека SP. Она может быть выполнена одной из двух команд. Либо при помощи команды двухбайтной пересылки LXI SP,d16, представленной в группе команд пересылок. В этой команде вершина стека определяется непосредственно числом d16, которое является её адресом. Другой способ инициализации стека обеспечивается командой SPHL, которая загружает указатель стека содержимым регистровой пары HL:

(SP)(HL)

Команды записи в стек – PUSH B, PUSH D, PUSH H, PUSH PSW. Они обеспечивают запись в стек последовательно двух байт из выбираемых командами регистровых пар.

Одной из пар в данном случае может быть пара, именуемая в мнемонике PSW (Processor Status Word) и состоящая из аккумулятора A (в качестве младшего регистра в паре) и регистра признаков F. Общая схема выполнения команд записи из регистровой пары rp в стек: stack(rp). При выполнении команд происходят последовательно следующие операции:

1. Декремент регистра SP для продвижения по стеку вперёд: (SP)(SP)–1

2. Запись в стек байта старшего регистра:  M(SP)старший регистр

3. Декремент регистра SP для продвижения по стеку вперёд: (SP)(SP)–1

4. Запись в стек байта младшего регистра:  M(SP)младший регистр

В результате после выполнения команды адрес в указателе стека уменьшается на 2, и вершина стека сдвигается в сторону младших адресов.

Команды чтения стека – POP B, POP D, POP H, POP PSW. Они обеспечивают возврат из стека в выбираемую командами регистровую пару того, что туда отправлялось командами записи. При выполнении команд происходят последовательно следующие операции:

1. Чтение байта из стека в младший регистр: M(SP) младший регистр

2. Инкремент регистра  для продвижения по стеку назад: SP (SP)(SP)+1

3. Чтение байта из стека в старший регистр: M(SP) старший регистр

4.  Инкремент регистра  для продвижения по стеку назад: (SP)(SP)+1

В результате после выполнения команды адрес в указателе стека увеличивается на 2, и вершина стека сдвигается в сторону старших адресов.

Команда XTHL обеспечивает обмен двухбайтными операндами. Первый операнд читается из вершины стека, а второй операнд берётся из регистровой пары HL:(HL)stack. В результате данной операции содержимое регистра SP остаётся без изменений. По своему формату команда является однобайтной. Поэтому фаза выборки команды займёт всего один машинный цикл. Зато для фазы выполнения потребуется четыре машинных цикла: сначала – на два чтения из стека, затем на две записи в стек. И в целом, данная команда оказывается самой продолжительной по времени среди всех возможных команд. На её выполнение процессор затрачивает 18 машинных тактов.

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

Пример 1.50

Метка Мнемокод Комментарий

;******************** Основная программа

LXI SP,1FFFh ; Установка вершины стека

…………………………….

LXI B,03E8h ;  Определение задержки – 1с (3E8h=1000мс)

CALL TIX    ; Вызов подпрограммы временной задержки

MOV B,A    ; продолжение основной программы

…………………………….

;

;******************** Подпрограмма временной задержки

; Вход: BC – интервал временной задержки в мс

TIX: PUSH B ; сохранение в стеке (BC)

TI2: PUSH PSW ; сохранение в стеке (A)&(F)

PUSH D  ;сохранение в стеке (DE)

; ******************** Организация цикла программной паузы

XRA A

TI1: MVI D,80

TI0: DCR D

JNZ TI0

DCX B ; BC=BC–1

 CMP B

JNZ TI1

;*********************

POP D ; чтение из стека в (DE)

POP PSW ; чтение из стека в (A)&(F)

POP B ; чтение из стека в (BC)

RET  ;возврат из подпрограммы

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

 Команды ввода и вывода

Наряду с процессором и памятью к основным элементам микро-ЭВМ можно отнести внешние устройства. Внешние устройства – это те устройства для управления которыми рассчитана микро-ЭВМ: клавиатура, дисплей, динамик, накопители внешней памяти и так далее, включая управляемые объекты систем автоматического управления. Подключение таких различных устройств к одной общей универсальной шине микро-ЭВМ реализуется через интерфейсы. Интерфейс представляет собой совокупность аппаратных и программных средств, обеспечивающих сопряжение внешних устройств с микро-ЭВМ. Элементы аппаратных средств интерфейса (контроллеры) содержат в своём составе программно-доступные регистры, в которые можно записывать байты данных из процессора или из которых можно читать байты данных в процессор. Регистры контроллеров обеспечивают буферное хранение информации на пути между процессором и внешним устройством, поэтому их ещё часто называют портами внешних устройств.

Взаимодействие процессора 8080 с портами внешних устройств отличается от взаимодействия процессора с ячейками памяти. Адреса портов не 16-разрядные, а 8-разрядные. Адресное пространство портов, не является составной частью общего адресного пространства микро-ЭВМ. Вместо этого, в микро-ЭВМ с процессором 8080 имеется два адресных пространства:

  •  для адресации памяти на основе 16-разрядных адресов в объёме 216=65536 возможных адресов;
  •  для адресации портов интерфейсов внешних устройств на основе 8-разрядных адресов в объёме 28=256 возможных адресов.

Для обеспечения обмена процессора с портами в составе системы команд имеются всего две команды: одна для чтения порта (чтобы не путать эту операцию с чтением памяти, её называют вводом) и одна для записи в порт (вывод). В обеих случаях со стороны процессора в обмене участвует аккумулятор.

Команда IN port обеспечивает выполнение операции ввода в аккумулятор процессора байта из порта port прямо адресованного вторым байтом команды. В процессе выполнения этой двухбайтной по формату команды в рамках машинного цикла ввода происходит следующее. Сначала второй байт команды устанавливается на адресные линии в качестве адреса, причём, этот байт дублируется как в старших так и в младших восьми разрядах адресных линий: ABport. Этот адрес дешифрируется логикой микро-ЭВМ. Затем соответствующий выбранный порт устанавливает байт своего содержимого на линии данных, а процессор этот байт принимает в свой аккумулятор:(A)DB.

Пример 1.51

Требуется ввести в аккумулятор содержимое порта, имеющего адрес F1h.

Адрес Число Мнемокод Комментарий

0800 DB F1   IN F1 ;

Команда OUT port обеспечивает выполнение операции вывода байта из аккумулятора процессора в порт port прямо адресованный вторым байтом команды. В процессе выполнения этой двухбайтной по формату команды в рамках машинного цикла вывода происходит следующее. Сначала второй байт команды устанавливается на адресные линии в качестве адреса, причём, этот байт дублируется как в старших так и в младших восьми разрядах адресных линий: ABport. Вместе с ним на линии данных устанавливается байт из аккумулятора процессора: DB(A). Адрес дешифрируется логикой микро-ЭВМ. Затем соответствующий выбранный порт принимает байт с линий данных в свой регистр.

Пример 1.52

Требуется вывести число 13h в порт, имеющий адрес F3h.

Адрес Число Мнемокод Комментарий

0800 3E 13   MVI A,13 ; подготовка числа в аккумуляторе

0802 D3 F3   OUT F3   ; вывод из аккумулятора в порт F3

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

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

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

Команда EI обеспечивает установку триггера разрешения прерываний и возможность прерывать процессор запросами внешних устройств. Команда DI обеспечивает обратное действие – сброс триггера разрешения прерываний и блокирование реакций процессора на запросы от внешних устройств.

Команда перевода процессора в состояние останова

Основное состояние нормально работающего процессора – состояние выполнения программы. Вместе с тем, часто по условиям алгоритма управления бывает необходимо остановить процессор и включать его в работу только в те моменты, когда это необходимо для обслуживания прерываний от внешних устройств. Это состояние процессора так и называется – останов. Переход в состояние останова обеспечивается однобайтной командой программы – HLT. Процессор прочитает эту команду, дешифрирует её, и поскольку команда однобайтная, инкрементирует свой счётчик команд: (PC)(PC)+1. Затем начнётся фаза выполнения команды, особенность которой состоит в том, что после неё очередная команда выбираться из памяти уже не будет. Вместо этого процессор выполнит машинный цикл останов: перевод линий адреса и линий данных шины в высокоимпедансное состояние и выдачу сигнала WAIT. И далее перейдёт в состояние останова.

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

Биты признаков команда HLT не изменяет и требует 4 такта времени.

Команда NOP

Когда требуется, чтобы процессор сделал просто паузу между какими- то операциями, можно эффективно применять предназначенную для этого команду NOP.

Команда NOP не выполняет за один свой машинный цикл никаких программных операций кроме инкрементирования счётчика команд, затрачивая на это 4 такта.

Длительность нужной задержки может определяться количеством повторённых команд NOP.


2. Программирование процессора 8080

Лабораторная работа № 1.1

Учебная микро-ЭВМ УМК-80

Цель работы: ознакомиться с возможностями, архитектурной организацией, средствами Монитора учебного микропроцессорного комплекта УМК-80, а также освоить приёмы работы с УМК-80 в пошаговых режимах.

Краткие сведения из теории

Назначение УМК-80

Учебный микропроцессорный комплект (УМК-80) представляет собой законченную микро-ЭВМ и предназначен для:

  •  изучения основ проектирования и обслуживания микро-ЭВМ, построенных на базе микропроцессора I8080 (КР580ИК80);
  •  обучения основам программирования микропроцессора I8080;
  •  разработки и изготовления макетов блоков управления технологическим оборудованием.

Структура  УМК-80 и распределения адресного пространства

Структурная схема УМК-80 представлена на рис.2.1.

Микропроцессор построен на основе бис (большая интегральная микросхема) 8080 (аналог – КР580ВМ80), которая дополнена синхрогенератором (на основе микросхемы 8224 (КР580ГФ24)) и элементами логики схемы управления шиной (системным контроллером).

Основная память УМК-80 представлена:

  •  оперативной памятью (ОЗУ) на основе двух микросхем К541РУ2 общей ёмкостью 1К байт;
  •   постоянной перепрограммируемой памятью (РПЗУ) на основе двух микросхем К573РФ1 ёмкостью по 1К байт каждая.

Одна из микросхем РПЗУ содержит заводское системное программное обеспечение данной микро-ЭВМ (программу Монитор). Другая микросхема РПЗУ предназначена для потребностей пользователя и может быть им запрограммирована. Распределение адресного пространства основной памяти представлено в табл. 2.1.

Рис. 2.1. Структурная схема УМК-80

Таблица 2.

Распределение адресного пространства памяти в УМК-80

Поле адресов

Назначение

0000–03FF

РПЗУ с программой Монитора

0400–07FF

РПЗУ пользователя

0800–0BFF

ОЗУ

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

Пульт управления предназначен для реализации взаимодействия оператора с микро-ЭВМ. Он состоит из клавиш и индикаторов.

Клавиатурная часть пульта представлена следующими элементами:

  •  , , ... – группа из 16 информационных клавиш;
  •  , , , , , , , – группа из 8 директивных клавиш, управляющих выбором команд Монитора;
  •   – клавиша общего аппаратного сброса микро-ЭВМ;
  •   – клавиша формирования запроса прерывания;
  •   – переключатель на пошаговый режим работы и обратно;
  •   – переключатель выбора шага в пошаговом режиме;
  •   – клавиша для управления шагами в пошаговом режиме;
  •   – переключатель включения сетевого напряжения.

Таблица 2. 2

Распределение адресного пространства портов внешних устройств в УМК-80

Адрес

Направл

Назначение

F8

Вывод

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

F9

Вывод

Регистр сегментов дисплея

FA

Ввод

Регистр чтения клавиатуры (код столбца нажатой клавиши сканируемой строки)

80

Ввод/вывод

Регистр данных контроллера 8251

81

Ввод

Регистр состояния контроллера 8251

81

Вывод

Регистр команд контроллера 8251

Индикаторная часть пульта представлена следующими элементами:

  •   дисплей из 6 восьмисегментных индикаторов для индикации шестнадцатеричных кодов адресов, команд, данных;
  •  16 светодиодов индикации состояния адресных линий перед выполнением каждого шага в пошаговом режиме;
  •  8 светодиодов для индикации состояния шины данных линий данных перед выполнением каждого шага в пошаговом режиме;
  •  8 светодиодов для индикации характеристик предстоящего в следующем шаге машинного цикла с помощью выставляемого в 1 такте этого цикла слова состояния процессора;
  •  3 светодиода индикации аварии УМК-80 связанной с исчезновением питания.

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

Интерфейс связи с компьютером служит  для  последовательного обмена данными между УМК-80 и компьютером с  целью  автоматизировать компьютерными средствами  процесс  программирования  УМК-80. Построен интерфейс связи на базе микросхемы  универсального  синхронно-асинхронного приёмопередатчика 8251  (аналог КР580ВВ51). Для выхода в линию связи стандарта RS-232C  применён  преобразователь RS-232C↔ТТЛ.

Управление микро-ЭВМ средствами Монитора

Системный Монитор – это программа, запускаемая сразу после включения микро-ЭВМ или общего системного сброса. Она берёт на себя управление диалогом пользователя с микро-ЭВМ, обеспечивая пользователя необходимым сервисом на этапе подготовки и отладки его программ, то есть до передачи этого управления программе пользователя. Системный Монитор УМК-80 реализует следующие функции:

  •  чтение и модификацию содержимого основной памяти;
  •  чтение и модификацию содержимого регистров процессора;
  •  запуск программ пользователя;
  •  вычисление контрольной суммы выбранной области памяти;
  •  заполнение области памяти (массива) константой.

Пользователю Монитор предоставляет набор команд для управления микро-ЭВМ. Эти команды вводятся в определённом формате и запускаются на выполнение информационными и директивными клавишами пульта. При этом вводимые данные и результат выполнения команды отображаются на дисплее. Общий формат для команд Монитора следующий:

КОП [ПАР1] [ ПАР2] [ ПАР3]

где: КОП – идентификатор команды, соответствующий одной из нажатых  клавиш; ПАР1, ПАР2, ПАР3 – параметры команды (до трёх); ,  – директивные клавиши. Причём, параметры заключённые в скобки являются необязательными.

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

Далее представлены все команды Монитора.

Чтение и модификация содержимого памяти

 ХХХХ 

где: ХХХХ – адрес ячейки памяти.

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

Чтение и модификация содержимого регистров

 Х 

где: Х – идентификатор регистра соответствующего клавише

 При этом 16-разрядные регистры вызываются на индикацию побайтно:

– старший байт программного счётчика (PC);

– младший байт программного счётчика (PC);

– старший байт указателя стека (SP);

– младший байт указателя стека (SP);

– регистр признаков микропроцессора (результатов выполнения операций).

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

Запуск программы пользователя

[А1] [ А2]

где А1 – стартовый адрес выполняемой программы; А2 – адрес точки останова.

Если задан только А1, программа выполняется без остановок. Если А1 опущен (вместо него введён ), то программа начинается с текущего значения счётчика команд и может быть прервана в точке А2. В момент останова на дисплей выводится содержимое счётчика команд и запоминаются значения всех регистров, которые можно просмотреть затем из Монитора.

Заполнение массива константой

 А1  А2  Х

где А1 – адрес начала массива ОЗУ; А2 – адрес конца массива ОЗУ; Х – константа.

Копирование областей памяти

 А1  А2  А3 

где А1 – адрес начала копируемого массива; А2 – адрес конца копируемого массива; А3 – адрес начала области куда будет скопирован массив.

Вычисление контрольной суммы массива

 А1  А2 

где А1 – адрес начала массива; А2 – адрес конца массива.

Пошаговые режимы выполнения программы

Командный и машинный циклы, машинные такты

Процесс выполнения любой программы состоит из последовательного выполнения отдельных команд этой программы. Отработку процессором одной команды называют командным циклом.

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

Каждый машинный цикл состоит из нескольких (до 4, в зависимости от типа машинного цикла) элементарных последовательных внутренних операций процессора. Эти операции называют машинными тактами. Время их выполнения всегда одинаково и равно периоду тактовых импульсов процессора.

Таблица 2.3

Типы машинных циклов значения слова состояния PSW процессора 8080

Тип

7

6

5

4

3

2

1

0

MEMR

INP

M1

OUT

HLTA

STACK

INTA

Выбор команды

1

0

1

0

0

0

1

0

Чтение памяти

1

0

0

0

0

0

1

0

Запись в память

0

0

0

0

0

0

0

0

Чтение стека

1

0

0

0

0

1

1

0

Запись в стек

0

0

0

0

0

1

0

0

Ввод из порта

0

1

0

0

0

0

1

0

Вывод в порт

0

0

0

1

0

0

0

0

Прерывание

0

0

1

0

0

0

1

1

Останов

1

0

0

0

1

0

1

0

Прер-е из ост-ва

0

0

1

0

1

0

1

1

Отражение типа машинного цикла через слово состояния

Особенностью машинных циклов процессора 8080 является то, что любой из них начинается с такта выдачи на линии данных байта  информации  о  характеристиках  этого  машинного  цикла (табл. 2.4). Этот байт записывается во внешний регистр состояния системного контроллера и используется для формирования сигналов управления текущим машинным циклом.

Таблица 2.4

Формат слова состояния PSW 

№ бита

Обозн.

Назначение

0

INTA

Подтверждение прерывания

1

Запись в память или вывод в регистр интерфейса

2

STACK

Обращение к стеку

3

HLTA

Подтверждение останова

4

OUT

Вывод в порт (регистр интерфейса)

5

M1

М1 – прием из памяти первого байта команды

6

INP

Ввод из порта (регистра интерфейса)

7

MEMR

Чтение из памяти

Пошаговые режимы

Пошаговые режимы предназначены для практического изучения выполнения процессором отдельных команд, а также для отладки программ. Он обеспечивается схемой пошагового выполнения (рис.1.1) и средствами системного Монитора.

Средствами пошагового выполнения программ выполняется перевод процессора в состояние останова после выполнения очередного шага. При этом производится выдача на соответствующие светодиоды информации о состоянии линий данных, адреса и регистра состояния в момент останова, т.е. перед началом выполнения следующего шага. Индицируется состояние:

  •  линий данных;
  •  линий адреса;
  •  битов регистра состояния системного контроллера.

Переход в режим пошагового выполнения программ и возврат из него осуществляется переключателем . В данной микро-ЭВМ возможны два варианта пошагового выполнения программ в зависимости от величины шага:

  •  шаг равен одной команде;
  •  шаг равен одному машинному циклу команды.

Выбор одного из пошаговых режимов выполняется переключателем . Нажатое положение переключателя соответствует выбору шагов машинного цикла, а отжатое – выбору шагов команд.

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

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

  •  прервать выполнение программы нажатием клавиши ;
  •  переключением  выйти из пошагового режима;
  •  нажать клавишу ;
  •  обычным образом просмотреть из Монитора интересующие регистры и ячейки памяти;
  •  переключением  вернуться в пошаговый режим;
  •  запустить программу от текущего содержимого счётчика команд, при том вводить стартовый адрес от останова необязательно.

Для продолжения выполнения шагов необходимо нажимать клавишу . В ходе выполнения шагов появляется возможность контролировать последовательность выполнения процессором его действий по интерпретации команд:

  •  для шагов команд – последовательность выполнения команд программы;
  •  для шагов машинных циклов – последовательность выполнения обращений к шине при выполнении текущих команд.

Информация для пользователя в пошаговых режимах  отображается в двоичном числовом виде при помощи  светодиодов  (двоичной  1 соответствует свечение  светодиода).  Монитор  эту  же  информацию отображает в виде шестнадцатеричных чисел: для компактности представления длинные двоичные числа группируются по 4  разряда  (декадно), образуя шестнадцатеричные  цифры.  Соответствие  двоичных комбинаций шестнадцатеричным, а также десятичным цифрам  показано в табл. 2.5.: b (binary) – двоичная; h (hexadecimal) – шестнадцатеричная; d (decimal) – десятичная.

Порядок выполнения работы

Заполнение памяти средствами Монитора

1. При помощи мониторной команды П записать число 5Ah в ячейки 0800h и 0B00h. Очистить всю область ОЗУ (см. табл.2.1) с  применением мониторной команды ЗК.

Определение исходного положения области стека

2. Исследовать  содержимое  всех  регистров  микропроцессора сразу после запуска системного Монитора (нажатие клавиши СБ).  По значению регистра SP определить какую область ОЗУ  Монитор  отводит под стек.

Таблица 2. 5

Представление чисел в различных системах счисления

Decimal

Binary

Hexadecimal

0

0000

0

1

0001

1

2

0010

2

3

0011

3

4

0100

4

5

0101

5

6

0110

6

7

0111

7

8

1000

8

9

1001

9

10

1010

A

11

1011

B

12

1100

C

13

1101

D

14

1110

E

15

1111

F

Ввод программы средствами Монитора

3. По табл. 1.6 изучить  команды  пересылок: MOV r1,r2; MVI r,d8; STAX B. Ввести в ОЗУ коды программы 2.1.

Программа 2.1.

Адрес Число  Метка Мнемокод Комментарий

0800 3E 09   MVI A,09 ;поместить число 09 в регистр A

0802 47    MOV B,A ;переслать содержимое регистра A в       ;регистр B

0803 4F    MOV C,A ;переслать содержимое регистра A в       ;регистр C

0804 02    STAX B ;число из регистра A записать в память       ;по адресу в регистровой паре BC

0805 3E 0A    МVI A,0A ;поместить число 0A в регистр A

0807 47    MOV B,A  ;переслать содержимое регистра A в       ;регистр B

0808 4F    MOV C,A ;переслать содержимое регистра A в       ;регистр C

0809 02    STAX B ;число из регистра A записать в память      ;по адресу в регистровой паре BC

080A 3E 00   MVI A,00 ;поместить число 00 в регистр A

080C 47    MOV B,A ;переслать содержимое регистра A в       ;регистр B

080D 4F    MOV C,A ;переслать содержимое регистра A в       ;регистр C

080E FF    RST 7 ;вернуться в Монитор

Запуск программы средствами Монитора без точек останова

4. Запустить программу 2.1 без точек  останова  и  проверить результат её выполнения.

Приёмы отладки программы с применением точек останова

5. Запустить программу 2.1 с одной точкой останова в  момент, когда в ячейке 0909 должно быть число 09h. После останова  проверить содержимое регистров и этой ячейки. Затем продолжить  выполнение от места останова.

Приёмы отладки программы с применением пошагового режима

6. Перевести микро-ЭВМ в пошаговый режим работы с шагом  равным команде, запустить программу 2.1 без  точек  останова.  После четвёртой команды проконтролировать содержимое регистров и  модифицируемой ячейки памяти, затем вернуться в пошаговый режим и завершить программу 2.1 от места, где она была прервана.

Содержание отчёта

Отчёт должен содержать:

  •  функциональную схему УМК-80;
  •  текст программы 2.1 с описанием результатов просмотра в точках останова;
  •  карту памяти УМК-80.

Контрольные вопросы

  1.  Объясните назначения элементов функциональной схемы УМК-80.

2. Каков объём основной памяти УМК-80? На какие области поделена основная память УМК-80?

3. Каким может быть максимальный размер основной памяти микроЭВМ с процессором 8080?

4. Какие внешние устройства имеются в составе УМК-80 и как к ним программно обращаться?

5. Что такое системный Монитор? Какими возможностями обеспечивает пользователя монитор УМК-80?

6. Для каких целей применяются пошаговые режимы? Когда следует использовать режим шагов команд, а когда – режим шагов машинных циклов?

7. Каковы ограничения на использование пошаговых режимов?

8. Что такое машинный цикл? Каким образом процессором 8080 определяется тип машинного цикла и как это можно контролировать в УМК-80?

Лабораторная работа № 1.2

Учебная микро-ЭВМ УМПК-80

Цель работы: ознакомиться с возможностями, архитектурной организацией, средствами Монитора учебной микро-ЭВМ УМПК-80, а также освоить и приёмы работы в пошаговых режимах.

Краткие сведения из теории

Назначение УМПК-80

Учебная микро-ЭВМ типа УМПК-80 предназначена для ознакомления с особенностями построения микро-ЭВМ на микропроцессоре 8080 (аналог КР580ВМ80). Она является легким в освоении и удобным средством для отладки относительно небольших (до 0,5К байт) программ пользователя. Открытая конструкция и наличие большого количества средств индикации позволяют наглядно исследовать процесс преобразования и передачи информации в микро-ЭВМ.

Структура  УМПК-80 и распределения адресного пространства

Структурная схема УМПК-80 представлена на рис.2.2.

Микропроцессор построен на основе бис (большая интегральная микросхема) КР580ВМ80, которая дополнена синхрогенератором и элементами логической схемы управления шиной (системным контроллером).

Основная память УМПК-80 представлена:

  •  оперативной памятью (ОЗУ) на основе двух микросхем К541РУ2 общей ёмкостью 1Кбайт;
  •  постоянной памятью (ПЗУ) на основе микросхемы КР573РФ2 ёмкостью 2Кбайта.

В ПЗУ содержится системное программное обеспечение данной микро-ЭВМ (программа Монитор и другие сервисные программы). Распределение адресного пространства основной памяти представлено в табл.2.7.

Следует отметить, что область ОЗУ для программ пользователя 0800–0AFF в микро-ЭВМ УМПК-80 аппаратно защищена от записи из программ пользователя, то есть использовать эту область для хранения своих данных пользователь не может. Хранить данные следует в области 0B00–0BB0. Причем, рассчитывая, что в этой же области Монитор определяет стековую память (вершина стека – 0BB0).

Рис. 2.2. Структурная схема УМПК-80.

Таблица 2.7

Распределение адресного пространства памяти в УМПК-80

Адреса

Назначение

0000–07FF

П/п Монитора и сервисные программы

0800–0AFF

ОЗУ пользователя: область для программ, доступная для записи только из Монитора;

0B00–0BB0

ОЗУ пользователя: область для данных и стек

0BB1–0BFF

ОЗУ данных для п/п стандартного Монитора:

0BF0–0BF5

область недекодированных сообщений дисплея – UDSP

0BFA–0BFF

область декодированных сообщений дисплея – DDSP

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

  •  одной команде программы;
  •  одному машинному циклу команды.

При работе по шагам — командам обеспечивается останов и возврат в Монитор после каждой очередной команды программы пользователя. Таким образом, появляется возможность контролировать ход выполнения программы и отслеживать ошибки.

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

  •  16 – для линий адреса,
  •  8 – для линий данных,
  •  6 – для линий управления.

Таким образом, наблюдая отдельные машинные циклы команд, можно исследовать ход выполнения процессором этих команд.

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

Таблица 2.8

Распределение адресного пространства портов внешних устройств в УМПК-80

Адрес

Направл.

Обозн

Назначение

18

Ввод

KeyRg

Регистр чтения клавиатуры

20

Ввод

InRg

Внешний регистр ввода

28

Вывод

ScnRg

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

30

Вывод

OutRg

Внешний регистр вывода

38

Вывод

SegRg

Регистр сегментов дисплея

80

Вывод

RngRg

Регистр вывода звукового сигнала

Пульт управления предназначен для реализации взаимодействия оператора с микро-ЭВМ. Он состоит из клавиш, объединенных в клавиатурную матрицу (8 строк x 3 столбца), и шести индикаторов дисплея. Управление клавиатурной матрицей и индикаторами дисплея реализовано путем сканирования, то есть путем циклического поочередного выбора строк клавиатурной матрицы и индикаторов дисплея. Выбор выполняется процессором через запись соответствующего кода в регистр сканирования. При выборе очередной строки клавиатурной матрицы процессор через регистр клавиатуры принимает код состояния клавиш выбранной строки для анализа наличия их нажатия. При выборе очередного индикатора дисплея процессор выводит через регистр сегментов дисплея код изображения на этом индикаторе. Описанные выше действия по управлению клавиатурной матрицей и дисплеем реализованы программой Монитора. В состав клавиатурной матрицы объединены все клавиатурные клавиши кроме трех:  (шаг цикла),  (стоп) и  (сброс). Клавиша  функционально относится к схеме управления шаговыми режимами. Клавиша  предназначена для формирования запроса прерывания процессора с целью прерывания любых действий процессора для возврата в Монитор. Клавиша  предназначена для формирования сигнала на вход процессора RESET для сброса процессора в исходное состояние.

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

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

Для реализации параллельного ввода данных в микро-ЭВМ предназначен регистр ввода. А для имитации входных сигналов этому регистру имеется имитатор внешнего устройства (ВУ) ввода, состоящий из 8 переключателей. Поэтому пользователь может установкой переключателей задавать уровни логических сигналов на входах регистра ввода. Чтобы затем процессор, при выполнении команды IN 20, имел возможность принять заданный переключателями код в свой аккумулятор. Состояния входов регистра ввода, задаваемые переключателями, отображаются на светодиодных индикаторах.

Управление микро-ЭВМ средствами Монитора

Системный Монитор – это программа, запускаемая сразу после включения микро-ЭВМ или общего системного сброса. Она берёт на себя управление диалогом пользователя с микро-ЭВМ, обеспечивая пользователя необходимым сервисом на этапе подготовки и отладки его программ. Монитор УМПК-80, на основе имеющихся аппаратных средств, реализует следующие режимы.

1. ожидания ввода команд управления с клавиатуры;

2. отображения на дисплее любого адреса памяти и его содержимого;

3. ввода с клавиатуры любого адреса памяти с одновременным отображением его на дисплее и, после ввода последней цифры адреса, автоматического перехода к выполнению режима 2 (начало режима ввода адреса с клавиатуры инициируется нажатием клавиши  (отыскание адреса));

4. обращение к программному счетчику. Выполнение этого режима вызывается нажатием клавиши  (программный счетчик) и приводит к автоматическому выводу содержимого программного счетчика на дисплей на месте адреса. Затем следует переход к режиму 2;

5. вывода на дисплей содержимого регистров процессора. Этот режим устанавливается нажатием клавиши  (отыскание регистра), при этом сначала на дисплей будет выведено содержимое аккумулятора. Последующие нажатия на клавишу  (запись и увеличение адреса) приведут к циклическому выводу содержимого всех программно доступных регистров процессора. Последовательность выбора регистров: A, FL (флаговый регистр), B, C, D, E, H, L, SPH (старший байт SP (указатель стека)), SPL (младший байт SP), PCH (старший байт PC (программный счетчик)), PCL (младший байт PC);

6. записи с клавиатуры в ячейки ОЗУ или в регистры процессора нового содержимого. При работе микро-ЭВМ в режимах 2 и 5 после изменения новое содержимое, представленное на дисплее, можно записать нажатием клавиши ;

7. уменьшения или увеличения на единицу адреса, представленного на дисплее при работе микро-ЭВМ в режиме 2. Эти режимы инициируются соответственно нажатием клавиш  и  (уменьшение адреса);

8. запуска программы с адреса, указанного на дисплее, с помощью клавиши  (пуск);

9. выполнение команд по машинным циклам с отображением информации на линиях системной шины с помощью светодиодных индикаторов. Режим устанавливается нажатием клавиши  (шаг машинного цикла);

10. выполнение программы по командам. Режим устанавливается нажатием клавиши  (шаг команды), при этом после каждой команды выполняемой программы пользователя выполняется возврат в программу Монитор к режиму 4;

11. останова программы пользователя. Режим устанавливается при нажатии клавиши  (стоп) с автоматическим сохранением содержимого всех регистров процессора и переходом к выполнению режима 4. Сохранение регистров позволяет анализировать их содержимое на момент останова с помощью перехода к режиму 5. После останова программы пользователя микро-ЭВМ может быть переведена в режимы 9 или 10;

12. возврата микро-ЭВМ из режима выполнения команд программы пользователя по машинным циклам в Монитор с автоматическим восстановлением содержимого регистров процессора и переходом в режим 4.

Тестирование микро-ЭВМ и начальная установка

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

1. Проверка ПЗУ на правильность информации по контрольной сумме. В случае ошибки вывод сообщения  на дисплей и выдача звукового сигнала.

2. Проверка ОЗУ на возможность и правильность записи. В случае ошибки вывод сообщения  на дисплей и выдача звукового сигнала.

3. Проверка функционирования дисплея микро-ЭВМ.

4. Проверка функционирования выходного регистра микро-ЭВМ.

При нормальном завершении всех тестов обеспечивается вывод звукового сигнала о готовности микро-ЭВМ к работе и формирование на дисплее сообщения . Затем производится начальная установка всех внутренних программно-доступных регистров процессора. Начальная установка состоит в том, что в программный счётчик записывается число 0800h (первый адрес ОЗУ), в указатель стека число 0B00h, остальные регистры процессора обнуляются, а во все ячейки области ОЗУ пользователя (для записи исследуемых программ, данных, стека) записывается число 00.

Порядок выполнения работы

Исследование порядка включения УМПК-80

1. Включить микро-ЭВМ. В результате выполнения тестовых программ светодиоды выходного регистра и сегменты дисплея будут включены на время порядка 2 с, после чего микро-ЭВМ подает звуковой сигнал и выводит сообщение . Находясь в этом режиме микро-ЭВМ реагирует на нажатие клавиш управления , , . Из любого места Монитора можно вернуть микро-ЭВМ к начальному состоянию нажатием клавиши . В этом случае микро-ЭВМ начинает выполнять программу Монитора, начиная с нулевого адреса памяти. В результате выполнения начальных действий Монитора все ячейки ОЗУ будут обнулены и, следовательно, будет стерта вся программа пользователя, записанная ранее в ОЗУ.

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

Исследование содержимого памяти

3. Нажать клавишу : при этом на дисплее появиться сообщение начала выполнения режима отыскания адреса (включены нижние сегменты дисплея).

4. Последовательно нажать на клавиши , , , . Убедиться при этом, что каждая цифра будет записываться в младший разряд адресного поля дисплея и произойдет одновременный сдвиг всех знаков адресного поля дисплея на один разряд влево. При введении с клавиатуры четвертой цифры микро-ЭВМ выведет на дисплей число, записанное по этому адресу. В поле данного дисплея появиться число 00. В случае ошибки ввода адреса следует еще раз нажать клавишу  и повторить ввод.

5. Нажать клавишу . В этом режиме микро-ЭВМ увеличит адрес на адресном поле дисплея и выведет его содержимое на дисплей. Последовательно нажимая  проверить  содержимое ячеек ОЗУ.

6. Нажать клавишу  и ввести адрес 0000. В поле данных на дисплее появиться 26. Последовательно нажимая , просмотреть содержимое нескольких ячеек ПЗУ.

7. Убедиться, что содержимое памяти можно просмотреть с помощью последовательных нажатий клавиши .

Запись числа в память УМПК-80

8. Нажать на клавишу .

9. Нажать на клавишу  и затем ввести адрес 0800. В поле данных на дисплее появится 00.

10. Нажать на клавишу . Микро-ЭВМ вводит значение цифры нажатой клавиши в младший разряд дисплейного поля данного, при этом в этом разряде дисплея появляется десятичная точка. Она свидетельствует о том, что микро-ЭВМ находится в режиме ввода данных и число, представленное на дисплее, не является истинным содержимым адреса памяти, представленного на адресном поле дисплея.

11. Нажать на клавишу . Убедиться при этом, что цифра 1 младшего разряда дисплея переместилась на старший разряд дисплейного поля данных, а цифра 2 – на ее место (десятичная точка осталась в младшем разряде). Проверить, что последующие нажатия на цифровые клавиши приводят к вводу цифры нажатой клавиши в младший разряд дисплейного поля данных и к смещению в старший разряд предыдущей нажатой клавиши.

12. Записать нажатием клавиши  число, представленное на дисплее по адресу 0800. При этом на дисплее появиться адрес 0801 и его содержимое (00), а десятичная точка погаснет, показывая, что данные введены и микро-ЭВМ вышла из режима ввода данных.

13.Записать любое число в дисплейное поле данного при наличии на дисплее адреса 0801.

14. Нажать клавишу . На адресном поле дисплея появится адрес 0800 с его содержимым. Убедиться при этом, что число было записано по этому адресу. Отсутствие десятичной точки в младшем разряде дисплея свидетельствует о том, что это число микро-ЭВМ извлекла из памяти.

15. Нажать на клавишу  и проверить содержимое ячейки с адресом 0801. Убедится при этом, что число, показываемое на дисплее в п.3.6, не было записано в память при нажатии клавиши .

16. Осуществить вывод на дисплей содержимого адреса 0000 (ПЗУ). На дисплее будет 26. Записать по этому адресу на дисплее любое другое число. Убедиться, что при нажатии на клавишу  запись данных невозможна и при этом микро-ЭВМ определяет это действие как ошибку, формирует звуковой сигнал, не увеличивает адрес и выводит на дисплей истинное число, записанное в ПЗУ.

Запись числа в программно-доступные регистры

17. Включить микро-ЭВМ. После вывода на дисплей сообщения  нажать клавишу . На дисплей будет выведено содержимое аккумулятора (A) процессора. Многократно нажимая клавишу , проверить последовательность вывода содержимого регистров процессора на дисплей.

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

19. Нажать на клавишу  и убедиться при этом в правильности записи числа в регистр.

Запуск программы

20. Для осуществления запуска программы с любого адреса памяти вывести этот адрес на дисплей. Пуск программы производится нажатием на клавишу  (пуск), при этом в программный счетчик записывается адрес, указанный на дисплее и выполнение программы начинается с этого адреса. Записать на дисплей адрес 05B0, являющийся началом музыкальной программы, записанной в ПЗУ.

21. Нажать на клавишу  и при этом микро-ЭВМ исполнит мелодию, записанную по нотам в ПЗУ.

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

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

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

24. Ввести в ОЗУ коды программы 2.2.

25. Записать на дисплей адрес начала введенной программы.

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

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

28. Нажать на клавишу  при этом микро-ЭВМ выведет последнее содержимое программного счетчика процессора с адресом следующей команды нашей программы.

29. Нажать клавишу  три раза подряд при этом микро-ЭВМ выполнит очередные три команды программы.

30. Нажать клавишу , и убедится что в регистровой паре BC записан адрес 0B0B. Затем нажать клавишу , ввести адрес 0B0B и проконтролировать наличие в этой ячейке числа 0B.

32. Продолжить представленным выше образом пошаговое выполнение программы и контроль хода выполнения ее команд до последней команды.

Программа 2.2.

Адрес Число  Метка Мнемокод Комментарий

0800 3E 0B   MVI A,0B ;поместить число 0B в регистр A

0802 47    MOV B,A ;переслать содержимое регистра A в       ;регистр B

0803 4F    MOV C,A ;переслать содержимое регистра A в       ;регистр C

0804 02    STAX B ;число из регистра A записать в память ;      ;по адресу в рег. паре BC

0805 3E 00   MVI A,00 ;поместить число 00 в регистр A

0807 47    MOV B,A ;переслать содержимое регистра A в       ;регистр B

0808 4F    MOV C,A ;переслать содержимое регистра A в       ;регистр C

0809 CF    RST 1 ;вернуться в Монитор

Содержание отчёта

Отчёт должен содержать:

  •  функциональную схему УМПК-80;
  •  текст программы 2.2 с описанием результатов просмотра в точках останова;
  •  описание машинных циклов исследованных команд в форме таблицы и определение времени выполнения этих команд;
  •  карту памяти УМПК-80;
  •  информацию о содержании программно-доступных регистров УМПК-80 после выполнения программы начальной установки микро-ЭВМ.

Контрольные вопросы

1. Объясните назначения элементов функциональной схемы УМПК-80.

2. Каков объём основной памяти УМПК-80? На какие области поделена основная память УМПК-80?

3. Каким может быть максимальный размер основной памяти микроЭВМ с процессором 8080?

4. Какие внешние устройства имеются в составе УМПК-80 и как к ним программно обращаться?

5. Что такое системный Монитор? Какими возможностями обеспечивает пользователя монитор УМПК-80?

6. Какие тесты выполняются автоматически при каждом перезапуске УМПК-80?

7. Для каких целей применяются пошаговые режимы? Когда следует использовать режим шагов команд, а когда – режим шагов машинных циклов?

8. Каковы ограничения на использование пошаговых режимов?

Лабораторная работа № 2

Отдельные команды, простые программы

Цель работы: ознакомиться с системой команд, методами адресации процессора 8080, освоить приёмы документирования программ.

Краткие сведения из теории

Типы команд

Микропроцессор I8080 имеет фиксированный набор команд. Система команд состоит из шести различных типов (групп) команд.

  •  команды пересылок – обеспечивают операции перемещения однобайтных или двухбайтных операндов между регистрами процессора, памятью данных или памятью программ;
  •  команды передач управления – обеспечивают безусловные и условные ветвления в программе;
  •  команды организации подпрограмм – обеспечивают условные и безусловные вызовы подпрограмм и возвраты из подпрограмм;
  •  команды арифметических, логических и сдвиговых операций, среди которых представлены: арифметические сложение и вычитание, а также логические “И”, “ИЛИ”, “НЕ”, “Исключающее ИЛИ”, сдвига вправо и влево, сравнения;
  •  команды управления стеком – обеспечивают установку указателя стека, а также операции чтения и записи стека;
  •  команды ввода, вывода и управления состоянием процессора – обеспечивают операции обмена байтами процессора с регистрами интерфейсов внешних устройств, а также управление триггером разрешения прерываний процессора, перевод процессора в состояние останова и отсутствие операций.

Сведения по этим командам представлены в разделе 1.

Форматы команд

Команды программы хранятся в основной памяти. Они имеют одно-, двух- или трёхбайтный формат (табл. 1.) В первом байте команды содержится её код, однозначно определяющий эту команду и, в том числе, её формат. Многобайтные команды размещаются в последовательных ячейках памяти. Адрес первого байта команды считается адресом всей команды.

Способы адресации операндов

Команды процессора выполняют действия с операндами. Сначала они отыскивают исходные операнды, называемые операндами-источниками. Затем – выполняют операции с исходными операндами. И, наконец, отправляют полученный результат, называемый операнд-приемник, в определенную ячейку памяти, регистр процессора или порт интерфейса внешнего устройства. У любого операнда есть свой адрес хранения. Процессор имеет различные способы указания адресов операндов для отыскания операндов при чтении и для их размещения при записи. Всего микропроцессор 8080 имеет 5 способов адресации операндов, которые представлены в табл. 1.3.

Признаки результатов операций

При выполнении арифметических и логических операций с однобайтными двоичными операндами процессор имеет возможность не только получить байт результата в своем аккумуляторе, но и указать на некоторые признаки результата операции. Это реализовано через установку битов регистра признаков процессора. Его формат показан в табл. 1.4, а значения отдельных битов признаков – в табл. 1.5.

Биты регистра признаков устанавливаются командами арифметических, логических и сдвиговых операций. Они могут быть использованы другими командами в качестве объекта анализа или анализируемого условия.  Анализировать состояния битов признаков могут команды условных переходов, условных вызовов подпрограмм или условных возвратов из подпрограмм. Кроме того, бит CY может принимать участие в арифметических, логических и сдвиговых операциях вместе с другими операндами.

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

Исходный текст программы разрабатывается на основе её алгоритма. Команды исходного текста пишутся сначала в форме мнемокодов. Например, простейшая программа 2.3, извлекающая число из ячейки памяти с адресом 0B00h, инвертирующую его и записывающая результат в память по адресу 0B01h.

; Программа 2.3. (в мнемокодах)

; Инвертирование однобайтного числа

;Входной параметр: M(0B00) – исходное число

;Выходной параметр: M(0B01) – результат инвертирования

.org 0800h ; Область программы

LDA 0B00h ; прочитать число из памяти с адресом 0B00 в    ; аккумулятор процессора (A)

CMA ; инвертировать число в A

STA 0B01h ; записать число из A в память по адресу 0B01

RST 1 ; вернуться в монитор

;в микро-ЭВМ УМК-80 для возврата в монитор следует пользоваться ;командой RST 7.

.org 0B00h ;Область данных

.db 0E5h ;исходный байт

.db 00 ;результат

.end

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

Программа 2.3 (размещение по адресам памяти)

Инвертирование однобайтного числа

Входной параметр: M(0B00) – исходное число

Выходной параметр: M(0B01) – результат инвертирования

Адрес Число Комментарий

0800 3A ;код команды LDA

0801 00 ;младший байт адреса команды LDA

0802 0B ;старший байт адреса команды LDA

0803 2F ;код команды CMA

0804 32 ;код команды STA

0805 01  ;младший байт адреса команды STA

0806 0B ;старший байт адреса команды STA

0807 CF ;код команды RST 1*

* в микро-ЭВМ УМК-80 для возврата в монитор следует пользоваться командой RST 7, имеющей код FF.

Запись многобайтных команд удобно производить в более компактной и удобной для анализа форме – одной строкой. В начале строки указывается адрес первого байта такой команды и при этом понимается, что, в зависимости от длины, байты команды в памяти будут занимать от одной до трёх последовательно расположенных ячеек.

; Программа 2.3 (в мнемокодах и кодах)

; Инвертирование однобайтного числа

;Входной параметр: M(0B00) – исходное число

;Выходной параметр: M(0B01) – результат инвертирования

.org 0800h ; Область программы

0800 3A 00 0B  LDA 0B00h ;AM(0B00)

0803 2F  CMA ; инвертировать число в A

0804 32 01 0B  STA 0B01h ;AM(0B01)

0807 CF  RST 1 ;возврат в Монитор

;в микро-ЭВМ УМК-80 для возврата в монитор следует пользоваться ;командой RST 7.

.org 0B00h ;Область данных

.db 0E5h ;исходный байт

.db 00 ;результат

.end

В программе 2.3 для определения операнда в памяти используется прямой метод адресации. В следующей программе 2.4 выполняются те же действия над исходным операндом, но для его определения в памяти применён уже косвенный метод адресации.

; Программа 2.4.

; Инвертирование однобайтного числа

;Входной параметр: M(0B00) – исходное число

;Выходной параметр: M(0B01) – результат инвертирования

.org 0800h ; Область программы

 LXI H,0B00h ; HL0B00

 MOV A,M ; AM(HL)

CMA ; инвертировать число в A

 INX H ; HLHL+1

MOV M,A ; AM(HL)

 RST 1 ; вернуться в монитор

;в микро-ЭВМ УМК-80 для возврата в монитор следует пользоваться ;командой RST 7.

.org 0B00h ;Область данных

.db 0E5h ;исходный байт

.db 00 ;результат

.end

Порядок выполнения работы

Исследование отдельных команд арифметических и логических операций

1. Ознакомиться с исследуемой командой CMA (см. Раздел 1).

2. Подобрать исходное число-операнд для исследуемой команды, наиболее явно отражающее действия этой команды. Записать число-операнд из монитора в ячейку памяти с адресом 0B00.

3. Ввести в память микро-ЭВМ программу 2.3.

4. Осуществить пуск программы с её начального адреса.

5. Проверить результат выполнения программы, путём исследования числа записанного в памяти по адресу 0B01.

6. Заменяя в программе команду CMA на команды INR A, DCR A, ADD A, ANA A, ORA A, CMP A, исследовать результат выполнения указанных команд по числу, записанному в ячейку с адресом 0B01. Результаты исследований команд занести в табл. 2.10.

 Биты признаков находятся в регистре F, формат которого представлен выше в табл. 1.4 и табл. 1.5. Контролировать содержимое  этого  регистра необходимо непосредственно сразу после  выполнения  исследуемой команды, поэтому целесообразно запускать программу из  УМК-80 с точкой останова.

Таблица 2.10

Результаты исследования команд арифметических и логических операций

Число

M(0B00)

Команда

Рез-т

M(0B01)

Признаки

Комментарии

S

Z

AC

P

CY

CMA

INR A

DCR A

ADD A

ANA A

ORA A

CMP A

Следует также обратить внимание на то, что  степень  влияния команд на признаки различна (см. столбец F в табл. 1.6). Возможны 3 случая:

  •  влияние на все признаки;
  •  отсутствие влияния на все признаки;
  •  влияние на все признаки кроме переносов.

Исследование команд пересылок и способов адресации операндов

7. Ввести в память микро-ЭВМ программу 2.4.

8. Записать из монитора в ячейку с адресом 0B00 исследуемое число.

9. Осуществить пуск программы с её начального адреса.

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

11. Видоизменить программу 2.4 таким образом, чтобы  исходное число в начале программы загружалось в аккумулятор не из  области данных, а было бы определено непосредственно в  составе  команды. Подходящую для этой цели команду выбрать среди  команд  однобайтных пересылок (табл. 1.6). С учётом этих изменений  скорректировать оптимальным образом завершение программы.

Исследование команд арифметического сложения

12. Разработать программу 2.5 увеличения на 5 числа, записанного в ячейке памяти по адресу 0B00h и записи результата в ячейку памяти с адресом 0B01h.

13. Ввести программу 2.5 в память.

14. Осуществить пуск программы и проверить результат её выполнения в ячейке с адресом 0B01h при исходных числах, записываемых в ячейку 0B00h, равных 05h, CDh, FEh.

15. Разработать программу 2.6 сложения двух чисел, записанных в ячейках с адресами 0B00h и 0BA0h с последующей записью результата в ячейку с адресом 0B01.

16. Ввести программу 2.6 в память.

17. Осуществить пуск программы и проверить результат ее выполнения в ячейке с адресом 0B01h при исходных числах равных: 0Bh и B0h, FEh и B5h, A1h и C3h.

18. Видоизменить программу 2.6 с учётом того, что результат может быть двухбайтным числом. Обеспечить размещение байтов результата в соседних ячейках памяти.

Исследование операций сравнения однобайтных чисел

19. Разработать программу 2.7 сравнения двух чисел, записанных в ячейках с адресами 0B00h и 0B01h с последующей записью большего из них в регистр B.

20. Ввести программу 2.7 в память.

21. Осуществить пуск программы и проверить результат её выполнения в регистре B.

Содержание отчёта

Отчёт должен содержать:

  •  заполненную табл. 2.10;
  •  анализ по машинным циклам и тактам выполнения двух (однобайтной и трёхбайтной) произвольно выбранных команд из программы 2.3;   
  •  временную диаграмму выполнения микро-ЭВМ команды MOV A,M из программы 2.4;
  •  видоизменённую программу 2.4;
  •  разработанные программы 2.5, 2.6, 2.7;
  •  выводы по результатам исследований работы команд и программ.

Контрольные вопросы

1. Какими группами представлена система команд микропроцессора 8080?

2. Каковы возможные варианты форматов команд?

3. Представьте методы адресации операндов микропроцессора 8080 на примере команд используемых в ваших программах?

4. Какова роль битов признаков в операциях арифметического сложения?

5. Каким образом организуется сравнение чисел и выбор действий программы по результатам сравнения?

6. Что такое командный цикл, машинный цикл и машинный такт?

7. Объясните логику появления сигналов в машинных тактах, представленных на временных диаграммах вашего отчёта.

Библиографический список 

1. Микропроцессоры. В 3х книгах. Кн.3 Средства отладки, лабораторный практикум и задачник: Учебное пос. для вузов/ Под ред Л. Н. Преснухина. – М.: Высш. шк., 1986.

2. МикроЭВМ: В 8 кн.: Практ. пособие / Под ред. Л. Н. Преснухина Кн. 7. Учебные стенды / Ю. И.Волков, В. Л. Горбунов и др. – М.: Высш.шк., 1988. – 224с.

3. Программирование микропроцессора 8080: Методические указания по лабораторным работам №1–7 для студентов специальностей 21.03.00, 21.04.01 / Сост. А. А. Рыбин; КГТУ. Красноярск, 1997. – 84 с.

4. Григорьев В. Л. Программное обеспечение микропроцессорных систем. – М.: Энергоатомиздат, 1983 – 203 с.

5. Каган Б. М., Сташин В. В. Основы проектирования микропроцессорных устройств автоматики. – М.: Энергоатомиздат, 1987 – 304 с.

6. Левенталь Л., Сэйвилл У. Программирование на языке ассемблера для микропроцессоров 8080 и 8085: Пер. с англ. – М.: Радио и связь, 1987. – 448 с.

7. Балашов Е. П., Пузанков Д. В. Микропроцессоры и микропроцессорные системы. – М.: Радио и связь, 1981 – 326 с.




1. КОНТРОЛЬНАЯ РАБОТА по дисциплине Финансовое право вариант 5
2. Общая микробиология для студентов 3 курса дневной и 4 курса заочной форм обучения специальности 6
3. The history of grmmr theor
4. гипоксия означает абсолютную или относительную недостаточность уровня реального энергообеспечения по ср
5. тематичне знання філософія виникла в Україні щойно з розвитком інституційної вищої освіти в 16 17 ст
6. равносильно следующему- Рассмотрим Задача теперь состоит в том чтобы для каждого а найти число положи
7. тема класифікації закладів розміщення Матеріальнотехнічне забезпечення готелю.
8. Бюджетный профицит и механизм его распределения.html
9. Економічна сутність державного кредиту Держава для фінансування своїх потреб може мобілізувати фінансов
10. Оценка трудозатрат и оплата труда.html
11. Правовое регулирование Забайкальского края
12. лекціях і практичних заняттях а також опрацювання підручників навчальних посібників монографій статей та
13. Дягиль лекарственный (дудник)
14. Беременность 26-27 недель Маловодие
15. тема методов и стратегий с помощью которых общество направляет поведение индивидов
16. реферат дисертації на здобуття наукового ступеня кандидата юридичних наук Київ~
17. Психология личности Вопросы к экзамену
18. Благотворительные организации
19. Тема- Практичне вивчення будови і основних регулювань зернозбиральних комбайнів СК5 Мета- Закр
20. Анестезия в акушерстве и гинекологии