|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
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; Возврат Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.) |