- •1. Що таке Асемблер?
- •9.Які ресурси середовища Intel64 для виконання програм
- •10. Режимы работы процессоров ia-32 (Режими роботи процесорів архітектури x86)
- •1 Реальный режим
- •2 Режим системного управления
- •3 Защищенный режим
- •11) Який адресний простір архітектури ia-32 і чим він визначається?
- •12 Який адресний простір архітектури Intel64 і чим він визначається?
- •14.Способи переведення у іншу систему числення. Приклади
- •13. Позиційні системи числення. Поняття та основні формули
- •15. Способи представлення від'ємних чисел
- •16. Додатковий код. Приклади
- •17. Зміщений код. Приклади
- •18 Формати з плаваючою точкою. Стандарти
- •19 Стандартний двійковий 32-бітовий формат з плаваючою точкою
- •20 Тандартний двійковий 64-бітовий формат з плаваючою точкою
- •21.Стандартний двійковий 80-бітовий формат з плаваючою точкою
- •22. Порівняння основних стандартних двійкових форматів з плаваючою точкою
- •23. Фізична память. Як узнати розрядність адрес?
- •24. Моделі пам'яті у процесорах архітектури x86
- •25. Сегментована пам'ять
- •26. Flat - модель пам'яті
- •27. Сторінкова пам'ять
- •28. Регістри процесора архітектури ia-32
- •29. Регістри процесора архітектури Intel64
- •30. Регістри загального призначення.
- •31. Сегментні регістри
- •8 Прапорів полягання
- •1 Прапор управління
- •5 Системних прапорів
- •35 Операнди команд та способи адресації операндів
- •36 Безпосередні операнди команд
- •37 Регістрові операнди команд
- •38 Способи вказування комірок пам'яті у якості операндів команд
- •39. Що таке опосередкована адресація стосовно вказування операнду команди?
- •40. Що таке база, індекс, зміщення, масштаб у операнді команди?
- •41Полное определение
- •44. Структура вихідного тексту програми на Асемблері
- •45.Директиви Асемблера. Найпопулярніші на вашу думку директиви
- •46.Директиви вказування типу процесора та моделі пам'яті
- •47. Директиви створення даних
- •48. Директива invoke. Приклади
- •49. Директива align. Приклади
- •50. Базові типи даних архітектури процесорів x86
- •51. Числові типи даних
- •52.Упаковані simd типи даних
- •Використання
- •53. Основні групи команд процесорів архітектури x86
- •54. Команди копіювання даних
- •Xchg Обмін данімі між операндами
- •55. Команди додавання цілих чисел
- •56. Команди віднімання цілих чисел
- •57. Команди множення цілих чисел
- •58. Команди ділення цілих чисел
- •59. Побітові логічні команди
- •60. Програмування читання та запису окремих бітів
- •61. Команди зсувів
- •62. Команди циклічного зсуву
- •63 Команды перехода
- •64 Реализация if-then-else
- •65, 66 Програмування циклів на асемблері?
- •67 Цикл з постумовою (рис. 2)
- •68. Програмування циклу зі збереженням біту переносу cf
- •69. Програмування циклу на основі команд loop
- •70. Програмування вкладених циклів
- •71. Команди обробки рядків даних
- •72. Команди stos, stoSx
- •73. Команди movs,movsx.
- •74. Префікс повторення rep та його різновиди.
- •75.Що таке структурованість та модульність програм. Наведіть приклади.
- •76. Макроси. Приклади програмування
- •77. Процедури. Визначення, виклик. Приклади програмування
- •78. Способи передавання значень параметрів процедурам
- •79. Локальні дані процедур
- •80. Пролог та епілог процедури
- •81. Стековий кадр процедури
- •82. Написання модульних програм на Асемблері
- •83. Можливості використання мов високого рівня сумісно з Асемблером
- •84. Конвенції виклику процедур
- •85. Конвенція cdecl. Приклад програмування.
- •86. Конвенція stdcall. Приклад програмування.
- •87. Асемблерні вставки у мовах високого рівня.
- •88. Середовище x87 fpu
- •89. Команди x87 fpu. Приклад програми.
- •90. Стек даних x87 fpu. Приклад програми.
- •91. Команди simd
- •92. Розширення mmx
- •93. Розширення sse
- •94. Типи даних sse
- •95. Векторны команди sse
- •96 Горизонтальне додавання
- •97. Команди movups та movaps. Приклад використання
- •98. Векторні команди множення sse. Приклад використання
- •99. Векторні команди додавання sse. Приклад використання
- •100. Команда shufps та її застосування
- •101. Розширення avx
- •102. Типи даних avx
- •103. Команды avx
- •104. Особенности команд avx по отношению к sse
- •105. Эволюция simd-расширений системы команд процессоров архитектуры х86
64 Реализация if-then-else
Конструкция IF-THEN-ELSE в ассемблере реализуется c помощью условных переходов
Код команды |
Реальное условие |
Условие для CMP |
Код команды |
Реальное условие |
Условие для CMP |
JA |
CF=0 и ZF=0 |
если выше |
JG |
ZF=0 и SF=OF |
если больше |
JAE JNC |
CF=0 |
если выше или равно если нет переноса |
JGE |
SF=OF |
если больше или равно |
JB JC |
CF=1 |
если ниже если перенос |
JL |
SF<>OF |
если меньше |
JBE |
CF=1 | ZF=1 |
если ниже или равно |
JLE |
ZF=1 | SF<>OF |
если меньше или равно |
JE JZ |
ZF=1 |
если равно если ноль |
JNE JNZ |
ZF=0 |
если не равно если не ноль |
JO |
OF=1 |
если есть переполнение |
JNO |
OF=0 |
если нет переполнения |
JS |
SF=1 |
если есть знак |
JNS |
SF=0 |
если нет знака |
JP |
PF=1 |
если есть четность |
JNP |
PF=0 |
если нет четности |
К примеру мы должны сравнить ах и bx
Конструкция в ПАСКАЛЕ
If(условие1)then Какие то действия 1
goto Какие то действия 2
Соответствие в Ассемблере
cmp ax,bх;
jz/js/jo/… @label1; – не условие1 (потому что по условию один мы перейдем, а нам это не нужно)
;Какие то действия 1
@label1
;Какие то действия 2
Если мы хотим реализовать классическую IF-THEN-ELSE типа
If(условие)then begin Какие то действия 1
end else begin Какие то действия 2
end
Вот лично мое решение
…
Jnz @if ; безусловный переход – как к примеру goto в Паскале
@then
;Какие то действия1
Jnz @ifend; безусловный переход – как к примеру goto в Паскале
@if
Cmp ax,bx
Jz/jo/… @then; - условие (то же что и в примере на паскале)
;Какие то действия 2
@ifend
…
65, 66 Програмування циклів на асемблері?
Нехай потрібно щось виконати 10 разів. Це "щось" будемо називати "тілом циклу". Тіло циклу може містити деяку множину рядків програмного коду на асемблері. Розглянемо варіант алгоритму циклу з постумовою (рис. 2)
На асемблері такий цикл можна запрограмувати наступним чином:
mov ecx, 0 ; обнулюємо лічильник – регістр ECX
cycle:
. . . ; тіло циклу
inc ecx ; збільшуємо лічильник на 1
cmp ecx, 10 ; порівнюємо лічильник з 10
jl cycle ; якщо лічильник менше – перехід на мітку cycle
Необхідно відзначити, що такий варіант організації циклу є неприйнятний для послідовної обробки груп бітів з розповсюдженням переносу, оскільки команда CMP сама записує біт CF.
Інший варіант циклу – у лічильник спочатку записується потрібна кількість повторень, а на кожній ітерації значення лічильника зменшується на одиницю:
mov ecx, 10 ; у регістр ECX записуємо кількість повторень
cycle:
. . . ; тіло циклу
dec ecx ; зменшуємо лічильник на 1
jnz cycle ; якщо лічильник не 0, то перехід на мітку cycle
Джерело: лекції Порєва
