АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

SETB TR1

DB 11111111B; SIN(89)=0.999

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

2. Вычислить произведение двух 4-х битных чисел, расположенных в младших тетрадах регистров R0 и R1. Для вычисления используется таблица произведений для всех комбинаций сомножителей (всего 256). Произведение двух младших тетрад имеет формат 1 байт.

 

; Вычисление Z=X*Y

; R0=0000.XXXX

; R1=0000.YYYY

; X и Y принимают значения 0 и 1

 

ORG 0C100H; Директива ассемблера, задающая

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

MOV DPTR, #MAS; Загрузка адреса массива

; в регистр-указатель данных

MOV A,R0; Пересылка множимого в аккумулятор

SWAP A; Обмен тетрад аккумулятора

ORL A,R1; Формирование в аккумуляторе адреса

; произведения

MOVC A,@A+DPTR; Загрузка в аккумулятор произведения

ORG 0C300H; Директива ассемблера, задающая

; начальный адрес таблицы

 

; Директивы ассемблера, формирующие таблицу произведений

MAS DB 0,0,0,0,0,0,0,0; Z=0*Y

DB 0,0,0,0,0,0,0,0

DB 0,1,2,…..,0FH; Z=1*Y (1*0,1*1,1*2,…,1*0FH)

DB 0,0FH,1EH,…,0E1; Z=0F*Y

; (0FH*0,0FH*1,0FH*2,…,0FH*0FH)

 

III. Работа с внешней памятью данных (ВПД).

Запомнить в ВПД содержимое регистров банка 0.

Начальный адрес ВПД – 0D000h

MOV PSW,#01000B; Выбор банка регистров 1

MOV R0,#8; Счетчик = 8

MOV DPTR,#0D000H; Определение начального адреса ВПД

MOV R1,#0; Определение начального адреса РПД

L: MOV A,@R1; (А) = (регистр)

MOVX @DPTR,A; Передача из аккумулятора в ВПД

INC R1; Переход к следующему регистру

INC DPTR; Приращение указателя адреса

DJNZ R0,L; R0=R0-1, если R0>0, то повторить

 

IV.Операции со стеком.

1. Перед загрузкой в стек содержимое регистра-указателя стека (SP) инкрементируется, а после извлечения из стека – декрементируется.

По сигналу системного сброса в SP заносится значение 07h. Для переопределения SP можно воспользоваться командой MOV SP,#D

Пример:

ORG 0h

MOV SP,#BUFSTEK; Инициализация стека

; Программа

ORG 40h

BUFSTEK DS 10; Резервирование памяти для стека

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

 

ORG 0C003H; Задание адреса вектора прерывания

LJMP SUB; Переход на подпрограмму обработки

 

ORG 0C100H

SUB: PUSH PSW; Сохранение в стеке PSW

PUSH A; Сохранение аккумулятора

PUSH B; Сохранение B

PUSH DPL; Сохранение DPTR

PUSH DPH

MOV PSW,#1000B; Выбор банка регистров 1

; Обработка прерывания

POP DPH; Восстановление сохраненного

POP DPL

POP B

POP A

POP PSW; Восстановление PSW и номера регистрового банка

RETI; Возврат


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |

Поиск по сайту:



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