
Команда порівняння cmp
Команда порівняння cmp має цікавий принцип роботи. Він абсолютно такий же, як і у команди віднімання sub операнд_1, операнд_2. Команда cmp так само, як і команда sub, виконує віднімання операндів і встановлює прапори. Єдине, чого вона не робить - це запис результату віднімання на місце першого операнда.
Синтаксис команди cmp:
cmp операнд_1, операнд_2 - порівнює (compare) два операнди і за результатами порівняння встановлює прапори.
Прапори, що встановлюються командою cmp, можна аналізувати спеціальними командами умовного переходу. Перед тим, як ми їх розглянемо, приділимо трохи уваги мнемоніки цих команд умовного переходу (табл. 12.1). Розуміння позначень при формуванні назви команд умовного переходу (елемент у назві команди jcc, позначений нами cc) полегшить їх запам'ятовування і подальше практичне використання.
Таблиця 12.1 - Значення абревіатур в назві команди jcc
Мнемонічне позначення |
Англійська |
Українська |
Тип операндів |
E e |
equal |
Рівно |
Будь-які |
N n |
not |
Ні |
Будь-які |
G g |
greater |
Більше |
Числа зі знаком |
L l |
less |
Менше |
Числа зі знаком |
A a |
above |
Вище, в сенсі "більше” |
Числа зі знаком |
B b |
below |
Нижче, в сенсі "менше" |
Числа зі знаком |
Таблиця 12.2 - Перелік команд умовного переходу для команди cmp операнд_1, операнд_2
Типи операндів |
Мнемокод команди умовного переходу |
Критерій умовного переходу |
Значення прапорів для здійснення переходу |
Будь-які |
je |
операнд_1 = операнд_2 |
zf = 1 |
Будь-які |
jne |
операнд_1<>операнд_2 |
zf = 0 |
Зі знаком |
Jl / jnge |
операнд_1 < операнд_2 |
sf <> of |
Зі знаком |
Jle / jng |
операнд_1 <= операнд_2 |
sf <> of or zf = 1 |
Зі знаком |
Jg / jnle |
операнд_1 > операнд_2 |
sf = of and zf = 0 |
Зі знаком |
Jge / jnl |
операнд_1 => операнд_2 |
sf = of |
Зі знаком |
Jb / jnae |
операнд_1 < операнд_2 |
cf = 1 |
Зі знаком |
Jbe / jna |
операнд_1 <= операнд_2 |
cf = 1 or zf=1 |
Зі знаком |
Ja / jnbe |
операнд_1 > операнд_2 |
cf = 0 and zf = 0 |
Зі знаком |
Jae / jnb |
операнд_1 => операнд_2 |
cf = 0 |
Не дивуйтеся тій обставині, що однаковим значенням прапорів відповідає кілька різних мнемокодів команд умовного переходу (вони відділені одна від одної косою рискою в табл. 12.2). Різниця в назві зумовлена бажанням розробників мікропроцесора полегшити використання команд умовного переходу в поєднанні з певними групами команд. Тому різні назви відображають скоріше різну функціональну спрямованість.Тим не менше, те, що ці команди реагують на одні й ті ж прапори робить їх абсолютно еквівалентними і рівноправними в програмі. Тому в табл. 12.2 вони згруповані не за назвами, а за значеннями прапорів (умовами), на які вони реагують.