Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТЕМА 14.1.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
187.9 Кб
Скачать

14.4. Система команд

До системи команд МП К1810ВМ86 входять 113 базових команди, багато з яких дозволяють різноманітні режими адресації. За функціональним призначенням команди можна згрупувати у п’ять функціональних груп: команди передачі даних, арифметичні команди, логічні команди та команди зсувів, команди передачі та керування мікропроцесором.

Команди передачі даних

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

Команда MOV (move - переносити) може пересилати байт чи слово між регістром і коміркою пам'яті чи між двома регістрами. Вона може також пересилати безпосередні дані в регістр чи комірку пам'яті.

Команда MOV має такий формат:

MOV dst,src (dst) <--(src),

де dst - приймач, а src - джерело даних.

У цій команді допускається більшість з можливих операндів.

Наведемо декілька прикладів асемблерних команд MOV з різноманітними джерелами і приймачами:

MOV DX,CX ; пересилання слова з регістра до регістра

MOV BX,ES:[SI] ; пересилання слова з пам'яті до регістра

MOV AX,TABLE ; пересилання слова з пам'яті до регістра

MOV TABLE,AX ; і навпаки

MOV ES:[BX],AX ; замінити регістр сегмента, що використовується

MOV DS,AX ; пересилання між шістнадцятибітовими регістрами

MOV BL,AL ; пересилання між восьмибітовими регістрами

MOV CL,30H ; пересилання константи в регістр

MOV DEST,25H ; пересилання константи в пам'ять

У команді MOV виключаються такі сукупності операндів.

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

2. Команда не дозволяє завантажити безпосереднє значення до сегментного регістра. Так як і в першому випадку, його слід завантажити до регістра загального призначення. Наприклад, такі команди завантажують номер блока сегмента даних (DATA_SEG) до регістра DS:

MOV AX,DATA_SEG

MOV DS,AX

3. Командою MOV неможливо передати зміст одного сегментного регістра в іншій. Така передача здійснюється через проміжний загальний регістр:

MOV AX,DS ; передача з регістра DS

MOV ES,AX ; передача до регістра ES

Команда XCHG (exchange - обміняти) має формат

XCHG dst,src (dst)<->(src)

і дозволяє обміняти вміст двох регістрів чи регістра та комірку пам'яті. Одначе вона не може виконати обмін значень сегментних регістрів. Наведемо декілька прикладів асемблерного запису команди XCHG:

XCHG AX,BX ;обміняти значення (слів) двох регістрів

XCHG AL,BH ; обміняти значення (байт) двох регістрів

XCHG WORD_LOC,DX ;обміняти значення комірки пам'яті

XCHG DI,BYTE_LOC ;та регістра

Команда XLAT (translate - перекладати з однієї мови на іншу) вибирає значення з таблиці байтів і завантажує його в регістр AL. Таблиця може мати до 256 елементів.

Команда XLAT має формат: XLAT таблиця_джерело, де таблиця_джерело ім'я таблиці, що розглядається. Перед виконанням команди XLAT початкову адресу таблиці потрібно завантажити в регістр BX, а номер байта, що витягається, в регістр AL.

Така послідовність команд витягає десятий байт з таблиці S_TAB:

MOV AL,10 ;завантажити номер байта в AL

MOV BX,OFFSET S_TAB ;завантажити зміщення адреси BX

XLAT S_TAB ;витягнути значення байта з таблиці в AL

Команда XLAT зручна для виконання перетворень, котрі вимагають багатьох дій, наприклад, для пошуку ASCII - коду шістнадцяткової цифри.

Команди LEA (load effective addres - завантажити виконавчу адресу), LDS (load pointer using DS - завантажити вказівник з використанням регістра DS) та LES (load pointer using ES - завантажити вказівник з використанням регістра ES). При виконанні цих команд до вказаних регістрів передаються не дані, а адреси.

При виконанні команди завантаження ефективної адреси LEA reg,mem утворюється ефективна адреса EA пам'яті (mem) та власне її значення, а не адресоване нею слово в пам'яті, завантажується в регістр загального призначення reg. Передача адреси вимагається, наприклад, для ініціалізації регістра BX до його використання в команді XLAT.

Команда завантаження повних вказівників LDS reg,mem виконує більш складні дії: обчислюється ефективна адреса EA і виконується звертання до пам'яті, а потім слово, яке зчитується з пам'яті, передається до регістра DS (команда LDS) або до регістра ES (команда LES). Звичайно в команді LDS вказується індексний регістр SI, а в команді LES - індексний регістр DI, що узгоджується з використанням регістрів у ланцюжкових командах. Команди LDS та LES повинні адресувати в пам'яті подвійне слово.

Арифметичні команди

Арифметичні операції виконуються над цілими числами в чотирьох форматах: беззнакові подвійні, знакові двійкові, упаковані двійково-десяткові та неупаковані двійково-десяткові (рис.2.11).

Беззнакові двійкові числа є байтами або словами, що мають діапазони від 0 до 255 і від 0 до 65535 відповідно. Знакові двійкові числа у форматах байта або слова зображуються у звичайному додатковому коді і мають діапазони від -128 до +127 для байта та від -32768 до +32767 для слова. Додавання та віднімання знакових та беззнакових чисел виконують однакові команди, а для множення та ділення передбачені окремі команди.

Команди додавання

Мікропроцесор має команду ADD (add - додати), власне додавання та команди ADC додавання з переносом.

ADD dst,src ; (dst)<-(dst) + (src)

ADC dst,src ; (dst)<-(dst) + (src) + (CF)

В якості приймача dst та джерела src можна вказувати регістри загального призначення та комірки пам'яті з будь-яким режимом адресації, а в якості src - ще й безпосередній операнд. До команд додавання звичайно відносять однооперандну команду інкремента (increment - приростити):

INC dst ; dst <-- (dst) + 1

Команди віднімання

До команд віднімання (subtract - відняти, decrement - зменшити) належать:

SUB dst,src ; (dst) <-- (dst) - (src)

SBB dst,src ; (dst) <-- (dst) - (src) - (SF)

DEC dst ; (dst) <-- (dst) - 1

Треба підкреслити, що ознака CF в операціях віднімання стає ознакою позики та встановлюється в 1, коли від'ємник більше зменшуваного.

До команд віднімання традиційно відносять команду NEG зміни знака, так як її дія еквівалентна відніманню операнда від 0.

NEG dst ; dst <-- 0 - (dst)

Якщо операнд дорівнює 0, то його значення не змінюється. Зміна знака максимального за модулем від'ємного числа (тобто числа вигляду 100...0) не викликає зміни операнда, але при цьому встановлюється в 1 ознака переповнення OF.

Команди множення

Мікропроцесор К1810ВМ86 має дві команди множення: MUL (multiply помножити) помножує числа без знака, IMUL (integer multiply - помножити цілі числа) - числа зі знаком. Обидві команди можуть множити як байти, так і слова. Ці команди мають формат: MUL src,IMUL src, де src - джерело, яким може бути регістр загального призначення або комірка пам'яті розміром у байт або слово. В якості другого операнда команди MUL та IMUL використовують вміст регістра AL (при операціях з байтом) або регістра AХ (при операціях над словами). Добуток має подвійний розмір та розміщується таким чином:

- множення байтів розміщує шістнадцятибітовий добуток у регістрах AH (старший байт) та AL (молодший байт);

- множення слів розміщує тридцятидвобітовий добуток в регістрах DX (старше слово) та AX (молодше слово).

Команди ділення

Мікропроцесор має дві команди ділення. Команда DIV (division - ділення) виконує ділення чисел без знака, а команда IDIV (integer division - ділення цілих чисел) - ділення чисел зі знаком.

Ці команди мають формат: DIV src; IDIV src, де src (джерело) - дільник (розміром у байт чи слово), який знаходиться в регістрі загального призначення або в комірці пам'яті. Ділене повинне мати подвійний розмір; воно витягується з регістрів AH та AL (при діленні на восьмибітове число) або з регістрів DX та AX (при діленні на шістнадцятибітове число). Результат розміщується таким чином:

- якщо джерело являє собою байт, то частка розміщується в регістрі AL, а залишок - в регістрі AH;

- якщо джерело являє собою слово, то частка розміщується в регістрі AX, а залишок - в регістрі DX;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]