Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
microproc_lab.doc
Скачиваний:
9
Добавлен:
23.04.2019
Размер:
290.82 Кб
Скачать

Индивидуальные задания 2

1. Написать программу, вычисляющую 20 значений массива А по формуле А[i]=7*i + 5; i = 0...19.

Полученный массив записать в РПД, начиная с адреса 40Н.

2. Написать подпрограмму, копирующую в цикле 10 байт из РПД, наложенных на маску 1001100lb, начиная с адреса 50Н, во внешнюю память данных (ВПД), начиная с адреса С200Н. В программе осуществить вызов этой процедуры и возврат из нее.

3. Написать подпрограмму, сканирующую в цикле состояние регистров R0-R7 текущего регистрового банка. Если значение регистра равно нулю - соответствующий

номеру регистра бит аккумулятор тоже сбрасывается. Если регистр не равен нулю - в

21

;Таблица векторов переходов

TABLE: DB ROUT0 ; Начальный адрес программы ROUT0

DB ROUT1

DB ROUT2

DB ROUTF ; Начальный адрес программы ROUTF

6. Последовательная передача параметров

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

Например, подпрограмма LINE выполняет сложение 16-разрядной упакованной двоично-десятичной константы с двухбайтной двоично-десятичной переменной, хранящейся во внутренней памяти ЗУ, и запоминает сумму в другом двухбайтном буфере. В подпрограмму должны передаваться константа и оба адреса буферов. Вместо использования для этих целей четырех рабочих регистров используются 4 байта в памяти программ, следующих за командой вызова подпрограммы.

В приведенном ниже примере подпрограмма осуществляет сложение десятичной константы 1234 с содержимым адреса внутренней памяти 56Н и записывает результат в буфер по адресу 78Н. Подпрограмма LINE определяет, из какой точки был осуществлен ее вызов путем извлечения из стека адреса возврата в старший и младший байты указателя данных.

Инструкция MOVC затем считывает параметры из памяти программы по мере необходимости.

CALL LINE

DW 1234H ; BCD-константа

DB 56Н ; Адрес строки операнда

DB 78Н ; Адрес строки результата

; .......... Продолжение программы

LINE: POP DPH ; Извлечение адреса возврата в DPTR

POP DPL

MOV А, #2 ; Индекс строк источника параметров

MOVC A,@A+DPTR ; Извлечение адреса строки источника

MOV R0,A

MOV A,#3 ; Индекс строк приемника параметров

MOVC A,@A+DPTR ; Извлечение адреса строки приемника

MOV R1, А

MOV А,#1 ; Индекс мл.байта 16-разр. константы

MOVC A,@A+DPTR ; Извлечение мл. байта константы

ADD A,@R0 ; Вычисление мл. байта суммы

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

MOV @R1,A ; Запись в буфер

INC R0

INC R1

CLR A ; Индекс ст. байта равен нулю

MOVC A,@A+DPTR ; Извлечение ст. байта константы

20

6. Определить и записать в регистры R3-R6 флажки, указывающие на то, были ли взведены во всех портах биты, соответствующие их номерам.

7. Определить и записать в регистры флажки, указывающие на то, взведены ли биты 0, 2, 4 порта Р1. Создать результирующий байт, в котором 1 в соответствующем бите свидетельствует о наличии высокого уровня сигнала на этой линии порта Р1. Байт сохранить в аккумуляторе.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]