Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

МУ_2542_МПТ_Тарабардин_2010

.pdf
Скачиваний:
29
Добавлен:
09.04.2015
Размер:
446.13 Кб
Скачать

Каждый микропроцессор имеет свою систему команд. Команда является инструкцией устройству управления о порядке действий, которые необходимо выполнить арифметико-логическим устройством. Максимальное количество команд, которые может « знать» процессор, ограничивается его разрядностью. Для 8-разрядного процессора это количество составляет 28=256. Это связано с тем, что каждая команда представлена в виде двоичного числа, а максимальное количество разрядов в числе определяется разрядностью процессора.

Любая программа состоит из определённого количества последовательно выполняемых команд [3]. Команды обычно выполняются над операндами (данными), однако могут выполняться и без операндов. Если команда выполняется без операндов, то её размер составляет 1 байт. Если команда выполняется над операндами, то её размер равен 2 или 3 байта. Размер команды составляет 2 байта в случае, если она выполняется над одним операндом размером 1 байт (1 байт занимает сама команда и 1 байт занимает операнд). Размер команды составляет 3 байта в случае, если она выполняется над двумя операндами, размер которых составляет 1 байт (1 байт – команда, 1 байт – первый операнд, 1 байт – второй операнд), либо одним операндом, размер которого составляет 2 байта (1 байт – команда, 2 байта – операнд).

Программа перед выполнением загружается в память. Адрес ЯП, в которую должна быть записана первая команда программы, определяется командой ORG при создании программы либо назначается операционной системой. Все остальные команды и операнды записываются последовательно в следующие ЯП. Завершается программа командой END [4].

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

Команды микропроцессора можно условно разделить на 4 типа: команды передачи данных, арифметические команды, логические и команды сдвига, а также команды передачи управления. Первый тип команд отвечает за передачу данных между регистрами процессора либо регистрами процессора и ЯП. Арифметические команды выполняют арифметические операции над содержимым регистров процессора и непосредственными числами либо над содержимым регистров и содержимым ячеек памяти. Логические и команды сдвига осуществляют логические операции в основном над содержимым аккумулятора и регистрами общего назначения. Команды передачи управления инициируют переход процессора к выполнению команд с указанным адресом по условию либо без условия. Команды данного типа принудительно изменяют содержимое регистров SP и PC при переходе к выполнению других команд или вызове подпрограмм. Такие команды часто используют для организации циклов и перехода между программами.

При программировании на языке низкого уровня, например, Assembler, программистам трудно использовать машинные коды. Поэтому прибегают к символьному представлению команд и данных [4]. Исходные тексты программ сохраняются в текстовые файлы с расширением ASM. Средствами ассемблирования (создания исполняемой программы) текстовые файлы преобразуются в шестнадцатеричные машинные коды команд (с расширением

HEX или PRN), а затем в исполняемые программы (с расширением EXE или COM). Исполняемые программы доступны пользователю для выполнения.

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

Оборудование для выполнения работы

Работа выполняется на ПК с операционной системой Windows NT/2000/XP в среде отладки CPM.

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

1. Кодирование программы осуществляется на языке Assembler. Для создания текстового файла кода программы необходимо воспользоваться текстовым редактором, например, Блокнот. После ввода текста программы необходимо сохранить файл с расширением ASM. Для этого в меню Файл редактора нужно выбрать пункт « Сохранить как…». В открывшемся диалоговом окне нужно указать имя файла и расширение. В поле « Тип файла» необходимо указать « Все файлы» ( рис. 1).

Рис. 1. Сохранение программы

2.После того, как текст программы сохранён, необходимо перевести этот текст сначала в машинный код, а затем из машинного в исполняемый код. Это можно сделать средствами отладчика CPM. После запуска CPM в консоли необходимо произвести ввод управляющих команд. Команда MAC транслирует исходный текст программы в машинный код. Синтаксис данной команды следующий: MAC <имя файла>.ASM. Например, MAC PROGRAM1.ASM. Если текст программы введён верно, то трансляция должна быть выполнена без ошибок. В этом случае в консоли CPM должно быть выведено сообщение об адресе первой команды программы, объёме оперативной памяти, занимаемой программой и успешном выполнении процедуры ассемблирования (рис. 2, а). На рис. 2, б представлен вариант выполнения ассемблирования в случае ошибки синтаксиса команды.

3.В результате выполнения команды MAC создаётся файл с тем же именем, что файл исходного текста программы, но расширение файла не ASM, а PRN. В нём хранятся числовые коды команд и операндов в шестнадцатеричной форме. Чтобы из этого машинного кода получить исполняемый код, необходимо использовать команду LOAD. Синтаксис её следующий. LOAD <имя файла>.PRN. Например, LOAD PROGRAM1.PRN. В случае успешного выполнения команды LOAD в консоль должно быть выведено сообщение об адресе первой и последней команды программы и об объёме используемой программой оперативной памяти (рис. 3). Результатом успешного выполнения

Рис. 2. Трансляция текста программы в машинный код

данной команды является создание исполняемого файла программы с расширением COM. Имя файла при этом остаётся прежним.

Рис. 3. Выполнение команды LOAD

4. Для просмотра хода выполнения программы используется отладчик SID. Формат команды отладки таков: SID <имя файла>.COM. Например, SID PROGRAM1.COM. Если эмулятор CPM работает в режиме отладчика, то в консоли должно быть выведено приглашение на ввод команд отладки. Данное приглашение отображается символом # (рис. 4).

Рис. 4. Режим отладки программы

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

-t – трассировка, т.е. вывод результатов заданного количества выполняемых команд, начиная с команды, адрес которой равен текущему значению регистра PC. Результаты выполнения показаны в виде отображения содержимого регистров процессора. Пример: -t10 – вывод результатов выполнения 10 команд; -s – отображение содержимого ЯП с указанным адресом. Пример: -s0100 –

вывод содержимого ЯП с адресом 100h;

-x – изменение содержимого указанного регистра. Часто данная команда используется для установки адреса выполняемой команды, который хранится в регистре PC. Для изменения значения PC необходимо указать в качестве параметра команды регистр P (-xP) и ввести новое значение PC;

-g0 – выход из отладчика.

5. Рассмотрим ход выполнения элементарных программ в отладчике CPM. В качестве команд микропроцессора, используемых в программах, рассмотрим самые распространённые команды передачи данных. Основные из них представлены в табл. 1.

Таблица 1

Команды передачи данных

Команд

Синтаксис

Назначение

Пример использования

Раз-

п/п

а

 

 

 

мер

1

MVI

MVI R,X

Запись числа X в регистр R

MVI B,6Ah – запись числа 6Ah в

2

 

 

MVI M,X

или ячейку памяти M с

регистр B;

 

 

 

 

адресом, указанном в

MVI M,01011110b – запись дво-

 

 

 

 

регистровой паре HL.

ичного числа в ячейку памяти с

 

 

 

 

 

адресом, указанным в

 

 

 

 

 

регистровой паре HL.

 

2

MOV

MOV R1,R2

Запись в регистр R1 (или

MOV A,B – запись в аккумулятор

1

 

 

MOV M,R

ячейку памяти M с адресом,

содержимого регистра B;

 

 

 

MOV R,M

указанным в HL)

MOV M,C – запись в ячейку

 

 

 

 

содержимого регистра R2

памяти с адресом HL

 

 

 

 

(или ячейки памяти M с

содержимого регистра C;

 

 

 

 

адресом, указанным в HL).

MOV D,M – запись в регистр D

 

 

 

 

 

содержимого ячейки памяти,

 

 

 

 

 

адрес которой указан в HL.

 

3

LXI

LXI RR,X

Загрузка числа X в

LXI H,175Ah – запись в

3

 

 

 

регистровую пару RR (BC,

регистровую пару HL числа

 

 

 

 

DE или HL).

175Ah. При этом число 17h

 

 

 

 

 

записывается в регистр H, а 5Ah

 

 

 

 

 

записывается в регистр L.

 

4

LDA

LDA ADR

Запись в аккумулятор

LDA 01FFh – запись в

3

 

 

 

содержимого ячейки памяти

аккумулятор содержимого

 

 

 

 

с адресом ADR.

ячейки памяти с адресом 01FFh.

 

5

STA

STA ADR

Запись содержимого

STA 01FFh – запись содер-

3

 

 

 

аккумулятора в ячейку

жимого аккумулятора в ячейку

 

 

 

 

памяти с адресом ADR.

памяти с адресом 01FFh.

 

6

LDAX

LDAX RR

Запись в аккумулятор

LDAX B – запись в аккумулятор

1

 

 

 

содержимого ячейки памяти

содержимого ячейки памяти с

 

 

 

 

с адресом, указанном в

адресом, указанным в

 

 

 

 

регистровой паре RR.

регистровой паре BC.

 

7

STAX

STAX RR

Запись содержимого

STAX D – запись содержимого

1

 

 

 

аккумулятора в ячейку

аккумулятора в ячейку памяти с

 

 

 

 

памяти с адресом, указанном

адресом, указанным в ре-

 

 

 

 

в регистровой паре RR.

гистровой паре DE.

 

8

LHLD

LHLD ADR

Запись в регистровую пару

LHLD 0105h – запись в ре-

3

 

 

 

HL содержимого смежных

гистровую пару HL содержимого

 

 

 

 

ячеек памяти, адрес первой

смежных ячеек памяти.

 

 

 

 

из которых указан в качестве

Содержимое ячейки памяти с

 

 

 

 

параметра ADR. При этом в

адресом 0105h запишется в

 

 

 

 

регистр L записывается

регистр L, а содержимое ячейки

 

 

 

 

содержимое ячейки памяти с

памяти с адресом 0106h

 

 

 

 

адресом ADR, а в H –

запишется в регистр H.

 

 

 

 

содержимое ячейки памяти с

 

 

 

 

 

адресом ADR+1.

 

 

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

код первой команды программы, например, 0100h. Исходный текст программы записи числа 10h в регистр B, а затем и в аккумулятор приведён ниже.

org 100h

;Указывается адрес начала программы

mvi B,10h

;Запись числа 10h в регистр B

mov A,B

;Запись содержимого регистра B в регистр A

hlt

;Завершение выполнения программы

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

7.Исходный код программы необходимо сохранить в текстовом файле с расширением ASM в той же папке, где размещены исполняемые файлы эмулятора CPM. Имя файла можно выбрать произвольным, например, LAB21 (вторая лабораторная работа, первая программа).

8.После сохранения текста программы необходимо выполнить команды ассемблирования, загрузки и отладки MAC, LOAD и SID соответственно (рис. 5).

Рис. 5. Создание исполняемой программы

9. Для просмотра хода выполнения программы нужно воспользоваться командами отладчика, которые вводятся в строке приглашения, начинающегося символом #. Просмотр результатов выполнения команд выполняется инструкцией -t. Просмотр выполнения, например, 5 первых команд можно выполнить с помощью команды отладки –t5 (рис. 6).

Рис. 6. Отладка программы

Здесь показаны биты регистра состояния F, содержимое регистра А, содержимое регистров общего назначения B, C, D, E, H и L, сгруппированных в пары (B, D, H), содержимое регистра стека и счётчика команд. Кроме того, для удобства отладки пользователю представлена информация о выполняемых командах и операндах. Обратите внимание на значения счётчика команд. В начальный момент PC=0100h, т.к. адрес ЯП с первой командой программы, заданный директивой ORG, равен 100h. После выполнения команды MVI

значение PC=0102h. Это связано с тем, что команда MVI занимает в памяти 2 байта. После выполнения команды MOV значение PC=0103h. Это связано с тем, что команда MOV занимает в памяти 1 байт.

Постольку поскольку программа завершается командой HLT, отладчик отобразил только 3 строки трассировки (а не 5, как было задано командой -t). Об этом свидетельствует сообщение «Execution halted» ( выполнение прервано).

10.Рассмотрим механизмы обмена данными между регистрами процессора

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

В качестве примера непосредственной адресации служит команда MVI. В качестве второго параметра указано непосредственное число (MVI A,52h). Первым параметром данной команды является имя регистра, поэтому данную запись команды можно также отнести к методам прямой адресации. Команда MOV в самом простом случае использует прямую адресацию, например MOV А,B. В этом случае в качестве параметров выступают имена регистров. Однако при работе с оперативной памятью эта команда использует косвеннорегистровую адресацию. В случае записи команда в виде MOV A,M первым параметром является имя регистра, а вторым – ячейка памяти, адрес которой указан в другой ячейке памяти, в частности, для команды MOV, в регистровой паре HL.

Механизм обмена данными с использованием косвенно-регистровой адресации показан в примере.

org 100h

;Установка адреса начала программы

lxi H,01F4h

;Запись в HL адреса ячейки памяти (01F4h)

mvi A,7Ch

;Запись в аккумулятор числа 7Ch

mov M,A

;Запись в ячейку памяти с адресом из HL,

 

;т.е. 01F4h, содержимого аккумулятора (7Ch)

mov B,M

;Запись в регистр B содержимого ячейки памяти

 

;с адресом, указанным в HL (01F4h)

end

;Конец программы

Таким образом, данная программа осуществляет обмен данными между регистрами A и B через память. Отладку программы следует производить в эмуляторе CPM с использованием средств команды SID. Для просмотра ЯП с адресом 01F4h необходимо использовать команду отладчика –s01F4h. На экран должно быть выведено значение 7Ch.

11. Прямая загрузка содержимого ЯП возможна только в аккумулятор. Для этого следует использовать команду LDA. Ниже рассмотрен пример программы, осуществляющей косвенно-регистровую запись содержимого регистра B в память, а затем прямое считывание записанного числа с помощью команды LDA.

org 100h

;Установка адреса начала программы

lxi H,02С1h

;Запись в HL адреса ячейки памяти (02С1h)

mvi B,3Ah

;Запись в регистр B числа 3Ah

mov M,B

;Запись содержимого регистра B

 

;в ячейку памяти с адресом 02С1h

lda 02С1h

;Загрузка в аккумулятор содержимого

 

;ячейки памяти 02C1h

end

;Конец программы

12. Запись содержимого аккумулятора в память с использованием механизма прямой адресации осуществляется командой STA. В качестве параметра команды STA указывается адрес ЯП, в которую производится запись. Ниже приведён текст программы, которая производит запоминание значение аккумулятора, а затем воспроизводит его из памяти. Ход выполнения программы может быть показан средствами отладчика SID эмулятора CPM.

org 100h

;Установка адреса начала программы

mvi A,10h

;Запись в аккумулятор числа 10h

sta 132Fh

;Запись содержимого аккумулятора в ЯП 132Fh

mvi A,20h

;Запись нового числа в аккумулятор

lda 132Fh

;Воспроизведение запомненного ранее

 

;числа в аккумулятор

end

;Конец программы

13. Другим примером прямой загрузки является загрузка машинного слова в регистровую пару. Данная процедура осуществляется командой LHLD. Параметром команды является адрес младшей ячейки памяти. Слово при этом должно находиться в смежных ячейках памяти. Загрузка слова осуществляется в регистровую пару HL по следующему правилу: в регистр L записывается содержимое ячейки памяти с указанным адресом, а в регистр H записывается содержимое ячейки памяти с адресом, на один большим указанного. Ниже рассмотрен пример записи двух байт в смежные ячейки памяти и загрузки образованного ими слова в регистровую пару HL.

org 100h

;Установка адреса начала программы

mvi A,12h

;Запись в аккумулятор числа 12h

sta 1001h

;Запоминание аккумулятора в память

mvi A,34h

;Запись в аккумулятор числа 34h

sta 1002h

;Запоминание аккумулятора в память

lhld 1001h

;Загрузка регистровой пары HL из памяти

end

;Конец программы

Результатом выполнения программы будет запись в регистровую пару HL

числа 3412h.

14. Самостоятельно рассмотрите применение команд LDAX и STAX.

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

1.Титульный лист работы.

2.Формулировка цели и задач работы.

3.Список используемых функций и их назначение.

4.Результаты работы программы.

5.Краткие выводы по проделанной работе.

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

1.Перечислите известные Вам способы адресации в микропроцессорных системах.

2.Какие команды языка Assembler для передачи данных между регистрами процессора Вы знаете?

3.Какие команды языка Assembler для передачи данных между регистрами процессора и памятью Вы знаете?

4.В чём преимущества косвенной адресации перед прямой? В каких задачах её использование предпочтительнее?

ЛАБОРАТОРНАЯ РАБОТА №3 АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ В МИКРОПРОЦЕССОРНЫХ СИСТЕМАХ

Цель работы: изучить механизм работы арифметико-логического устройства микропроцессора i8080.

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

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

Наиболее распространённые арифметические операции и примеры их использования приведены в табл. 1.

Таблица 1

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

Команда

Синтаксис

Назначение

Пример использования

Раз-

п/п

мер

1

2

3

4

5

6

1

ADD

ADD R

Сложение содержимого

ADD B – увеличение содержи-

1

 

 

ADD M

аккумулятора и регистра R

мого аккумулятора на число,

 

 

 

 

или ячейки памяти M, адрес

записанное в регистр B;

 

 

 

 

которой указан в регистровой

ADD M – увеличение содержи-

 

 

 

 

паре HL.

мого аккумулятора на число,

 

 

 

 

 

записанное ячейку памяти M с

 

 

 

 

 

адресом, указанным в HL.

 

2

ADI

ADI X

Сложение содержимого

ADI 3Eh – увеличение содержи-

2

 

 

 

аккумулятора и числа X.

мого аккумулятора на число 3Eh

 

3

SUB

SUB R

Вычитание из содержимого

SUB B – вычитание из содержи-

1

 

 

SUB M

аккумулятора содержимого

мого аккумулятора числа,

 

 

 

 

регистра R или ячейки

записанного в регистр B;

 

 

 

 

памяти M, адрес которой

SUB M – вычитание из содержи-

 

 

 

 

указан в регистровой паре

мого аккумулятора числа,

 

 

 

 

HL.

записанного ячейку памяти M с

 

 

 

 

 

адресом, указанным в HL.

 

4

SUI

SUI X

Вычитание из содержимого

SUI 4Fh – вычитание из содержи-

2

 

 

 

аккумулятора числа X.

мого аккумулятора числа 4Fh.

 

5

INR

INR R

Инкрементирование (увели-

INR B – увеличение на 1 содер-

1

 

 

INR M

чение на 1) содержимого

жимого регистра B;

 

 

 

 

регистра R или ячейки

INR M – увеличение на 1 содер-

 

 

 

 

памяти M с адресом HL.

жимого ЯП, с адресом HL.

 

1

2

3

4

5

6

6

INX

INX RR

Инкрементирование содер-

INX D – увеличение значения

1

 

 

 

жимого регистровой пары RR.

регистровой пары DE на 1.

 

7

DCR

DCR R

Декрементирование (умень-

DCR B – уменьшение на 1

1

 

 

DCR M

шение на 1) содержимого

содержимого регистра B;

 

 

 

 

регистра R или ячейки

DCR M – уменьшение на 1

 

 

 

 

памяти M с адресом,

содержимого ячейки памяти,

 

 

 

 

указанным в HL.

адрес которой указан в HL.

 

8

DCX

DCX RR

Декрементирование содер-

INX H – уменьшение значения

1

 

 

 

жимого регистровой пары RR.

регистровой пары HL на 1.

 

9

DAD

DAD RR

Сложение содержимого

DAD B – увеличение

1

 

 

 

регистровой пары HL и

содержимого регистровой пары

 

 

 

 

содержимого указанной

HL на число, записанное в

 

 

 

 

регистровой пары RR.

регистровую пару BC.

 

Оборудование для выполнения работы

Работа выполняется на ПК с операционной системой Windows NT/2000/XP в среде отладки CPM.

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

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

1. Рассмотрим сложение содержимого двух регистров.

org 100h

;Установка начального адреса программы

mvi A,5h

;Запись числа

5h в аккумулятор

mvi B,27h

;Запись числа

27h в регистр B

add B

;Сложение аккумулятора и содержимого регистра B

end

;Конец программы

Результатом выполнения данной программы является увеличение значения аккумулятора на 27h, т.е. после исполнения программы в аккумулятор будет записано число 2Ch (рис. 1).

Рис. 1. Выполнение программы

2.Сложение содержимого аккумулятора с содержимым ЯП, вычитание из содержимого аккумулятора содержимого другого регистра и ЯП рассмотрите самостоятельно.

3.Для увеличения на 1 (инкрементирования) содержимого произвольного регистра или ЯП используют команду INR. Процедура инкрементирования часто необходима в программах с многократно повторяющимися участками (циклами) для организации счётчиков и инициализации индексов. Пример использования команды INR приведён ниже.

org 100h

;Установка начального адреса программы

mvi В,7h

;Запись числа 7h в регистр B

inr B

;Инкрементирование содержимого регистра B

end

;Конец программы

На рис. 2 показан результат выполнения рассмотренной в примере программы.

Рис. 2. Выполнение программы инкрементирования содержимого B-регистра

4.Использование команд инкрементирования содержимого ЯП, регистровой пары, а также декрементирования рассмотрите самостоятельно.

5.Для сложения 16-разрядных чисел, например, адресов, используется команда DAD. Пример её использования показан ниже.

org 100h

;Установка начального адреса программы

lxi H,2500h

;Запись числа 2500h в регистровую пару HL

lxi B,003Ch

;Запись числа 003Ch в регистровую пару BC

dad B

;Увеличение содержимого регистровой пары HL на

 

;число, записанное в BC

end

;Конец программы

Результатом выполнения данной программы является запись в регистровую пару HL суммы чисел 2500h и 003Ch, т.е. числа 253Ch.

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

1.Титульный лист работы.

2.Формулировка цели и задач работы.

3.Описание и результаты используемых операций.

4.Краткие выводы по проделанной работе.

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

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

2.Поясните термины « инкрементирование» и « декрементирование». Какова область применения данных операций?

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

ЛАБОРАТОРНАЯ РАБОТА №4 ОРГАНИЗАЦИЯ ЦИКЛОВ И ВЕТВЛЕНИЙ

Цель работы: изучение механизмов создания циклов и условных переходов в микропроцессорных системах.