Скачиваний:
36
Добавлен:
23.06.2014
Размер:
64 Кб
Скачать

Федеральное Агентство по образованию РФ

Томский Межвузовский Центр дистанционного образования

Томский государственный университет

систем управления и радиоэлектроники (ТУСУР)

Кафедра промышленной электроники (ПрЭ)

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

По дисциплине: «Основы микропроцессорной техники»

Тема: «Отладка прикладных программ для микропроцессора серии К580»

(Учебные пособия: «Основы микропроцессорной техники» автор: Шарапов А.В., Томск-2002; 2003)

Выполнил:

Студент ТМЦДО

Гр.

Специальность: 210106(200400)

Ф.И.О.

логин

пароль

05 февраля 2009 г.

Н-ск 2009

Цель работы: освоение системы команд микропроцессора К580ВМ80А и приобретение навыков отладки простейших программ с помощью ассемблера и эмулятора.

    1. В редакторе Norton Commander создадим файл SUM1.asm:

LXI H,10h ;загрузка указателя памяти

MOV A,M ;пересылка байта из памяти в А

INX H ;увеличение содержимого пары Н на 1

ADD M ;суммирование (А) и (HL) результат в (А)

DAA ;десятичная коррекция аккумулятора

INX H ;увеличение содержимого пары Н на 1

MOV M,A ;пересылка байта из А в память

HLT ;команда останова программы

ORG 10h ;адрес первого слагаемого

DB 37h,48h ;загрузка слагаемых в память

    1. Вызовем кросс ассемблер (командный файл x8085.exe), в результате обработки файла SUM1.asm , будут созданы файлы SUM1.lst и SUM.obj. Ассемблирование прошло успешно (Assembly Errors: 0).

Вызовем редактор связей (командный файл xlink.exe), в результате будет создан файл SUM1.bin, необходимый для загрузки программы в эмулятор. Вызовем эмулятор, записав в командной строке:

i8085.exe SUM1.bin

    1. Созданная программа складывает числа 37h и 48h , размещённые по адресам 10h и 11h директивой ORG, и определённые директивой DB. Результат работы программы размещается по адресу 12h и равен 85h в BCD (в двоично-десятичном коде). В аккумуляторе до выполнения десятичной коррекции находится 7Fh (7Fh + 6 = 85h – результат десятичной коррекции DAA). Содержимое регистра признаков F изменяет команда ADD – знака S и дополнительного (потетрадного) переноса АС, устанавливая их в единичное состояние.

2.1 Модифицируем программу sum1.asm , использующую косвенную адресацию, в программу sum2.asm – с прямой адресацией:

LXI H,10h ;загрузка указателя памяти

LDA 11h ;загрузка в А из 11h

ADD M ;суммирование (А) и (HL) результат в (А)

DAA ;десятичная коррекция аккумулятора

STA 12h ;занесение содержимого А в 12h

HLT ;команда останова программы

ORG 10h ;адрес первого слагаемого

DB 49h,37h ;загрузка слагаемых в память

2.2 Программа sum1 занимает 10 ячеек памяти, sum2 – 12. Программа sum2.asm – меньше на 2 команды но выполняется на 2 такта дольше (sum1 – 52 машинных такта, sum2 – 54).

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

С помощью директивы DB, заполним массив, начиная с адреса 100h кодами символов ASCI:

LXI H,100h ;начальный адрес массива

MVI B,64 ;число элементов

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

M1: CMP M ;сравнение А с М

JNC M2 ;переход, если А больше

MOV A,M ;обмен, если А меньше или равно

M2: INX H ;наращивание адреса

DCR B ;декремент счетчика числа элементов

JNZ M1 ;цикл обработки массива

HLT ;останов программы

ORG 100h ;адрес первого элемента

DB 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-'

3.2 Программа выполнилась за 2396 тактов, в результате работы программы в аккумулятор попало значение 7Ah, что соответствует коду символа `z`.

4.1 Разработаем и проверим работу программы PORT.asm, выводящую в порт 81h содержимое порта 80h с обменом полубайтов:

p_in EQU 80h ;порт ввода

p_out EQU 81h ;порт вывода

IN p_in ;считать с порта

RLC ;команда циклического

RLC ;сдвига влево за четыре

RLC ;прохода обеспечивает

RLC ;обмен полубайтами

OUT p_out ;вывод в порт

HLT

4.2 Если занести в порт 80h значение 5Fh, в результате работы программы на выходе (порт 81h) получим F5h.

5.1 Проверим работу программы, реализующей двоично-десятичный счетчик, скорость инкрементирования которого зависит от времени выполнения подпрограммы временной задержки DELAY:

LXI SP,20h ;загрузка указателя стека

M2: ADI 1 ;инкремент аккумулятора

DAA ;десятичная коррекция

CALL DELAY ;вызов подпрограммы задержки

JMP M2 ;зацикливание программы

DELAY: MVI B,2 ;установка счетчика

M1: DCR B ;декремент счетчика

JNZ M1 ;переход при отсутствии нуля

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

5.2 Прогоняя программу в пошаговом режиме, можем отметить что с каждым циклом выполнения программы, содержимое аккумулятора увеличивается на 1. При вызове подпрограммы, указатель стека изменяется с 20h на h (уменьшается на 2). При выполнении команды RET происходит, выход из подпрограммы и возврат к началу программы (М2), указатель стека изменяется на 20h. В регистре В хранится значение 2, которое последовательно уменьшается (2-1-0), при В=0 , флаг нуля Z устанавливается в единичное состояние. Признак чётности устанавливается в единицу, при PSW=2Eh. Для увеличения времени работы подпрограммы, необходимо увеличить значение счетчика (регистр В), командой MVI.

6.1 Разработаем и отладим программу (CONVP.asm), сохраняющей в стеке содержимое регистровых пар PSW и B, на время вызова подпрограммы CONV, а затем восстанавливающей их из стека:

LXI SP,32h ;загрузка указателя стека

MVI A,1Аh ;загрузка данных

MVI B,1Eh ;в регистры

MVI E,0Вh ;ввод значения для подпрограммы

PUSH PSW ;занесение содержимого

PUSH B ;регистров в стек

CALL CONV ;вызов подпрограммы

POP B ;извлечение из стека в порядке

POP PSW ;обратном занесению

JMP STOP ;переход на метку останова

CONV: MOV B,E ;пересылка в В из Е

MVI A,0 ;сброс содержимого аккумулятора

M1: ADI 1 ;инкремент аккумулятора

DAA ;десятичная коррекция

DCR B ;декремент счетчика

JNZ M1 ;переход пока не ноль

MOV E,A ;загрузка в Е из А

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

STOP: HLT

6.2 Подпрограмма CONV, преобразует шестнадцатеричное число, находящееся в регистре E (0Вh), в двоично-десятичное 11(BCD). Команды push и call уменьшают указатель стека на 2, а команды pop и ret увеличивают на 2.

7.1 Разработаем и отладим на эмуляторе индивидуальное задание (вариант12).

7.2 Программа должна переместить в массив 106h – 10Вh числа массива 100h – 105h, в обратной последовательности. Код программы INVERT.asm:

MASS1 EQU 100h ;начальный адрес массива1

MASS2 EQU 10Bh ;конечный адрес массива2

MVI B,5 ;счетчик элементов массива

LXI H,MASS1 ;указатель памяти массива1

LXI D,MASS2 ;указатель памяти массива2

M1: MOV A,M ;загрузка в память первого эл. массива

STAX D ;пересылка содержимого аккум. в D

INX H ;увеличение указателя Н

DCX D ;декремент указателя D

DCR B ;декремент счетчика элементов

JNZ M1 ;повторение цикла пока не 0

HLT ;останов программы при 0

8. Ответы на контрольные вопросы:

  • В аккумуляторе микропроцессора, выполняются: поразрядное И, поразрядное исключающее ИЛИ, поразрядное ИЛИ.

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

  • Аккумулятор можно обнулить командами XRA; MVI A,0; LDA r (при условии в r нулевой байт).

  • К достоинствам языка Ассемблер, можно отнести – компактность, скорость выполнения программ, возможность доступа к портам ввода – вывода. К недостаткам можно отнести – трудность создания сложных программ, необходимость контроля при создании программ, адресации и содержимого регистров.

Соседние файлы в папке 1-12_Лабораторная_Основы микропроцессорной техники