Каф ЭС |
Лабораторна робота №4 |
|
20.05.08 |
Склад команд умовних і безумовних переходів |
Сохоневич О.А. |
Мета роботи: Ознайомлення зі складом команд умовних та безумовних
переходів та їх використанням в програмах на мові Assembler.
1. Короткі теоретичні відомості
Команда AJMP <address>
Команда "абсолютний перехід", передає управління по вказаній адресі,
яка створюється при кокатенації п‘яти старших біт лічильника команд РС
(після збільшення його на два), 7-5 бітів коду операції и другого байта
команди. Адреса переходу повинна знаходитись в одній сторінці об‘ємом 2
Кбайт пам‘яті програми, яка визначається п‘ятьма старшими бітами
лічильника команд.
Асемблер: AJMP <мітка>
Код: A10 A 9 A8 0 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0
Час: 2 цикли
Алгоритм: (PC [15-0] ) : = (PC [15-0] ) + 2,
(PC [10 - 0] ) : = <addr11>
Приклад: ;(PC)=028FH
;Метке МТ2 відповідає адреса 034Ah
AJMP MT2 ;(PC)=034Ah
Команда CJNE <байт-призначення>, <байт-джерело>, <мітка>
Команда "зрівняння і перехід, якщо не рівно" зрівнює значення перших
двох операндів и виконує перехід, якщо операнди не рівні. Адреса переходу
визначається при допомозі складання значення (зі знаком), указаного в
останньому байті команди, зі змістом лічильника команд після збільшення
його на три.
Прапор переносу С встановлюється, якщо значення цілого без знака
<байта-призначення> менш, ніж значення цілого без знака <байта-джерела>,
в протилежному випадку, перенос скидається (якщо значення операндів
рівні, прапор переносу скидається). Ця команда не здійснює впливу на
операнди.
Операнди в команді, забезпечують комбінації чотирьох способів
адресації:
• якщо байтом-призначення є акумулятор:
2. пряма
3. безпосередня
• якщо байтом-призначення є будь-яка комірка ОЗП з косвено-
регістровою або регістровою адресацією:
4. безпосередня до регістрового
5. безпосередня до косвено-регістрового
Нижче розглянуті ці комбінації:
1.
Асемблер: CJNE A, <#data>, <мітка>
Код: 10110101
direct
address
lb
Час: 2 цикли
Алгоритм: (PC) : =(PC)+3
якщо (data) < (A) то (PC) :=(PC)+<lb>, C:=0
якщо (data) > (A) то (PC) :=(PC)+<lb>, C:=1
Пример: ;(A)=97h, (P2)=F0h, (C)=0
CJNE A,P2,MT3
MT3: CLR A ;(A)=97h, (P2)=F0h, (C)=1
;Адрес, що відповідає мітці
;МТ3 визначається, як
;(PC):=(PC)+3+(lb)
2.
Асемблер: CJNE A, #data, <мітка>
Код: 10110100 #data lb
Час: 2 цикли
Алгоритм: (PC) :=(PC)+3,
якщо #data< (A), то _tG>_ц_а(PC)+<lb>, C:=0
якщо #data>(A), то (PC) :=(PC)+<lb>, C:=1
Пример: ;(A)=FCh, (C)=1
CJNE A,#0BFh,MT4
MT4: INC A ;(A)=FDh, (C)=0
;(PC):=(PC)+3+(lb)
3.
Асемблер: CJNE Rn, #data, <мітка>; где n=0-7
Код: 10111rrr #data lb
Час: 2 цикли
Алгоритм: (PC) : = (PC)+3,
якщо #data <(Rn), то (PC) :=(PC)+<lb>, C:=0
якщо #data8 >(Rn), то (PC)+<lb>, C:=1
Пример: ;(R7)=80h, (C)=0
CJNE R7,#81h,MT5
MT5: NOP ;(R7)=80h, (C)=1
;(PC):=(PC)+3+(lb)
4.
Асемблер: CJNE @Ri, #data, <мітка>
;де i=0,1
Код: 10111011i #data lb
Час: 2 цикли
Алгоритм: (PC) :=(PC)+3,
якщо #data <((Ri)), то (PC)+<lb>, C:=0
якщо #data>((Ri)), то (PC)+<lb>, C:=1
Пример: ;(R0)=41h, (C)=1, (ОЗУ[41])=57h
CJNE @R0,#29h,MT6
MT6: DEC R0 ;(ОЗП[41])=57h, (C)=0
;(PC):=(PC)+3+(lb)
Команда DJNZ <байт>, <мітка>
Команда "декремент і перехід, якщо не дорівнює нуля" виконує
вирахування "1" з вказаної комірки здійснює перехід по визначеної адресі,
якщо результат не дорівнює нуля. Початкове значення 00h перейде в 0FFh.
Адреса переходу вираховується доданням значення зміщення, вказаного в
останньому байті команди, зі змістом лічильника команд, збільшеним на
довжину команди DJNZ. На прапори ця команда не впливає і допускає
наступні способи адресації:
1. регістровий
2. прямий
1.
Асемблер: DJNZ Rn, <мітка> ; где n=0-7
Код: 11011rrr 1b
Час: 2 цикли
Алгоритм: (PC) : = (PC)+2,
(Rn) : = (Rn)-1,
якщо ((Rn)>0 або (Rn)<0), то (PC):=(PC)+<1b>
Пример: ;(R2)=08h, (P1)=FFh (11111111B)
LAB4: CPL P1.7
DJNZ R2,LAB4 ;(R2)={07-00}
;Ця послідовність команд переключає Р1.7
;вісім раз и призводить до появи чотирьох імпульсів
;на виводі БІС, який відповідає біту Р1.7
2.
Асемблер: DJNZ <direct>, <мітка>
Код: 11010101 direct lb
Час: 2 цикли
Алгоритм: (PC) : = (PC)+3,
(direct) : = (direct)-1,
якщо ((direct)>0 або (direct)<0), то
(PC) : = (PC)+<re18>
Пример: ;(ОЗУ[40])=01h, (ОЗП[50])=80h,
;(ОЗУ[60])=25h
DJNZ 40h, LAB1 ;(ОЗУ[40]):=00h
DJNZ 50h, LAB2 ;(ОЗУ[50]):=7Fh
DJNZ 60h, LAB3 ;(ОЗУ[60]):=25h
...
LAB1: CLR A
...
LAB2: DEC R1 ;здійснюється перехід на
;мітку LAB2
Примітка. Якщо команда DJNZ використовується для зміни виходу
порту, значення, яке використовується як операнд, зчитується з буфера
порту, а не з виводів БІС.
Команда JB <bit>, <1b>
Команда "перехід якщо біт встановлений" виконує перехід до адреси
мітки, якщо вказаний біт дорівнює "1", в протилежному випадку виконується
наступна команда. Адреса переходу вираховується при допомозі додання
адреси зміщення зі знаком в третьому байті команди (1b) до вмісту
лічильника команд після додання до нього 3.Ця команда не впливає на
прапори.
Асемблер: JB (bit), <мітка>
Код: 00100 000 bit 1b
Час: 2 цикли
Алгоритм: (PC):=(PC)+3
якщо (bit)=1, то (PC):=(PC)+<1b>
Пример: ;(A)=96h, (10010110b)
JB ACC.2,LAB5 ;ця команда забезпечує перехід
;на мітку LAB5
LAB5: INC A
Команда JBC <bit>, <1b>
Команда "перехід, якщо біт встановлений і скидання цього біту",
виконує перехід до визначеної адреси, якщо біт u1076 дорівнює "1". В
протилежному випадку виконується наступна за JBC команда. У будь-якому
випадку вказаний біт скидається. Адреса переходу визначається доданням
відносного зміщення адреси, вказаного зі знаком в третьому байті команди
(1b) і вмісту лічильника команд після додання до нього нього 3. Ця команда
не впливає на прапори.
Асемблер: JBC (bit), <мітка>
Код: 00010000 bit address re18
Час: 2 цикли
Алгоритм: (PC):=(PC)+3
якщо (bit)=1, то (bit):=0, (PC):=(PC)+<re18>
Пример: (A)=76h (0111 0110b)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.