Склад команд умовних і безумовних переходів

Страницы работы

Содержание работы

Каф ЭС

Лабораторна робота №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)

Похожие материалы

Информация о работе