- •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
58. Команди ділення цілих чисел
(источник - http://looch-disasm.narod.ru/refe01.htm)
div op2 – беззнаковое целочисленное деление,
idiv op2 – знаковое целочисленное деление.
Алгоритм деления
Рассмотрим выполнение операции D = A / B , где A и B цели двоичные числа без знака .
Одним из самых простых алгоритмов является деление " в столбик ".
Алгоритм деления n - битового числа A 4-битное B
можно записать так :
1 . Установить i = n - 4.
2 . Взять четыре старшие биты числа A. Отметить это как R = { an -1 , an -2 , an -3 , an -4 }
3 . Если R больше или равна B ,
то : i - и цифра (бит ) результата di равна 1 , вычитаем R = R - B
иначе : i - и цифра результата di равна 0
4 . Уменьшить i на единицу. Если i меньше нуля , то конец работы .
5 . Умножить R на два. Такое умножение означает смещение битов на одну позицию
влево. Добавить в R в младший разряд i -й бит числа A , т.е. ai .
6 . Переход на п. 2 .
59. Побітові логічні команди
(источник - http://looch-disasm.narod.ru/refe01.htm)
ADD – сложение.
OR – логическое включающее «ИЛИ»
ADC – сложение с переносом.
SBB – вычитание с заёмом
AND – логическое «И».
SUB - вычитание
XOR – логическое исключающее «ИЛИ»
CMP – сравнение двух операндов.
TEST – логическое сравнение.
NEG – получение дополнительного кода (изменение знака).
NOT – инвертирование
60. Програмування читання та запису окремих бітів
(источник - http://looch-disasm.narod.ru/refe01.htm)
BSF – crанирование бита вперед
BSR – сканирование бита назад
BT – проверка бита
BTS – проверка бита и установка в единицу
BTC – проверка бита и сброс в нуль
61. Команди зсувів
(источник - http://looch-disasm.narod.ru/refe01.htm)
SHL – обычный сдвиг влево (по направлению к старшему биту)
SHR – обычный сдвиг вправо (по направлению к младшему биту)
SAL – арифмитический сдвиг влево (по направлению к старшему биту)
SAR – арифметический сдвиг вправо (старший бит размножается — если в старшем бите 0, то сдвинутые биты забиваются нулями, если 1 - единицами)
SAL и SHL работают одинаково.
62. Команди циклічного зсуву
63 Команды перехода
1) jmp метка –
безусловный переход на
метку. Например: jmp @exit; Используется
очень часто. По сути выполняет то же
самое действие, что и goto в
Паскале
2) jcc метка (jcc –
одна из команд в следующей таблице) –
условный переход. Переход выполняется,
если соответствующее условие выполнено.
Реально каждое условие является
каким-либо состоянием флагов.
Обычно перед командой условного перехода
выполняется команда cmp,
хотя это совсем не обязательно. В
приведённом ниже примере мы хотим найти
модуль числа eax:
cmp eax,
0;
jge @NoNEG; {если
больше или равно, то знак инвертировать
не надо}
neg eax;
@NoNEG:
Если
вы разберётесь с
флагами,
и поймёте, какие флаги реально изменяет
каждая команда, то сможете писать
условные переходы, например, после
команды dec.
Это иногда позволяет получить некоторый
выигрыш в производительности.Команды
условного перехода:
Код команды |
Реальное условие |
Условие для 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 |
если нет четности |
3) jecxz метка – переход, если ecx=0 4) loop метка – цикл. Уменьшает регистр ecx на 1 и выполняет переход типа short (не дальше, чем на 127 байт) на метку, если ecx<>0. Например, в следующем фрагменте команда add выполнится 10 раз: mov ecx, 10; @loop_start: add eax, ecx; loop @loop_start; Команда loop эквивалентна паре команд dec ecx; jnz метка, но не меняет флаги 5) loope|loopz метка – цикл пока равно|ноль 7) loopne|loopnz метка – цикл пока не_равно|не_ноль Все перечисленные команды уменьшают ecx на 1, после чего выполняют переход типа short, если ecx<>0, и если выполняется условие. Для команд loope|loopz условие – равенство ZF=1, для loopne|loopnz – равенство ZF=0. Сами командыloopcc не изменяют значений флагов, так что ZF должен быть определён предыдущей командой. Например, следующий фрагмент копирует строку из esi в edi пока не кончится строка (ecx=0), или пока не встретится символ с ASCII-кодом 13 (конец строки): mov ecx, lenght_string; @loop0: lodsb; stosb; cmp al, 13; @loopnz loop0;
