Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

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






Способи адресації даних






Система команд МК51 припускає чотири основних типи адресації:

- пряму – адреса операнда або переходу міститься в команді;

- безпосередню – операнд, що завантажується, міститься в другому або в другому і третьому байтах команди;

- непряму – адреса комірки ЗПД (ЗПП) міститься (обчислюється) у якому-небудь спеціальному регістрі, посилання на який міститься в команді;

- регістрову – джерелом або приймачем операнда є регістр активного банку, посилання на який міститься в команді.

Крім того, у розпорядженні програміста є такі різновиди непрямої адресації:

- відносна – у команді міститься не вся абсолютна адреса переходу, а лише зсув у байтах від поточного вмісту PC;

- сторінкова – у регістрі-фіксаторі порту Р2 міститься адреса області пам'яті, виведеної на границю блоку розміром 256 бaйтів (так званий номер сторінки), а в іншому регістрі (R0 або R1) міститься зсув по сторінці в байтах. Виконавча адреса комірки пам'яті формується стикуванням вмісту Р2 (старша частина адреси) і вмісту регістрів R0 або R1 (молодша частина адреси);

- базова – вказівний регістр DPTR містить початкову (так звану базову) абсолютну адресу області пам'яті, де перебувають дані довільної структури. До адреси бази додається байтове зміщення для визначення адреси потрібної комірки пам'яті. Джерелом зміщення є акумулятор. Зміщення – це беззнакове число в діапазоні 0...255.

Використання символічних імен

Наявність компілятора Асемблер МК51 передбачає можливість присвоєння символічних імен як байтам РПД, адресам ЗП і РПД, безпосереднім даним (константам), так і окремим бітам.

Символічні імена ділять на такі:

- зарезервовані (АСС, PSW, SBUF, TCON і т.д.). Багато з таких імен згадувалися при розгляді апаратних ресурсів МК51;

- імена, що визначаються користувачем за допомогою директив Асемблера.

Таким чином, на рівні Асемблера в команді може бути присутнім або пряма адреса байта, або його символічне ім'я:

MOV PSW, #0 та MOV 0D0H, #0 – це те саме.

Адресація бітів

Всі окремо адресовані біти можна поділити на дві групи:

1) біти з 16-байтової області ОЗП (0...127);

2) біти блоку апаратних регістрів (128...255).

Біти із групи 1 доступні шляхом вказівки в команді прямої адреси біта або символічного імені біта, привласненого користувачем раніше. Біти із групи 2 доступні або через пряму адресу біта, або з використанням зарезервованого імені (С, OV, F0). Крім того, адресувати будь-який біт із груп 1 і 2 можна з використанням бітового селектора:

- АСС.4 – четвертий біт акумулятора;

- PSW.5, TCON.2 і т.д. – з використанням зарезервованого імені регістра;

- V1.3, MY_2.0 – з використанням символічного імені, що присвоєне користувачем.

Для бітів не допускається непряма адресація!

Характеристика функціональних груп команд

Всі команди МК51 можна розділити на групи по функціональних ознаках: передачі даних, арифметичних, логічних, бітових операцій, передачі керування.

Команди арифметичних операцій, логічні, бітові операції та команди порівняння модифікують чотири прапори, які перебувають у регістрі PSW:

Р — жорстко пов'язаний із вмістом акумулятора. Якщо кількість одиниць у ньому непарна, то (Р)=1, інакше (Р)=0;

АСС — встановлюється в " 1", якщо при підсумовуванні (відніманні) виникло міжтетрадне перенесення (позика) в акумуляторі;

С — встановлюється в " 1", якщо виникло перенесення зі старшого (АСС.7) біта в акумуляторі або позика в старший біт;

OV — встановлюється в " 1", якщо в результаті підсумовування/віднімання знакових чисел виникло переповнення, тобто цей прапор свідчить про факт переповнення без вказівки типу — позитивне чи негативне;

При діленні (OV)=1, якщо виконувалося ділення на нуль.

При множенні (OV)=1, якщо результат більший 255.

Потоки передачі даних

Відповідно структурі пам'яті МК51 можна виділити три інформаційних потоки: пересилання із ЗПП у РПД, пересилання між ЗПД і РПД, обмін даними усередині РПД (включаючи РСФ).

КОМАНДИ ПЕРЕДАЧІ ДАНИХ є найбільш численною групою. Вони охоплюють всі потоки передачі, розглянуті вище.

КОМАНДИ АРИФМЕТИЧНИХ і ЛОГІЧНИХ ОПЕРАЦІЙ характеризуються тим, що для них одним з операндів завжди є вміст акумулятора, однак результат може поміститися або в акумулятор, або на місце другого операнда, якщо це прямоадресований байт РПД або блоку РСФ.

КОМАНДИ ПЕРЕДАЧІ КЕРУВАННЯ. До даної групи відносяться команди, які реалізують безумовні та умовні переходи, виклики підпрограми і повернення з підпрограми.

По способу адресації переходу можна виділити такі типи:

1. ДОВГИЙ перехід – здійснюється по АП в об’ємі 64Кб. У команді міститься повна 16-бітова абсолютна адреса переходу, що завантажується в (PC). Мнемоніка команд починається з букви L.

2. АБСОЛЮТНИЙ перехід – здійснюється в межах сторінки ЗПП (РПП) розміром 2048 байтів (2Кб). У команді містяться тільки 11 бітів адреси (а0...а10). При виконанні команди в обчисленій адресі наступної команди (РС)=(РС)+2; молодші 11 бітів заміняються на а0...а10, взяті з команди. Формат – номер 6. Мнемоніка починається із символу А.

3. КОРОТКИЙ ВІДНОСНИЙ перехід – дозволяє передати керування в границях -128...+127 байтів щодо адреси команди, що слідує за командою переходу, тобто відносно (РС)=(РС)+2 або (РС)=(РС)+3. Відносна адреса переходу rel міститься в другому або третьому байті команди. Мнемоніка починається із символу S для безумовних переходів. Команди умовних переходів також реалізовані по цьому формату.

4. НЕПРЯМИЙ перехід – дозволяє передати керування по непрямій адресі, що формується по вмісту регістра DPTR і зміщенню з акумулятора. Дозволяє організувати перехід за адресою, обчисленою в процесі роботи програми.

Асемблер припускає використання узагальненої мнемоніки команд JMP і CALL, які в процесі трансляції заміняються оптимальними і припустимими по формату команди переходу (AJMP, SJMP, LJMP) або виклику (ACALL, LCALL).

Правила запису програм мовою Асемблер

Кожна команда являє собою рядок такої конструкції:

[ МІТКА: ] мнемокод операції операнд(и) [; коментарі ]

де [ ] – поле може бути відсутнім;

МІТКА – символічне ім'я комірки пам'яті, починаючи з якої розміщається в пам'яті дана команда.

У якості ОПЕРАНДІВ можуть застосовуватися числа (адреси і дані), зарезервовані і задані символічні імена.

Для вказівки системи числення, в якій задається число, використовують буквені індекси після самого числа: В – двійкова, Q – вісьміркова, D або нічого – десяткова, Н – шістнадцяткова.

КОМЕНТАРІ – будь-які символи.

Поняття про Асемблер

Асемблер – це програмний засіб, призначений для перетворення вихідного тексту програми, що містить мнемонічні імена команд і операндів, у послідовність двійкових кодів, що являють собою команды, які виконує процесор.

Таким чином, вхідна інформація для Асемблера представляється у вигляді текстового файлу, а вихідна інформація генерується у вигляді так званого файлу ОБ'ЄКТНИХ кодів (об'єктного файлу). Крім того, Асемблер виконує перевірку коректного опису команд. Іноді його називають компілятором (транслятором) з мови Асемблер.

У результаті роботи Асемблера є можливість крім об’єктного файлу одержати також файл ЛІСТИНГУ, що містить текстову інформацію про розміщення кодів команд і даних по конкретних адресах пам'яті мікроконтролера або мікропроцесорної системи.

Програма мовою Асемблера складається з логічних сегментів – блоків з елементів одного типу (команди, дані). Для МК51 ці логічні сегменти безпосередньо відповідають фізичним областям пам'яті (РПП, ЗПП, РПД, ЗПД, бітова область).

Для вказівки адрес команд і даних або значень даних зручно використати символічні імена (далі – просто імена), які відповідають фізичному або математичному змісту завдання. Використання імен робить програму більш зрозумілою для програміста і його колег, полегшує процес модифікації програми і її налагодження. Ім'я може починатися з літери і містити не більше 32 символів.

Для сегментної побудови програми й визначення символічних імен адрес і значень даних використовують Директиви Асемблера. Директиви Асемблера не є виконуваними командами, а являють собою інструкції для компілятора по розміщенню команд і даних у пам'яті МК або МПС.

СТРУКТУРА ПРОГРАМИ:

- ДЕКЛАРАТИВНИЙ блок – опис символічних імен даних та адрес, які використовуються у програмі, а також директиви виділення пам'яті для змінних і вказівки значень констант (за допомогою директив Асемблера);

- блок ІНІЦІАЛІЗАЦІЇ – настроювання портів і блоків периферійних функцій на необхідні режими роботи, ініціалізація стека (за допомогою команд);

- блок РЕАЛІЗАЦІЇ алгоритмів і функцій керування (за допомогою команд).

Директиви визначення символічних імен

Директива EQU – будь-якому імені ставиться у відповідність операнд.

Формат директиви: < ім'я> EQU < вираз>

Наприклад:

z1 equ 10

z2 equ z1 + 4

z3 equ z1 + z2 + 5

 

Імена, визначені директивою EQU, можна використовувати як адресу коду, адресу даних (внутрішніх або зовнішніх) або значень даних. Наприклад:

MOV A, #z1; Завантаження числа 10 в акумулятор

MOV A, z1; Пересилання в акумулятор із комірки з адресою 0АН.

Оператори, що допускаються для використання у виразах із директивами Асемблера, описані далі.

Директива DATA – задає ім'я для адреси даних у РПД.

Формат директиви: < ім'я> DATA < адресний вираз>

Директива XDATA – задає ім'я для адреси зовнішніх даних (ЗПД).

Формат директиви: < ім'я> XDATA < адресний вираз>

Директива BIT – задає ім'я для адреси біта з області внутрішнього ОЗП із бітовою адресацією.

Формат директиви: < ім'я> BIT < адреса біта>

Наприклад:

control DATA 2AH

f1 bit control.3; Адреса у вигляді бітового селектора

f2 bit f1 + 4; Адресний вираз

f3 bit 60H; Абсолютна адреса

 

Приклади зручного використання символічних імен:

counter DATA 20H

flag BIT P1.7

on BIT 30Н

MOV counter, 10

m1: < дії в циклі >

SETB on

wait: JNB flag, wait

DJNZ counter, m1

CLR on

Лічильник адрес (не плутати з лічильником команд (PC))

У процесі компіляції Асемблер з кожним сегментом зв'язує свою внутрішню змінну, що називається лічильником адрес. У цій змінній підраховується, скільки байтів відведено в пам'яті під кожну команду або число і відповідно, по якій адресі буде розміщені наступна команда або число. У такий спосіб лічильник адрес „стежить” за розміщенням у пам'яті кодів команд і даних.

Мітка команди – це, по суті, символічне ім'я для адреси комірки пам'яті, починаючи з якої дана команда розміщена в пам'яті. Мітки команд зв'язуються з адресами автоматично в процесі компіляції програми, тому спеціальних директив для визначення міток не існує.

Директиви керування сегментами програми

Поява в тексті програми цих директив означає, що розміщені далі команди або дані відносяться до сегмента (типу) пам'яті, зазначеному директивою:

- CSEG – початок сегмента кодів (пам'ять програм);

- DSEG – початок сегмента даних в ОЗП РПД;

- XSEG – початок сегмента зовнішніх даних (ЗПД).

Керування значенням лічильника адрес

З першою появою в тексті програми будь-якої з директив керування сегментами Асемблер створює новий лічильник адрес для цього сегмента і встановлює його в нуль. При повторному відкритті сегмента продовжується рахунок від попереднього значення лічильника.

Існує директива ORG, що дозволяє програмісту встановлювати потрібні значення лічильника адреси для поточного активного сегмента і в такий спосіб розміщати коди в пам'яті по потрібних адресах.

Формат директиви: ORG < адресний вираз>

Директиви ініціалізації пам'яті DB, DW заповнюють байт або слово (2 байти) вказаним значенням. Використовують для розміщення значень констант у сегменті кодів (тобто в пам'яті програм):

[ ім'я: ] DB < значення>

[ ім'я: ] DW < значення>

Директива резервування (виділення) пам'яті DS для змінної в сегменті зовнішніх або внутрішніх даних (ЗПД або ОЗП РПД):

[ ім'я: ] DS < кількість байтів>

ENDдиректива визначення кінця програмного модуля.

Оператори періоду трансляції

Для зручності запису команд і директив у мові Асемблер допускається задавати числові значення й адреси пам'яті у вигляді алгебраїчних виразів. Значення такого виразу буде визначено компілятором ще під час трансляції, а в код команди буде підставлятися тільки результат цих дій. Припустимими операторами є: +, -, *, /, (), AND, OR, XOR, NOT, LOW – виділення молодшого байта, HIGH – виділення старшого байта із двохбайтового виразу.

Наприклад:

1) X equ 10; визначено ім'я X для числа 10

Y equ X+2; визначено ім’я Y для значення 12

Z equ (X+Y)*4; визначено ім’я Z для значення 88

 

2) DSEG

org 70H

V1: ds 4; Виділення пам'яті для чотирьохбайтової змінної

...

MOV A, V1+1; Читання в акумулятор другого байта змінної V1

 

3) X equ 3704; Оголошення двохбайтового числа

MOV R0, #LOW(X); Запис молодшого байта X у регістр R0

MOV R1, #HIGH(X); Запис старшого байта X у регістр R1


Додаток 2. Зведена таблиця команд MCS-51.


Умовні позначення:

# - безпосередній операнд (#d8 – 8-бітний, #d16 - 16-бітний);

@ - непряма адресація;

Rn - регістр активного банка з номером n = 0..7;

Ri - регістр активного банка для непрямої адресації (і = 0, 1);

ad - пряма адреса комірки (байта) в РПД;

ads, add - пряма адреса джерела і приймача даних в РПД;

bit - пряма адреса біта в РПД;

rel - 8-розрядне зміщення в командах відносного переходу;

ad11 - 11-бітна адреса-зміщення всередині сторінки об’ємом 2кб;

ad16 - пряма 16-бітна адреса переходу;

..h - старша частина адреси або операнда;

..l - молодша частина адреси або операнда;

c.. - символьне ім’я константи (що визначається через директиви);

v.. - символьне ім’я змінної (що визначається через директиви);

(..) - вміст комірки пам’яті або регістра;

((..)) - вміст комірки пам’яті, яка адресується регістром непрямо;

m.. або МІТКА - символьне ім’я адреси переходу.


НАЗВА КОМАНДИ МНЕМОНІКА КОП БАЙТ ЦИКЛІВ ОПЕРАЦІЯ
Команди передачі даних
  Пересилання в акумулятор з регістра (n=0...7) MOV A, Rn 11101пт     (A) (Rn)
  Пересилання в акумулятор прямоадресованого байта MOV A, ad       (A) (ad)
  Пересилання в акумулятор байта із внутрішнього ОЗП (i=0, 1) MOV A, @Ri 1110011i     (A) ((Ri))
  Завантаження в акумулятор константи MOV A, #data8       (A) #data8
  Пересилання в регістр із акумулятора MOV Rn, A 11111пт     (Rn) (A)
  Пересилання в регістр прямоадресованого байта MOV Rn, ad 10101пт     (Rn) (ad)
  Завантаження в регістр константи MOV Rn, #data8 01111пт     (Rn) #data8
  Пересилання акумулятора по прямій адресі MOV ad, A       (ad) (A)
  Пересилання регістра по прямій адресі MOV ad, Rn 10001пт     (ad) (Rn)
  Пересилання прямоадресованого байта по прямій адресі MOV add, ads       (add) (ads)
  Пересилання байта із внутрішнього ОЗП по прямій адресі MOV ad, @Ri 1000011i     (ad) ((Ri))
  Пересилання константи по прямій адресі MOV ad, #data8       (ad) #data8
  Пересилання у внутрішній ОЗП з акумулятора MOV @Ri, A 1111011i     ((Ri)) (A)
  Пересипання у внутрішній ОЗП прямоадресованого байта MOV @Ri, ad 0110011i     ((Ri)) (ad)
  Пересилання у внутрішній ОЗП константи MOV @Ri, #data8 0111011i     ((Ri)) #data8
  Завантаження вказівника даних MOV DPTR, #data16       DPTR #data16
  Пересилання в акумулятор байта з пам'яті програм MOVC A, @A+DPTR       (A) ((A)+(DPTR))
  Пересилання в акумулятор байта з пам'яті програм MOVC A, @A+PC       (PC) (PC)+1; (A) ((A) + (PC))
  Пересилання в акумулятор байта із зовнішнього ОЗП MOVX A, @Ri 1110001i     (A) ((Ri))
  Пересилання в акумулятор байта із розширеного зовнішнього ОЗП MOVX A, @DPTR       (A) ((DPTR))
  Пересилання у зовнішній ОЗП із акумулятора MOVX @Ri, A 1111001i     ((Ri)) (A)
  Пересилання в розширений зовнішній ОЗП із акумулятора MOVX @DPTR, A       ((DPTR)) (A)
  Завантаження в стек PUSH ad       (SP) (SP)+1; ((SP)) (ad)
  Повернення зі стека POP ad       (ad) ((SP)); (SP) (SP)-1
  Обмін акумулятора з регістром XCH A, Rn 11001пт     (A) ↔ (Rn)
  Обмін акумулятора із прямоадресованим байтом XCH A, ad       (A) ↔ (ad)
  Обмін акумулятора з байтом із внутрішнього ОЗП XCH A, @Ri 1100011i     (A) ↔ ((Ri))
  Обмін молодшої тетради акумулятора з молодшою тетрадою байта внутрішнього ОЗП XCHD A, @Ri 1101011i     (A0...3) ↔ ((Ri0...3))
Команди арифметичних операцій
  Додавання акумулятора з регістром (n=0...7) ADD A, Rn 00101пт     (А) (А) + (Rn)
  Додавання акумулятора із прямоадресованим байтом ADD A, ad       (А) (А) + (ad)
  Додавання акумулятора з байтом із внутрішнього ОЗП (i=0, 1) ADD A, @Ri 0010011i     (А) (А) + ((Ri))
  Додавання акумулятора з константою ADD A, #data8       (А) (А) + #data8
  Додавання акумулятора з регістром і переносом ADDC A, Rn 00111пт     (А) (А) + (Rn) + (С)
  Додавання акумулятора із прямоадресованим байтом і переносом ADDC A, ad       (А) (А) + (ad) + (С)
  Додавання акумулятора з байтом із внутрішнього ОЗП і переносом (i=0, 1) ADDC A, @Ri 0011011і     (А) (А) + ((Ri)) + (С)
  Додавання акумулятора з константою і переносом ADDC A, #data8       (А) (А) + #data8 + (С)
  Десяткова корекція акумулятора DA A        
  Віднімання від акумулятора регістра і позики SUBB A, Rn 10011пт     (А) (А) - (Rn) - (С)
  Віднімання від акумулятора прямоадресованого байта і позики SUBB A, ad       (A) (A) - (ad) - (C)
  Віднімання від акумулятора байта із внутрішнього ОЗП і позики SUBB A, @Ri 1001011і     (A) (A) - ((Ri)) - (C)
  Віднімання від акумулятора константи і позики SUBB A, #data8       (А) (А) - #data8 - (С)
  Інкремент акумулятора INC A       (А) (А) + 1
  Інкремент регістра INC Rn 00001пт     (Rn) (Rn) + 1
  Інкремент прямоадресованого байта INC ad       (ad) (ad) + 1
  Інкремент байта із внутрішнього ОЗП INC @Ri 0000011і     ((Ri)) ((Ri)) + 1
  Інкремент вказівника даних INC DPTR       (DPTR) (DPTR) + 1
  Декремент акумулятора DEC A       (A) (A) - 1
  Декремент регістра DEC Rn 00011пт     (Rn) (Rn) - 1
  Декремент прямоадресованого байта DEC ad       (ad) (ad) - 1
  Декремент байта із внутрішнього ОЗП DEC @Ri 0001011i     ((Ri)) ((Ri)) - 1
  Множення акумулятора і регістра В MUL AB       (B)(A) (A) * (B)
  Ділення акумулятора на регістр В DІV AB       (A), (B) (A)/(B)
Команди логічних операцій
  Логічне І акумулятора та регістра (n=0...7) ANL A, Rn 01011пт     (А) (А) AND (Rn)
  Логічне І акумулятора та прямоадресованого байта ANL A, ad       (А) (А) AND (ad)
  Логічне І акумулятора та байта із внутрішнього ОЗП (i=0, 1) ANL A, @Ri 0101011i     (А) (А) AND ((Ri))
  Логічне І акумулятора та константи ANL A, #data8       (А) (А) AND #data8
  Логічне І прямоадресованого байта та акумулятора ANL ad, A       (ad) (ad) AND (А)
  Логічне І прямоадресованого байта та константи ANL ad, #data8       (ad) (ad) AND #data8
  Логічне АБО акумулятора і регістра (n=0...7) ORL A, Rn 01001пт     (А) (А) OR (Rn)
  Логічне АБО акумулятора і прямоадресованого байта ORL A, ad       (А) (А) OR (ad)
  Логічне АБО акумулятора з байтом із внутрішнього ОЗП (i=0, 1) ORL A, @Ri 0100011i     (А) (А) OR ((Ri))
  Логічне АБО акумулятора і константи ORL A, #data8       (А) (А) OR #data8
  Логічне АБО прямоадресованого байта і акумулятора ORL ad, A       (ad) (ad) OR (А)
  Логічне АБО прямоадресованого байта і константи ORL ad, #data8       (ad) (ad) OR #data8
  Виключаюче АБО акумулятора і регістра (n=0...7) XRL A, Rn 01101пт     (А) (А) XOR (Rn)
  Виключаюче АБО акумулятора і прямоадресованого байта XRL A, ad       (А) (А) XOR (ad)
  Виключаюче АБО акумулятора і байта із внутрішнього ОЗП (i=0, 1) XRL A, @Ri 0110011i     (А) (А) XOR ((Ri))
  Виключаюче АБО акумулятора і константи XRL A, #data8       (А) (А) XOR #data8
  Виключаюче АБО прямоадресованого байта і акумулятора XRL ad, A       (ad) (ad) XOR (А)
  Виключаюче АБО прямоадресованого байта і константи XRL ad, #data8       (ad) (ad) XOR #data8
  Скидання акумулятора CLR A       (А) 0
  Інверсія акумулятора CPL A       (А) /(А)
  Циклічний зсув акумулятора вліво RL A       (А.n+1) (А.n), n=0-6; (A.0) (А.7)
  Зсув акумулятора вліво через перенос RLC A       (А.n+1) (А.n), n=0-6; (A.0) (С); (С) (А.7)
  Циклічний зсув акумулятора вправо RR A       (А.n) (А.n+1), n=0-6; (А.7) (А.0)
  Зсув акумулятора вправо через перенос RRC A       (А.n) (А.n+1), n=0-6; (А.7) (С); (С) (А.0)
  Обмін місцями тетрад в акумуляторі SWAP A       (А.0, А.1, А.2, А.3) ↔ (А.4, А.5, А.6, А.7)
Команди операцій з бітами
  Скидання біта переносу CLRС       (C) 0
  Скидання біта CLRbit       (bit) 0
  Установка біта переносу SETBС       (С) 1
  Установка біта SETBbit       (bit) 1
  Інверсія біта переносу CPLС       (С) /(С)
  Інверсія біта CPLbit       (bit) /(bit)
  Логічне І біта і переносу ANLC, bit       (С) (С) AND (bit)
  Логічне І інверсії біта й переносу ANLC, /bit       (С) (С) AND /(bit)
  Логічне АБО біта й переносу ORLC, bit       (С) (С) OR (bit)
  Логічне АБО інверсії біта й переносу ORLC, /bit       (С) (С) OR /(bit)
  Пересилання біта в перенос MOVC, bit       (С) (bit)
  Пересилання переносу в біт MOVbit, c       (bit) (С)
Команди передачі управління
  Довгий абсолютний перехід у повному об’ємі пам'яті програм LJMPad16       (PC) ad16
  Абсолютний перехід всередині двохкілобайтової сторінки AJMPad11 a10a9a800001     (PC) (РС)+2, потім (PC 0-10) ad11
  Короткий відносний перехід всередині сторінки 256 байт SJMPrel       (PC) (PC)+2, потім (PC) (PC)+rel
  Непрямий відносний перехід JMP@A+DPTR       (PC) (A)+(DPTR)
  Перехід, якщо акумулятор дорівнює 0 JZrel       (PC) (PC)+2, потім якщо (А)=0, то (PC) (PC)+rel
  Перехід, якщо акумулятор не дорівнює 0 JNZrel       (PC) (PC)+2, потім якщо (А)< > 0, то (PC) (PC)+rel
  Перехід, якщо перенос дорівнює одиниці JCrel       (PC) (PC)+2, потім якщо (С)=1, то (PC) (PC)+rel
  Перехід, якщо перенос дорівнює нулю JNCrel       (PC) (PC)+2, потім якщо (С)=0, то (PC) (PC)+rel
  Перехід, якщо біт дорівнює одиниці JBbit, rel       (PC) (PC)+3, потім якщо (bit)=1, то (PC) (PC)+rel
  Перехід, якщо біт дорівнює нулю JNBbit, rel       (PC) (PC)+3, потім якщо (bit)=0, то (PC) (PC)+rel
  Перехід, якщо біт установлений, з наступним скиданням біта JBCbit, rel       (PC) (PC)+3, потім якщо (bit)=1, то (PC) (PC)+rel, (bit) 0
  Декремент регістра і перехід, якщо не нуль DJNZRn, rel 11011пт     (PC) (PC)+2, (Rn) (Rn)-1, потім якщо (Rn)< > 0, то (PC) (PC)+rel
  Декремент прямоадресованого байта і перехід, якщо не нуль DJNZad, rel       (PC) (PC)+2, (ad) (ad)-1, потім якщо (ad)< > 0, то (PC) (PC)+rel
  Порівняння акумулятора із прямоадресованим байтом і перехід, якщо не дорівнює CJNEA, ad, rel       (PC) (PC)+3, якщо (A)< > (ad), то (PC) (PC)+rel, при цьому якщо (A)< (ad), то (С) 1, інакше (С) 0
  Порівняння акумулятора з константою і перехід, якщо не дорівнює CJNE A, #data8, rel       (PC) (РС)+3, якщо (A)< > #data8, то (PC) (PC)+rel, при цьому якщо (A)< #data8, то (С) 1, інакше (С) 0
  Порівняння регістра з константою і перехід, якщо не дорівнює CJNE Rn, #data8, re1 10111пт     (PC) (РС)+3, якщо (Rn)< > #data8, то (PC) (PC)+rel, при цьому якщо (Rn)< #data8, то (С) 1, інакше (С) 0
  Порівняння байта у внутрішньому ОЗП і перехід, якщо не дорівнює CJNE @Ri, #data8, rel 1011011i     (PC) (РС)+3, якщо ((Ri))< > #data8, то (PC) (PC)+rel, при цьому якщо ((Ri))< #data8, то (С) 1, інакше (С) 0
  Довгий абсолютний виклик підпрограми LCALLad16       (PC) (PC)+3; (SP) (SP)+1 и ((SP)) (PC 0-7); потім (SP) (SP)+1 и ((SP)) (PC 8-15); потім (PC) ad16
  Абсолютний виклик підпрограми всередині двохкілобайтової сторінки ACALLad11 a10a9a810001     (PC) (PC)+3; (SP) (SP)+1 и ((SP)) (PC 0-7); потім (SP) (SP)+1 и ((SP)) (PC 8-15); потім (PC 0-10) ad11
  Повернення з підпрограми RET       (PC 8-15) ((SP)); (SP) (SP)-1; потім (PC 0-7) ((SP)); (SP) (SP)-1
  Повернення з підпрограми обробки переривання RETI       (PC 8-15) ((SP)); (SP) (SP)-1; потім (PC 0-7) ((SP)); (SP) (SP)-1
  Холоста команда NOP       (PC) (PC)+1

 



Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.02 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал