Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лек ЦУ и МП Ч2_студент_расп.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
777.22 Кб
Скачать
  1. Логические операции (and, or, not, ).

3.1. Логическое умножение содержимого аккумулятора с константой

Б1

Б2

ANI

константа

(A)←(A)^(< Б2>)

Логические операции осуществляются поразрядно и без переноса в старший разряд.

Пояснение на примере.

ANI 0: (A)←(A)^ (0) В аккумулятор записывается ноль.

ANI FF ; В аккумуляторе остается содержимое аккумулятора.

Б1

ANA r

(A)←(A)^(r)

Б1

ANA M

(A)←(A)^([H-L])

    1. Логическое сложение

Б1

Б2

ORI

константа

(A)←(A)V(<Б2>)

Рассмотрим примеры:

ORI FF; (A)←(FF)V(A)

ORI 0 (A)←(A)V0

Б1

ORA r

(A)←(A)V(r)

Б1

ORA M

(A)←(A)V([H-L])

    1. Инверсия содержимого всех разрядов аккумулятора

Б1

CMA

(A)←( )

Рассмотрим пример: Пусть А=0. Что будет в аккумуляторе после выполнения команды CMA?

    1. Сложение по модулю два константы с аккумулятором

Б1

Б2

XRI

константа

(A)←(A) (< Б2>)

Б1

XRA r

(A)←(A) (r)

Например:

XRA A ; (A)←(A) (A) В аккумулятор записывается ноль.

3.5. Логическое сравнение аккумулятора с регистром (команды логического сравнения применяются перед командами условного перехода)

Б1

СMP r

(A)–(r) , (S, Z, P, AС )

Арифметическое вычитание и формирование только признаков в регистре признаков (S, Z, P и др.).

    1. Логическое сравнение аккумулятора с константой

Б1

Б2

СРI

константа

(А) – (<Б2>), (S, Z, P, AС )

Помни:

Команды логического сравнения применяются, чтобы сформировать только признаки (S, Z, P, AС ) в регистре признаков перед выполнением команд условных переходов. Содержимое аккумулятора при этом не изменяется!

  1. Команды управления (безусловный и условные переходы)

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

Б1

Б2

Б3

JMP

младшие разряды

Адрес

перехода

старшие разряды

(Счетчик команд РС)←(< Б3>< Б2>)

Пример: JMP 8105h ; (Счетчик команд РС)←8105h

4.2. Команды условных переходов (JM, JNM, JZ, JNZ)

Все команды условного перехода 3-х байтные: в 1-м байте КОП, в 3- м и 2-м байтах команды адрес перехода.

Последовательность выполнения команды условного перехода: если условие КОП выполняется, то в PC заносится адрес перехода из 3-го и 2-ого байтов команды. Если условие КОП не выполняется, то к значению PC прибавляется 3, т.е. МР переходит к выполнению очередной команды.

Команда перехода, если минус:

Б1

Б2

Б3

JM

младшие разряды

адрес перехода

старшие разряды

(РС)←(< Б3>< Б2>), если S=1

(PC)←(РС)+3, если S=0

Команда перехода, если минус, т.е. если предыдущий результат отрицательный (S=1), то в PC заносится адрес 3- и 2- ого байтов команды и происходит переход по этому адресу. Если условие КОП не выполняется (S=0), то к значению PC прибавляется 3, т.е. МР переходит к выполнению очередной команды.

Пример команды:

Команда перехода, если ноль:

Б1

Б2

Б3

JZ

младшие разряды

адрес перехода

старшие разряды

(РС)←(< Б3>< Б2>), если Z=1

(PC)←(РС)+3, если Z=0

Команда перехода, если не ноль:

Б1

Б2

Б3

JNZ

младшие разряды

адрес перехода

старшие разряды

(РС)←(<Б3>< Б2>), если Z=0

(PC)←(РС)+3, если Z=1

  1. Команды ввода и вывода данных.

Ввод и вывод данных организуется двумя способами:

  1. Ввод и вывод данных только через аккумулятор. Данный способ обычно используется в восьмиразрядных системах. Он прост в технической реализации МП. В изучаемом нами МП применяется данный способ обмена.

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

5.1. Команда ввода данных

Б1

Б2

IN

Адрес устройства ввода

(А)←([< Б2>])

Пример команды:

IN INPORT1; (A)←([INPORT1]), где INPORT1символический адрес порта ввода.

    1. Команда вывода данных

Б1

Б2

OUT

Адрес устройства вывода

([<Б2>])←(A)

OUT OUTPORT2 ; ([OUTPORT2])←(A)

  1. Другие команды

6.1 Команды работы со стеком (стековой памятью).

Стековая память – область ОЗУ, предназначенная для временного хранения данных, в том числе и адресов возврата в основную программу при обращении к подпрограмме.

Обмен со стековой памятью осуществляется только парами регистров (В-С, D-E, H-L, PSW).

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

Примечание: в некоторых МПС начальный адрес стека определяется автоматически.

Для задания вершины стека используются два варианта команд:

1-ый вариант:

Б1

Б2

Б3

LXI

младший разряд

Адрес регист-

ровой пары

старший разряд

(SР)←(< Б3>< Б2>)

SP – шестнадцатиразрядный указатель стека, т.е. в указателе стека

2-ой вариант:

Б1

SPHL

(SP)←(H-L)

Запись содержимого регистровой пары в стековую память:

Команда записи регистровой пары в стековую память

PUSH rr

где rr – В-C, D-E, H-L, PSW.

Например:

PUSH В; Содержимое пары регистров В-С записывается в стековую память по адресу SP-1 и SP-2. После выполнения команды записи содержимого в стековую память в указателе стека (SP) изменяется адрес стековой памяти (уменьшается его значение на два: SP=SP-2).

Команда чтения содержимого стека в регистровую пару (чтение из стековой памяти)

РОР rr

где rr – В-C, D-E, H-L, PSW.

По этой команде содержимое стековой памяти (два байта) из ОЗУ записываются в одну из регистровых пар РОН или PSW. После выполнения команды содержимое указателя стека увеличивается на два SP=SP+2.

Например:

РОР B; Содержимое двух ячеек стековой памяти по адресу SP+1 и SP+2 записывается в пару регистров B-C, а указатель вершины стека после выполнения команды принимает значение SP=SP+2.

    1. Команда обращения к подпрограмме (CALL).

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

Синтаксис команды обращения к подпрограмме

Б1

Б2

Б3

CALL

младшие разряды

адрес ячейки памяти ЗУ с командой подпрогрпммы

старшие разряды

([SP-1]) ←(CPL)возвр.

([SP-2]) ←(CPH)возвр.

(SP)←(SP)-2 ; измен. адр. вершины стека.

(CP)←([< Б3>< Б2>]).

Последовательность выполнения команды обращения к подпрограмме CALL.

В стековую память записывается 16-ти разрядный адрес ячейки памяти возврата после выполнения подпрограммы (CPL)возвр. , (CPH)возвр.

В указатель счетчика команд (PC) заносится адрес первой ЯП команды подпрограммы с КОП ([<Б3><Б2>]). . Поскольку стековая память использована для хранения адреса возврата из подпрограммы в основную программу, то изменяется значение указателя вершины стека (уменьшается на 2, т.е. SP=SP-2).

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

Б1

RET

(CPL) ← ([SP+1]), (запись в счетчик команд PC адреса

(CPH) ← ([ SP+2]) возврата в основную программу)

(SP)←(SP)+2, (изменяется адрес вершины стека )

В счетчик команд PC записывается содержимое стековой памяти по адресу ([SP+1]) и ([SP+2]), т.е. адрес возврата в основную программу.

После выполнения команды значение указателя стека SP увеличивается на 2, т.е. SP=SP+2.

    1. Команда HLT – останов выполнения программы

Б1

HLT

МП прекращает выполнение программы и ждет указаний.

6.4. Пустая команда

Б1

NOP

Эта команда используется для резервирования ячеек при написании программы. МП никаких действий не выполняет, но осуществляет первый этап (чтение и дешифрование). Кроме того, команда может применяться при написании программы временной задержки (для изучаемого симулятора AVSIM85 время выполнения 1-ого этапа команды четыре секунды).

Работа с имитатором (симулятором) процессора Intel I8085.

Построение программы.

Этапы создания программы:

  1. Разработка алгоритма программы и ее написание на языке ассемблер. Набор программы осуществляется только!!! в Блокноте или с использованием симулятора. Сохраняется программа в формате «все файлы» и имя программы – с расширением .asm. Например, testr3.asm.

Примечание: В редакторе Word или Word Pad программу не набирать, а только в Блокноте!!!

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

  2. Компоновка программы. Результат компоновки – объединение нескольких оттранслированных программ в одну, в результате мы получаем файл с расширением .obj.

  3. Отладка программы.

Структура программы

Программа состоит из предложений. Каждое предложение имеет следующую структуру:

[метка] <мнемоника команды> [операнды]; [комментарии]

[] – не обязательное включение содержимого скобок в предложение

<> - обязательное наличие содержимого скобок в предложение

  1. Поле метки: метка записывается с первой позиции и начинается обязательно с буквы.

  2. Поле мнемоники: код операции (КОП) записывается после первой позиции.

  3. Поле операнда: в этом поле записываются данные, которые обрабатываются в МП.

  4. Поле комментария: комментарии записываются обязательно после точки с запятой (;). Если комментариев нет, точку с запятой ставить не обязательно. Если точка с запятой стоит в первой позиции, то строка транслятором воспринимается как комментарий.

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

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

Include – директива и после нее записываются имена файлов с расширением .asm.

Тело программы включает строки предложений, рассмотренные ранее.

Трансляция программы.

Для трансляции программы необходимо командной в строке, например, FAR или Total Commander, записать:

avmac85 <имя исходного файла.asm> si allpublic

Помни уголки < > не использовать при написании команды.

В результате формируются объектный файл и листинг:

<имя исходного файла>.obj

< имя исходного файла >.prn

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

Компоновка программы.

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

avlink @<имя файла>.lnk

В результате компоновки формируется файл с расширением .hex.

Подготовка файлов выходных данных.

Для ввода данных (имитация ввода данных) формируется файл исходный данных. Для организации файла создать файл с именем indat.ad. Для создания файла используют следующее сочетание клавиш – Shift+F4. Значения входных данных записываются в десятичной системе. Цифры разделяются либо пробелом, либо переводом строки. Для перевода десятичной системы счисления в шестнадцатеричную в командной строке записывают команду:

iotran db indat.dat indat.ad

Лекция 6

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

Учебные вопросы:

1. Двоичные счетчики с заданными начальным и конечным значениями счета.

2. Построение счетчиков на двух регистрах.

3. Построение программы с управляющими сигналами.

4. Разработка программы счетчика табличным методом.

  1. Двоичные счетчики с заданными начальным и конечным значениями счета.

Постановка задачи: разработать вычитающий четырехразрядный двоичный счетчик с параметрами:

Qнач.=5, Qкон.=8

m – разрядность счетчика

Сmax=

Примечание: в аккумуляторе восемь разрядов. В четырехразрядном счетчике используются только четыре младших разряда, следовательно, необходимо отсечь старшие разряды. Для этого используется команда ANI 0Fh.

Алгоритм программы

Фрагмент программы:

Begin:

MVI C,Qn ; C=Qn Бл.1

M2: MOV A,C ; A=C Бл.2

OUT outport2 ; вывод Qi

DCX C ; C=C-1 Бл.3

MOV A,C

ANI 0Fh Бл.4

MOV C,A

CPI Qk ; (A-Qk) в этой команде только меняются признаки S, Z, P

JZ Begin

JMP M2

END

В рассмотренной программе Cmax= ,

где m=8, следовательно, Сmax не более 255 .

На практике применяются счетчики с Сmax> 255. Тогда могут применяться счетчики на двух регистрах.

  1. Построение счетчиков на двух регистрах.

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

Алгоритм программы

Нарисовать

Фрагмент из программы.

Delay:

LXI B,DEL ; константа пересылается в регистровую пару В-С

M3: NOP ; пустая команда для увеличения времени цикла

NOP

DCX B ; (B-C)=(B-C)-1

MOV A,C

ORA B ; (A)←(A)V(B)

JNZ M3

JMP Mi ; метка основной программы

END

3.Построение программы с управляющими сигналами

Если МПС управляет устройством, то на вход МПС поступает сигнал, по результатам которого формируется управляющий сигнал. Пусть двоичный счетчик управляется двумя сигналами, а именно, сигнал Х1 – сброс счетчика в нулевое состояние (начальное) и Х2 – останов счетчика.

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

Управляющий сигнал обеспечивает сброс счетчика в начальное состояние, если Х1=0 в разряде регистра А1 (аккумулятор), а Х2=0 в разряде регистра А3 (аккумулятор) : обеспечивает останов счета. Cигналы управления вводятся в аккумулятор МП побайтно.

Рассмотрим последовательность применения управляющих сигналов.

а) выделение сигнала Х1. Для этого применим команду логического умножения (конъюнкция) АNI X, где Х – число (соnst), позволяющее выделить любой разряд (ы) регистра (аккумулятора). В нашем примере константа 02 (ANI 02), которая позволяет выделить разряд сигнала Х1.

б) определение значения разряда (1 или 0) управляющего сигналаХ1: применяем команды JZ или JNZ.

Аналогично для сигнала Х2:

а) выделение сигнала Х2 (сонстанта 08):

б) определение значения разряда сигнала Х2: применяем команды JZ или JNZ.

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

4.Разработка программы счетчика табличным методом.

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

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

Пусть счетчик имеет начальное состояние Q0 = 4

4 →0 →14→12 →8

NAT какой-нибудь адрес.

NAT +

Фрагмент программы:

MOV A,C ;(А)← (C)

OUT OUTPORT ;вывод значений счетчика

LXI H,NAT ;загружаем данные таблицы

MVI B,0 ;обнуляем регистр В

DAD B ;(H-L) ← (H-L)+(B-C)

MOV A,M ;(A) ←([H-L])

MOV C,A ;(C) ←(A)

JMP M1

NAT: db 0Еh,0h,0h,0h,0h,0h,0h,0h,4h,0h,0h,0h,8h

include stack.asm

end