ення команд маніпуляції прапорцями і передачі управління
1) Вивчити організацію стека мікроконтролера ВЕ48;
2) Розглянути систему команд маніпуляції прапорцями, умовних і безумовних переходів, виклику підпрограм;
3) Ознайомитися з наведеними нижче прикладами програм мовою асемблера;
4) Провести введення, налагодження і трансляцію в об'єктний код цих програм;
5) Виконати програми по кроках з переглядом результатів виконання в регістрах і оперативної пам'яті.
Приклад 2.1 . Визначити парність числа одиниць в акумуляторі. Після виконання програми акумулятор збереже своє значення, прапор 0 буде встановлено, якщо число одиниць в акумуляторі було непарній. Прапор F0 входить до складу PSW і в даному прикладі специфікованому користувачем для виконання функцій прапора паритету.
CLR F0; скидання F0 ​​p>
MOV R7, # 8; число повторів
LOOP: RRC A; пересилання біта A.0 в перенесення
JNC NEXT; пропустити, якщо біт дорівнює 0
CPL F0; підрахунок паритету
NEXT: DJNZ R7, LOOP; повторити 8 разів
Приклад 2.2 . Передати управління з міткою LL, якщо перемикач банку регістрів (біт PSW.4) встановлено:
JBSET: MOV A, PSW; передача PSW в акумулятор
JB4 LL; перехід, якщо A.4 = 1
LL: ...;
Приклад 2.3 . Здійснити перехід з нульового банку пам'яті програм до програми з ім'ям ROUT, розташованої в першому банку пам'яті програм:
SEL MB1; установка прапора MB
JMP ROUT; перехід до програми ROUT
Приклад 2.4 . Множинне розгалуження програми. Припустимо, що результатом роботи деякої програми є число X (в межах від 0 до 15). Необхідно організувати передачу управління 16 різними програмами з іменами ROUT0-ROUTF залежно від обчисленого значення X:
ORG 0; завдання початкової адреси програми
ANL A, 0F; скидання старшої тетради A
; щоб уникнути помилки переходу
JMPP @ A; звернення до таблиці векторів переходів
; таблиця векторів переходів
DB ROUT0; початковий адресу програми ROUT0
DB ROUT1; початковий адресу програми ROUT1
...
...
...
DB ROUTF; початковий адресу програми ROUTF
Перетворення чисел з однієї системи числення в іншу . Переклад шістнадцяткових чисел в двійкову систему числення досягається поданням цифр шістнадцятирічного числа чотирирозрядний двійковими числами. Наприклад,
A7B = 1010 0111 1011
A 7 B
Переклад в десяткову систему числення. Так як перевести числа з двійкової системи в шестнадцатеричную і назад неважко, то для простоти викладок розглянемо переклад чисел з шістнадцятковій системи і назад.
В якості прикладу перекладу числа з шістнадцятковій системи в десяткову систему виберемо число 9A5F:
9A5F 16 = (9 в€™ 16 3 + 10 в€™ 16 2 + 5 в€™ 16 1 + 15 в€™ 16 0 ) = (((9 в€™ 16 +10) в€™ 16 + 5) в€™ 16 +15) = 39519 10
9 A 5 F
Тут шляхом угруповання членів обчислення поліномів представлено у формі так званої схеми Горнера, що забезпечує мінімальне число виконуваних операцій множення.
Покажемо дії з переведення чисел з десяткової системи числення в шістнадцяткову на прикладі перетворення десяткового числа 39519 10 у шестнадцатеричную систему числення
39519 | 16
39504 2469 | 16
15 2464 154 | 16
F 5 144 9
10
A
Звідси 39519 10 = 9A5F 16 . Таким чином, послідовно ділячи на 16 цілу частину десяткового числа і які утворюються приватні, отримуємо в останньому приватному та залишках цифри усіх розрядів шістнадцятирічного подання числа.
Приклад 2.5 . Перетворення кодів з однієї системи числення в іншу. Перетворення коду з однієї позиційної системи числення в іншу здійснюється діленням вихідного числа на основу нової системи числення. При цьому розподіл має виконуватися за правилами вихідної системи числення. Наприклад, для перетворення двійкового числа в двійковій-десяткове вихідне двійкове число повинне бути поділено на 10 (1010 2 ). Розподіл має здійснюватися за правилами двійковій арифметики. p> Нехай потрібно виконати перетворення 8-бітного двійкового числа в двійковій-десяткове. Вихідний двійковий код зберігається в акумуляторі. Результат перетворення складається з 12 біт: молодші 4 біта - одиниці, являють собою залишок від ділення вихідного числа на 10; наступні 4 біта - десятки, представляють собою залишок від ділення на 10 отриманого приватного; старші 4 біти - сотні, є приватним від другого поділу:
BBD: CALL DIV10; поділ вихідного коду на 10
MOV R7, A; збереження залишку в R7
MOV A, R1; завантаження в акумулятор приватного
CALL...