Привіт і ласкаво просимо назад.
У цьому уроці ми розглянемо SF, прапор-знак.
SF дорівнює старшому біту останнього обчислення.
Отже, якщо ми маємо двійкове число, отримане в результаті останнього обчислення, і якщо старший біт дорівнює одиниці,
то прапорець буде дорівнювати одиниці.
Якщо старший біт дорівнює нулю, наприклад, як у цьому випадку, то ваш прапор SF буде нульовим.
Отже, прапорець SF - це не що інше, як останній біт у числі, старший біт.
Це все.
Тож якщо це нуль, то це нуль.
Якщо це один, то це один.
Це все.
Отже, це використовується у представленні чисел доповнення двійки.
SF означає, що нуль SF означає, що це додатне число.
SF один означає, що це від'ємне число. Отже, представлення числа доповнення двійки - це ще один спосіб
інтерпретації двійкових чисел.
Отже, якщо ви інтерпретуєте це як двійкове число, як число, що доповнює двійку, то одиниця тут вказує
на те, що це від'ємне число, а нуль означає, що це додатне число.
Це і є сенс представлення числа доповнення двійки у спрощеному, спрощеному поясненні.
Тож давайте спробуємо цей приклад тут.
Якщо, наприклад, перемістити нуль на -, і зменшити його на одиницю, це стане від'ємним числом.
Чому?
Оскільки від'ємне число дорівнює одиниці, то всі двійкові числа дорівнюють одиниці.
Ми ввійдемо в гекс.
Будуть одні двійки.
Перший байт буде F, другий байт буде F, третій байт і четвертий байт буде F. Отже, все буде F, тобто
всі одиниці.
Отже, якщо це всі одиниці, то прапорець знаку
буде встановлено, оскільки старший біт дорівнює одиниці.
Візьмемо інший приклад.
Якщо ми перемістимо нуль на - і збільшимо його на одиницю, він стане одиницею.
Отже, в даному випадку старший біт дорівнює нулю, старший байт - нуль-нуль.
Старший біт - нуль.
Отже, оскільки він дорівнює нулю, SF дорівнює нулю.
Це означає, що це додатне число.
Тож давайте спробуємо це зараз.
Відкриваємо наш шаблон один у x64dbg.
І давайте введемо ці інструкції.
Почнемо з цього: перемістимо нуль на -.
Рух - нуль.
Наступні - decrease -, dec -.
Натисни
"Гаразд".
Закриваємо.
Поставте там точку зупинки і біжіть.
Ми досягли нашої брейк-пойнта, і давайте переступимо через нього.
Тепер він змістить нуль на -.
Відійди. - тепер дорівнює нулю.
Тепер вона зменшиться на одиницю.
Тож дивіться, що відбувається.
Він отримує двійки.
Гаразд.
"Всі" означає
"всі".
Переконатися в цьому можна за допомогою калькулятора.
Отже, відкриваємо програму калькулятора.
Виберіть калькулятор програміста тут.
Виберіть гекс.
А тепер ми візьмемо нуль мінус один, тому що ми зменшуємо нуль на одиницю.
Отже, нуль мінус один. - дорівнює нулю, мінус один, мінус один дорівнює. Ти отримаєш -.
У цьому випадку ми використовуємо 32-бітовий регістр.
Тому ми розглянемо лише ці чотири байти.
Ось це слово.
Отже, це слово DWORD означає, що це все F, тобто якщо ми інтерпретуємо
його як представлення двійкового доповнення, то це буде від'ємне число, тому що у двійковому числі воно представляється
саме так.
Чому це так довго?
Тому що це QWORD.
Один байт тут, два байти тут, три байти тут, чотири байти тут.
Отже, це DWORD, тобто 32-розрядний.
Отже, нас цікавлять лише 32 біти.
Це означає, що далі ми розглядатимемо лише цей варіант.
Отже, це означає, що це від'ємне число.
Якщо розглядати це як представлення числа з доповненням до двійки, то одиниця тут означає, що це від'ємне
число.
Так F стане одним цілим.
Тож тепер спробуємо інший приклад.
Тут ми переносимо нуль на -. Тож ми збираємо, рухаємо - нуль, і ми INC. INC означає збільшення на одиницю.
Тоді закрий це.
Тож зараз ми переступимо через цю інструкцію. Переміщаємо нуль на -, і переступаємо через нього.
Ми отримали нульове значення, а тепер збільшимо його на одиницю.
Ми переступаємо через нього, і воно стає одним цілим.
І ми бачимо, що прапорець знаку дорівнює нулю.
Гаразд.
Тому що результатом цього обчислення є нуль
у старшому біті.
Дивіться цей найзначніший біт.
Старший біт - нуль.
Ось тут, ви можете це побачити.
Гаразд, давайте збережемо це зараз.
Файл, патч
Файл, патч, і назвемо його 28 тире SF прапор.
Гаразд.
На цьому відео все.
Дякуємо за перегляд.