- •Практическая работа 2 программирование арифметических задач
- •Цель работы
- •Условные обозначения
- •Команда пересылки
- •Команды сложения и вычитания
- •Команды умножения
- •Команды деления
- •Изменение размера числа
- •Оператор указания типа ptr
- •Безусловный переход
- •Команда сравнения
- •Команды условного перехода
- •Пример программы
- •Задания для самостоятельной работы
-
Безусловный переход
Команды машинной программы выполняются в том порядке, как они записаны в памяти. Команды перехода позволяют нарушить этот порядок. Команды безусловного перехода выполняются независимо от каких-либо условий.
Безусловный переход (jump): JMP op
Операнд op указывает адрес перехода.
Команда перехода не меняет флаги.
Прямой безусловный переход: JMP <метка>
Операнд <метка> - метка команды, на которую надо передать управление:
ПРИМЕР
M: ADD AX, BX
JMP L ; переход «вперед»
...
L: MOV АХ, 0
JMP М ; переход «назад»
В машинной команде указывается не адрес перехода (метки), а разность адресов перехода и текущего (из регистра IP).
Если переход «назад», то величина разности при трансляции известна (подсчитывается), если «вперед» - формируется команда (3 байта) длинного перехода. Если заранее известно, что переход «вперед» будет коротким, и жалко терять байт на запись команды, используют оператор SHORT .
ПРИМЕР
JMP L ; длинный переход (3 байта)
JMP SHORT L ; короткий переход (2 байта)
...
L: ...
Если в программе указан оператор SHORT, а переход на самом деле оказался длинным, тогда Ассемблер зафиксирует ошибку.
-
Команда сравнения
Сравнение (compare): CMP op1, op2
Операнды должны быть одного типа, их допустимые комбинации такие же, как у команд пересылки, сложения и вычитания (см. п 2.3).
Команда эквивалентна команде вычитания SUB op1, op2, но вычисленная разность op1 - op2 никуда не записывается. Разность, другими словами соотношение операндов, характеризуется величинами флагов CF, PF, AF, ZF, SF и OF.
-
Команды условного перехода
2.11.1 Если переход осуществляется только при выполнении некоторого условия, он называется условным.
Команды условного перехода: Jxx <метка>
<Метка> указывает команду, на которую надо сделать переход в случае выполнения некоторого условия, обозначенного хх.
Команды условного перехода делят на три группы:
-
ставятся после команды сравнения;
-
реагируют на значение определенного флага;
-
зависят от значения регистра СХ.
2.11.2 При описании условия хх, при котором выполняется переход, используются следующие сокращения:
Е – equal (равно)
N - not (не - отрицание)
G
для
чисел со знаком
L – less (меньше)
А
для
чисел без
знака
В – below (ниже, меньше)
Команды, используемые после сравнения, приведены в таблице 2.5.
Таблица 2.5 – Команды условного перехода первой группы
Мнемокод |
Содержательное условие для перехода после СМР ор1, ор2 |
для любых чисел |
|
JE |
op1 = op2 |
JNE |
op1 ≠ op2 |
для чисел со знаком |
|
JL / JNGE |
op1 < op2 |
JLE / JNG |
op1 ≤ op2 |
JG / JNLE |
op1 > op2 |
JGE / JNL |
op1 ≥ op2 |
для чисел без знака |
|
JB / JNAE |
op1 < op2 |
JBE / JNA |
op1 ≤ op2 |
JA / JNBE |
op1 > op2 |
JAE / JNB |
op1 ≥ op2 |
2.11.3 Команды, выполнение которых зависят от значений флагов, перечислены в таблице 2.6
Таблица 2.6 – Команды условного перехода второй группы
Мнемокод |
Условие перехода |
Мнемокод |
Условие перехода |
JZ |
ZF=1 |
JNZ |
ZF=0 |
JS |
SF=1 |
JNS |
SF=0 |
JC |
CF=1 |
JNC |
CF=0 |
JO |
OF=1 |
JNO |
OF=0 |
JP |
PF=1 |
JNP |
PF=0 |
Замечание: следующие пары мнемокодов эквивалентны: JE и JZ, JNE и JNZ.
2.11.4 Одна команда, выполнение которой зависит от значения регистра СХ:
JCXZ <метка> (jump if CX is zero)
Переход выполняется, если регистр СХ равен нулю.
С помощью команд условного перехода можно передать управление не далее, чем на 127-128 байтов вперед или назад. Это примерно 30-40 команд (в среднем одна команда занимает 3-4 байта). Для осуществления «дальних» условных переходов надо привлекать команду безусловного перехода.