Привіт і ласкаво просимо назад.
У цьому уроці ми розглянемо прапор CF, також відомий як прапор для перенесення.
CF дорівнює одиниці, або встановлюється в одиницю, якщо додавання двох чисел призводить до переносу старшого
біта, який є крайнім лівим бітом.
У цьому випадку відбулося обгортання.
Візьміть, наприклад, таку інструкцію: перемістіть всі "F" на "-".
Всі F означають від'ємне число, а потім додається одиниця до -.
Отже, максимальний розмір у регістрі - становить 32 біти, тобто DWORD, чотири байти.
Тож у цьому випадку, якщо ми додамо до нього одиницю, то це вже буде максимум.
Тож ми додаємо до нього ще один.
Це спричинить перенесення, перенесення.
Він обернеться навколо.
CF дорівнює одиниці.
- дорівнюватиме нулю.
Це означає, що в додаванні допущена помилка.
Чому?
Тому що коли ви додаєте дуже велике число, всі F до одиниці, ви не повинні отримати нуль.
Але в цьому випадку ви отримуєте нуль.
Отже, CF один вказує на те, що в додаванні є помилка.
Отже, давайте подивимось на схематичну форму в двійковому вигляді.
Отже, ось представлення для всіх F у двійковій формі.
Отже, коли ви додаєте одиницю до наведеного вище числа, ви отримуєте велику цифру один, за якою йдуть всі ці 32 нулі.
Тож цей встановлений у прапорці для перенесення.
Отже, прапорець перенесення показує, що в додаванні є помилка.
Отже, ми можемо спробувати це зараз у вашому x64dbg.
Отже, відкриваємо шаблон і вводимо інструкцію. Перемістіть це в -, щоб ми могли перейти
до цього рядка і ввести move -.
Одна, дві, три, чотири, п'ять, шість, сім, вісім двійок. Натисни "Гаразд".
А потім додайте ще один.
Додати - один.
Тепер давайте поставимо тут точку зупинки і запустимо програму.
А тепер подивіться на прапори CF. Прапор C дорівнює нулю.
Тож ми переступаємо.
Перенесемо це число в -. Відійди.
І тепер - отримав це число, яке є максимальним числом для -.
Ви можете додати до нього ще один і подивитися, що станеться з прапором, коли ми переступимо через нього.
Це - стає нулем, що неможливо, тому що не можна додати одиницю і отримати нуль.
Отже, прапор С показує носіння одного.
Це означає, що в додаванні допущено помилку.
Ходімо далі.
Інший приклад.
Прапорець CF також буде встановлено в одиницю, якщо віднімання вимагає запозичення зі старшого біта.
У цьому випадку також відбувається обгортання.
Прикладом може бути переміщення нуля до -, і переміщення нуля до -, і віднімання - від -.
Отже, у схематичному вигляді нуль - це всі такі нулі.
Від нуля не можна відняти три від нуля.
Тобі треба позичити.
Тож тут є один, і уявний, який можна позичити. Ви отримуєте, і ви отримуєте цей результат, всі одиниці, а потім нуль
одиниць.
Отже, цю уявну одиницю потрібно запозичити з більш значущого біта зліва, і тому вона встановлює
прапорець в одиницю.
Отже, знову ж таки, це показує, що в цьому випадку відбулося щось накручування, накручування.
Тож давайте спробуємо зараз.
Тож давайте введемо ці інструкції ось тут.
Друкуймо.
Рух - нуль.
Хід - три. Sub - -.
Гаразд, ось ми і приїхали.
Ми перемістимо нуль на -.
Тож давай переступимо.
Давайте подивимося на -. - тепер дорівнює нулю. Він пересуне три на -.
Тож давайте переступимо, і тепер - це три, і він відніме його від -.
Він відніме три від нуля.
Тож давайте зробимо крок і подивимося, що станеться з прапором.
Він встановлюється на одиницю, і ви отримуєте такий результат.
Ось як працює прапорець перенесення, який показує, що інструкції якимось чином спричинили певне обертання.
Розглянемо інший приклад.
У цьому прикладі прапорець CF буде очищено до нуля, якщо не відбудеться перенесення і не буде обгортання.
У цьому випадку, наприклад, якщо ми перемістимо два до -, і перемістимо вісім до -, додамо - до -, отримаємо десять.
Отже, у цьому випадку розмір - достатньо великий для зберігання результату додавання, тому перенесення не відбувається.
Отже, якщо перенесення не відбувається, прапорець CF буде встановлений і буде обнулений.
Тож давайте спробуємо.
Тепер у нашій програмі ми введемо move - 2, move - 8 і add - -.
Тож ми зараз тут.
Виконаємо цей рядок.
Давай переступимо.
Це змістить два на -. Тепер - два. Воно зміститься з восьми на -.
Давай переступимо.
- вісім.
Тепер він додасть - до - і збереже результат у -.
Тож давайте подивимось -.
Отже - має значення десять. A - гекс для десяти.
Отже, у цьому випадку, якщо ви подивитеся на CF, прапорець CF буде обнулено.
Чому?
Тому що ні, ніякого обгортання не відбувається.
Тож перш ніж ми закінчимо це відео, не забудьте зберегти свій файл.
Отже, я вже зберіг його як 29 CF тире прапорець крапка E X E.
Тож, щоб зберегти файл, просто натисніть файл, патч, а потім він просто дасть ім'я файлу.
На цьому відео все.
Дякуємо за перегляд.