Системне програмування
Практична робота № 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 нульового значення.
Таким чином, ми розглянули основні команди, що можуть бути корисні при обчисленні арифметичних виразів як над знаковими, так і над без знаковими даними.
Зупинимось детальніше на командах додавання та множення.