logo
Pract / Prakt4

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

Практична робота № 4

Характеристика команд для опрацювання цілочисельних даних

Система команд Intel8086

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

2. Логічні операції: AND,OR,XOR,NOT,TEST.

3. Команди зсуву.

3.1. Логічний зсув:

SHL зсув вліво (на місце молодших бітів стають „0”).

SHR зсув вправо (на місце старших бітів стають „0”).

3.2. Арифметичний зсув:

SAL зсув вліво (на місце молодших бітів стають „0”).

SAR зсув вправо (розмноження знакового розряду).

3.3. Циклічний зсув:

ROL циклічний зсув вліво.

ROR циклічний зсув вправо.

RCL циклічний зсув вліво з участю CF.

RCR циклічний зсув вправо з участю CF.

4. Команди керування програмою.

4.1. Команда безумовного переходу JMP.

Дана команда додає значення вказане в операнді до значення в регістрі IP, який містить адресу команди, що розташована після JMP. Відповідно, якщо здійснюється перехід назад, то значення операнду буде від’ємне, якщо вперед – додатне.

4.2. Оператор циклу LOOP. Передає керування на мітку, вказану як операнд, поки значення в регістрі CX не стане рівне нулю.

Існують додатково також різновиди цієї команди:

LOOPE(або LOOPZ) – передає керування за адресою, вказаною в операнді якщо CX містить нульове значення і встановлений прапорець нуля, тобто ZF=1.

LOOPNE(або LOOPNZ) передає керування за адресою, вказаною в операнді якщо CX містить нульове значення і прапорець нуля скинуто, тобто ZF=0.

4.3. Команди умовних переходів.

Працюють аналогічно до JMP та LOOP, за винятком того, що довжина переходу повинна бути в межах від -128 до +128 байт.

Переходи для беззнакових даних.

Мнемоніка

Опис

Прапорці, що перевіряються

JE/JZ

Перехід, якщо рівно/нуль

ZF

JNE/JNZ

Перехід, якщо не рівно/не нуль

ZF

JA/JNBE

Перехід, якщо вище/не нижче або рівно

ZF,CF

JAE/JNB

Перехід, якщо вище або рівно/ не нижче

CF

JB/JNAE

Перехід, якщо нижче/не вище або рівно

CF

JBE/JNA

Перехід, якщо нижче або рівно/не вище

CF,AF

Будь яку перевірку можна закодувати двома мнемо кодами. Наприклад JB та JNAE генерують однаковий об’єктний код, хоча позитивну перевірку JB легше зрозуміти аніж заперечну JNAE.

Переходи для знакових даних.

Мнемоніка

Опис

Прапорці, що перевіряються

JE/JZ

Перехід, якщо рівно/нуль

ZF

JNE/JNZ

Перехід, якщо не рівно/не нуль

ZF

JG/JNLE

Перехід, якщо більше/не менше або рівно

ZF,SF,OF

JGE/JNL

Перехід, якщо більше або рівно/ не менше

SF,OF

JL/JNE

Перехід, якщо менше/не більше або рівно

SF,OF

JLE/JNG

Перехід, якщо менше або рівно/не більше

ZF,SF,OF

Команди переходу для умови рівно або нуль (JE/JZ) та не рівно або не нуль (JNE/JNZ) існують як для знакових так і для без знакових даних. Стан рівно/нуль наступає незалежно від знаку.

Спеціальні арифметичні перевірки.

Мнемоніка

Опис

Прапорці, що перевіряються

JS

Перехід, якщо є знак(від’ємне)

SF

JNS

Перехід, якщо немає знаку(додатнє)

SF

JC

Перехід, якщо є перенос (аналогічно JB)

CF

JNC

Перехід, якщо немає переносу

CF

JO

Перехід, якщо є переповнення

OF

JNO

Перехід, якщо немає переповнення

OF

JP/JPE

Перехід, якщо паритет парний

PF

JNP/JP

Перехід, якщо паритет непарний

PF

Ще одна команда умовного переходу перевіряє чи рівний вміст регістра CX нулю. Ця команда повинна знаходитися безпосередньо після арифметичної команди чи команди порівняння. Одним з можливих місць застосування команди JCXZ може бути початок циклу, де вона перевіряє чи не містить регістр CX нульового значення.

Таким чином, ми розглянули основні команди, що можуть бути корисні при обчисленні арифметичних виразів як над знаковими, так і над без знаковими даними.

Зупинимось детальніше на командах додавання та множення.