Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

ПРОГРАМУВАННЯ МОВОЮ АСЕМБЛЕР ДЛЯ К1816ВЕ51



(INTEL IMCS 8051). КОМАНДИ ОБМІНУ ДАНИМИ,

МАТЕМАТИЧНІ КОМАНДИ.

Мета роботи. Освоїти лінійне програмування мовою Асемблер для К1816ВЕ51. Вивчити дії команд обміну даними і математичними командами.

 

2.1 Теоретичні відомості

Окремий клас МК становлять однокристальні мікроЕОМ. Інтеграція всіх складових частин МС (ЦП, пам'яті, підсистеми ВВ, засобів підтримки режиму реального часу) призвела до ряду обмежень на принципи її організації та розвиток архітектури в напряму, не властивому для багатокристальних компонувань. Організація однокристальних мікроЕОМ орієнтована на застосування недорогих керуючих, що вбудовуються у виріб, МС реального часу, робоча програма яких розташована в ПЗУ системи. З цієї причини фізична пам'ять, що знаходиться на кристалі мікроЕОМ, поділяється на постійну (для запису програм) і оперативну (для збереження різних змінних), а самі прилади називаються однокристальними мікроконтролерами. Такому розподілу фізичної пам'яті сприяли і технологічні обмеження, властиві системам на одному кристалі. Розвиток інтегральної технології та розширення сфери застосування однокристальних МК призвели до подальшого удосконалювання архітектурних і структурних принципів їхньої організації. Сучасні однокристальні МС мають такі обчислювальні ресурси і можливості керування в режимі реального часу, для одержання яких раніше необхідні були більш дорогі багатокристальні компонування. Застосування МК на одному кристалі особливо ефективне в системах, де поряд з невеликою пам'яттю потрібне інтенсивне використування засобів ВВ у реальному масштабі часу.

Набір регістрів ВЕ51. Набір програмно-доступних регістрів процесора ВЕ51, наведений на рис. 2.1. Архітектура контролера належить до класу акумуляторних з банками робочих регістрів, які перемикаються. Тому центральним регістром набору вважається 8-розрядний акумулятор А, який виконує звичайні функції основного арифметичного регістра. Регістр В слугує розширенням акумулятора А, який необхідний для здійснення операцій множення і ділення, причому він є як джерелом, так і приймачем операндів. У всіх інших операціях регістр В виконує функції, обумовлені користувачем. Регістр слова стану програми (PSW) містить набір прапорців:

PSW.7 CY - Перенесення зі старшого розряду АЛУ;

PSW.6 АС - Додаткове перенесення з молодшої тетради АЛУ;

PSW.5 F0 - Прапорець користувача загального призначення включає також прапорці;

PSW4,3 - дворозрядне поле RS (Registers Select) вибору одного з чотирьох можливих банків робочих регістрів;

PSW.2 OV - Ознака арифметичного переповнення результату;

PSW.1 Р - Ознака парності.

Прапорці ознак результату CY, АС і OV, як правило, відображають стан останньої арифметичної операції, прапорець Р - парність вмісту А. Прапорець перенесення CY є акумулятором булевого процесора. Функціональне призначення прапорця F0 визначається користувачем у конкретній ситуації. Шістнадцятирозрядний програмний лічильник PC керує послідовністю виконання команд, що зберігаються в програмній пам'яті обсягом до 64 байт. Покажчик даних DPTR також має довжину 16 розрядів, кожна його половина може бути адресована незалежно від іншої. Цей регістр використовується як адресний під час пересилання констант із пам'яті програм і доступу до змінної із зовнішньої пам'яті даних, а також для організації передачі керування. Покажчик стеку утворить системний стек завглибшки до 256 байт. Він завжди містить адресу останнього байта, занесеного в стек. Стек росте убік збільшення вмісту SP. У МК ВЕ51 передбачено чотири банки по вісім робочих регістрів R0—R7 у кожному, якіперемикаються полем RS слова стану програми. Регістри виконують загальноцільові функції проміжного збереження даних. Два регістри R0 і R1 кожного банку реалізують також функції 8-розрядних покажчиків даних. Використання наборів робочих регістрів дозволяє істотно зменшити тривалість перемикання контекстів ЦП, що дуже важливо для МС реального часу. При скиданні МК усі регістри встановлюються у вихідний стан. Програмний лічильник PC набуває значення 0000Н, акумулятор А — 00Н; У — 00Н, PSW — 00Н, SP — 07H і DPTR 0000Н. Скидання PSW реалізує вибір нульового реєстрового банку RB0, і команди дозволяють виконувати пересилання даних з регістра в регістр, з пам'яті в регістр і з регістра в пам'ять, використовуючи пряму і непряму адресацію, виконувати пересилання констант із пам'яті програм (MOVC), читати й записувати дані в зовнішній пам'яті даних (MOVX).

Група математичних команд дозволяє виконувати стандартні математичні операції: додавання, віднімання, множення, розподіл, інкремент і декремент.

Розглянемо приклад програмування математичного виразу:

,

де - R0, R1, R2, R3, R4 – робочі регістри.

Під час виконання програми можливе використання вільних робочих регістрів R5-R7.

 

Таблиця 2.1 Команди пересилання даних
Мнемоніка Число циклів Код Прапорці C A F R R O P Y C 0 S S V Опис
MOV A,Rn Е8-EF - - - - - - + A←Rn, n=0-7
MOV A,direct Е5 - - - - - - + A← (direct)
MOV A,@Ri Е6-І7 - - - - - - + A←(Ri), i=0-l
MOV A, # data - - - - - - + A←data
MOV Rn,A F8—FF - - - - - - - Rn←A, n=0-7
MOV Rn,direct А8 AF - - - - - - - Rn←(direct), n=0-7
MOV Rn,#data 78 7F - - - - - - - Rn←data, n=0-7
MOV direct,A F5 - - - - - - - (direct)←A
MOV direct,Rn 88-8F - - - - - - - (direct)← Rn, n=0-7
MOV direct,direct - - - - - - - (direct)←(direct)
MOV direct,@Ri 86- 87 - - - - - - - (direct)←(Ri), i-0 1
MOV direct,#data - - - - - - - (direct)←data
MOV @Ri,A F6—F7 - - - - - - - (Ri)←A, i=0 1
MOV @Ri,direct А6-А7 - - - - - - - (Ri) ←(direct), i=0-1
MOV @Ri,#data 76-77 - - - - - - - (Ri)←data, i=0-1
MOV DPTR, # data 16 - - - - - - - DPTR←data16
MOVC A,@A+DPTR - - - - - - + A←CSEG(A+DPTR)
MOVC A,@A+PC - - - - - - + A←CSEG(A+PC)
MOVX A,@Ri Е2-E3 - - - - - - + A←XSEG (P2:Ri), i=0-l
MOVX A,@DPTR Е0 - - - - - - + A←XSEG (DPTR)
MOVX @Ri,A F2 -F3 - - - - - - - XSEG (P2:Ri) ← A, i=0-l
MOVX @DPTR,A F0 - - - - - - - XSEG (DPTR) ← A
PUSH direct З0 - - - - - - - + (SP)←(direct)
POP direct D0 ± ± ± ± ± ± ± (direct)←(SP–)
XCH A,Rn З8 CF - - - - - - + A<-> Rn, n=0-7
XCH A,direct C5 - - - - - - + A ←>(direct)
XCH A,@Ri C6—C7 - - - - - - + A←>(Ri), i=0-l
XCHD A,@Ri D6-D7 - - - - - - + A0-3←(Ri)0-3, i=0-l

Група команд пересилання даних показана в таблиці 2.1.

 

Програма:

NAME Math

PROG SEGMENT CODE ; Визначення сегмента коду

CSEG AT 0 ; Розташуємо команду JMP START за адресою 0 у сегменті коду

USING 0 ; Використовуємо банк регістрів 0

JMP START ; Перехід до початку програми

RSEG PROG ; Сегмент коду програми

START:

mov R0, #1H ; Занесення початкових даних у регістри

mov R1, #2H

mov R2, #3H

mov R3, #4H

mov a, R0 ; Заносимо в А вміст R0

call SQR ; Виклик підпрограми зведення у квадрат

add a, R1 ; До результату зведення додаємо R1

mov R4, a ; У R4 тимчасово зберігаємо чисельник

mov a, R3 ; Заносимо в А вміст R3

mov b, a ; Зводимо у квадрат без використання підпрограми

mul ab

mov R5, a ; Зберігаємо результат у R5

mov a, R2 ; Заносимо в А вміст R2

subb a, R5 ; Віднімаємо з А (R2) уміст R5 ( )

xch a, R4 ; Обмін умісту регістрів А і R4

div ab ; Розділення чисельника на знаменник

mov R4, a ; Збереження результату

OK: ; Програма закінчена. Виконуємо нескінченний цикл

jmp OK ; для зупинки виконання в цій точці

 

SQR: ; Підпрограма зведення у квадрат.

; Передача числа Х через регістр А.

; Повернення результату теж у регістрі А

mov b,a ; Занесення в регістр У числа Х

mul ab ; Множення А*У

ret ; Повернення з підпрограми

END

 

 




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

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.