Команди порівняння та умовні переходи
ЦИКЛИ З ВИКОРИСТАННЯМ ассемблерного вставок
- Цикл з умовою поста (еквівалент do<>while)
- Цикл з передумовою (еквівалент while ()<>)
§ зменшити значення регістра% ecx на 1;
§ якщо% ecx = 0, передати управління наступній за loop команді;
§ якщо% ecx ≠ 0, передати управління на мітку.
Напишемо програму для обчислення суми чисел від 1 до 10 (звичайно ж, скориставшись формулою суми арифметичної прогресії, можна переписати цей код і без циклу - але ж це тільки приклад).
Команди порівняння та умовні переходи. безумовний перехід
Команда loop неявно порівнює регістр% ecx з нулем. Це досить зручно для організації циклів, але часто цикли бувають набагато складніше, ніж ті, що можна записати при помощіloop. До того ж потрібен еквівалент конструкції if ()<>. Ось команди, що дозволяють виконувати довільні порівняння операндів:
cmp операнд_2. операнд_1
Команда cmp виконує віднімання операнд_1 - операнд_2 і встановлює прапори. Результат віднімання ніде не запам'ятовується.
Порівняли, встановили прапори, - і що далі? А у нас є ціле сімейство jump-команд, які передають управління іншим командам. Ці команди називаються командами умовного переходу. Кожній з них поставлено у відповідність умова, яке вона перевіряє. синтаксис:
Команди jcc не існує, замість cc потрібно підставити мнемонічне позначення умови.