- •2. Структура регістра eflags
- •3. Організація оперативної пам’яті. Сегментована модель оперативної пам’яті. Формування адреси в реальному режимі
- •4. Формати і типи даних. Формат машинних команд. Система переривань
- •5. Десяткова арифметика. Форми зображення десяткових чисел
- •7. Ділення ascii-чисел.
- •6. Директиви сегментації. Директиви proc і endp
- •7. Опис простих типів мовою асемблера
- •10. Синтаксис команд мовою асемблера
- •11. Команди передач даних
- •Xchg ax, data1; (data2) в data1, (ax) – початковий стан
- •12. Стекові передачі даних
- •13. Передачі адресних об’єктів, команди введення-виведення і передачі прапорців
- •14. Команди передачі даних movXx. Команда setCc. Команда xlat
- •15. Команди додавання, віднімання і порівняння
- •Inc reg/mem; Розмір 8/16/32.
- •16. Команди множення і ділення
- •20. Команди логічних операцій. Команди зсувів
- •22. Команди операцій з двійковими ланцюжками
- •23. Команди передачі керування (безумовні переходи)
- •24. Команди умовних переходів і команди керування циклами
- •26. Команди переривань і повернення з переривань
- •Загальні поняття.
- •Використання префіксів в ланцюжкових командах.
- •Команда movs.
- •Команда cmps.
- •Команда scas.
- •Команда lods.
- •Команда stos.
- •Команди введення/виведення ланцюжків.
- •29. Команди керування процесором
- •Команди, які впливають на прапорці.
- •Команди синхронізації.
- •Системні команди
- •31. Формати даних, які підтримуються fpu
- •Параметри для трьох форматів в таблиці
- •32. Програмна модель fpu
- •33. Слово стану sw і слово керування cw пристрою fpu.
- •Відповідність між кодом умови і прапорцями
- •34. Команди передач даних fpu: завантаження, збереження, збереження з вибором зі стека, обміну, завантаження сталих.
- •35. Арифметичні команди fpu: додавання, віднімання, множення, ділення.
- •36. Додаткові арифметичні команди fpu.
- •37. Команди порівняння fpu
- •38. Команди трансцендентних функцій. Алгоритми обчислення значень функцій і та логарифмів за будь-якою основою.
- •39. Команди керування пристроєм fpu
- •40. Спеціальні числові значення та особливі обчислювальні ситуації
23. Команди передачі керування (безумовні переходи)
Обійтися лінійними ділянками програми неспроможні, адже в алгоритмі наявні цикли, розгалуження, а також певні частини програми оформлені як підпрограми, організація виклику яких зумовлює переходи в програмі. Для цього потрібно виконувати команди, які визначаються конкретними адресами переходів. Такі команди називаються командами керування програмою. Є дві різновидності команд: внутрісегментні (near) – тут вимагається модифікація вмісту тільки регістра ip/eip, та між сегментні (far) – тут вимагається модифікація вмісту двох регістрів: регістра cs та регістра ip/eip. У першому випадку довжина вказівника 16 або 32 біти, у другому випадку – це вказівник-структура, довжиною 32 або 48 бітів. Команди передачі керування far jmp і far call можуть звертатися до будь-якої точки адресного простору в межах поточного рівня привілеїв, а передача керування між рівнями реалізується командою far call через проміжний шлюз виклику. Більше того, команди far jmp і far call в мікропроцесорі i486+ можуть здійснювати складні дії, пов’язані з перемиканням задач з однієї на іншу.
Адреса переходу в програмах мовою асемблера задається міткою переходу тієї команди, на яку передається керування. Транслятор з мови у відповідності з типом near або far формує потрібну команду.
В системі команд є п’ять форм команд безумовних переходів jmp, які розрізняються відстанню від від поточної команди і способом задання цільової адреси. Три з цих команд внутрісегментні і дві між сегментні.
Команда jmp rel8 забезпечує короткий (short) перехід (rel від слова relative, означає відносний). У другому байті знаходиться зміщення, яке інтерпретується як знакове ціле. Значення зміщення додається (з розширенням знаку до 16/32 бітів) до вмісту регістра ip/eip, яке відповідає адресі команди, що знаходиться після команди jmp. Діапазон зміни rel8 від –128 до +127. Відносна адресація забезпечує позиційну незалежність ділянки програми в оперативній пам’яті.
Команда прямого в межах сегмента (near) переходу jmp rel16/32. Аналогічна попередній, але має повне зміщення 16 бітів або 32 біти (залежить від параметра сегмента коду use16 або use32). Зміщення знакове ціле, яке додається до ip/eip.
Команда непрямого переходу в межах одного сегмента jmp reg/mem. Адреса переходу знаходиться в регістрі або в оперативній пам’яті. Завантажується під час виконання в регістр ip/eip. Розмір зміщення відповідно 16 бітів або 32 біти.
Команда прямого між сегментного переходу jmp ptr. Адреса переходу задається як безпосередній операнд, який складається з 16-бітового селектора та 16- або 32-бітового зміщення. Селектор завантажується в регістр cs, а зміщення в регістр ip або в регістр eip відповідно. Розмір зміщення залежить від розміру цільового сегмента коду.
Команда непрямого між сегментного переходу jmp mem. Адреса переходу знаходиться в оперативній пам’яті і є повним 32- або 48-бітовим вказівником селектор:зміщення. Селектор завантажується в регістр cs, а зміщення – в регістр ip або eip в залежності від розміру цільового сегмента коду.
У певних випадках селектор може бути селектором шлюзу виклику або шлюзу задачі, а також селектором сегмента стану задачі TSS. У цих випадках зміщення в jmp ігнорується, а нове значення ip або eip вибирається зі шлюзу або сегмента TSS нової задачі. При переході на нову задачу змінюються всі прапорці, оскільки регістр eflags завантажується з TSS.