Привіт і ласкаво просимо назад.
У цьому уроці ми поговоримо про порівняння беззнакових та знакових чисел.
Пригадайте, що в попередніх уроках ми виконували вправу 35 - тире-порівняння. exe, і в цій вправі ми намагалися вивчити, як працює
compare у поєднанні з інструкцією jump below, також відомою як інструкція
jump carry.
Отже, ось тут, це файл з попереднього уроку.
Зверніть увагу, що коли ми порівнюємо числа в - та - регістрах, ці числа вважаються беззнаковими.
Це означає, що ми припускаємо, що вони обидва додатні числа.
А що, якщо ми намагаємося порівняти від'ємні числа?
Тому при порівнянні від'ємних чисел ми не можемо використовувати JB.
Нам потрібно використовувати інший набір стрибків.
Тож давайте розглянемо це в цьому уроці.
Розглянемо наступні
два числа:
число - FFFFFFFFFF та одиницю.
Якщо припустити, що вони не підписані, то це число більше одиниці, оскільки це найбільше додатне число, яке
може зберігатися в реєстрі.
Але з іншого боку, якщо ми припустимо, що вони знакові, то це число менше одиниці, оскільки в знаковій системі
числення доповнення до двійки це означає від'ємник.
Тепер програмісту потрібно вирішити, чи буде програма використовувати беззнакові числа або знакові.
Існують спеціальні інструкції для порівняння без підпису, а також для порівняння з підписом. Для порівняння беззнакових чисел використовуються
наступні
інструкції: JB - перехід, якщо нижче;
JBE - перехід, якщо нижче або
дорівнює; JA - перехід, якщо вище;
JAE - перехід, якщо вище
або дорівнює.
І приклад, який ми розглядали в попередньому уроці, належить до цієї категорії.
JB - одна з інструкцій під номерами без знака.
Для беззнакових чисел інтуїтивний спосіб зрозуміти інструкцію переходу наступний.
Припустимо, що ми маємо інструкцію порівняння -, - з наступним
переходом, так що JB,
jump below, означає, що ми переходимо, якщо - нижче -, і в математичній нотації це виглядає так:
- менше, ніж -. JBE, що розшифровується як "стрибок нижче
або дорівнює", інтуїтивно означає "стрибок, якщо - нижче - або дорівнює",
і це математичне представлення:
- менше або дорівнює -. JA, що розшифровується як "стрибок
вище", інтуїтивно це означає
стрибок, якщо - вище -, а математично це виглядає так: - більше,
ніж -. JAE, стрибок вище або
дорівнює, стрибок, якщо - вище - або дорівнює, і в математичному
поданні це виглядає так: - більше
або дорівнює -.
Нагадаю, що JB - це те ж саме, що і стрибкове перенесення.
JA
- це те саме, що стрибати, а не нести.
Тепер для знакових чисел слід використовувати
наступний набір інструкцій: JL - перехід, якщо
менше; JLE - перехід, якщо менше
або дорівнює; JG - перехід, якщо більше; JGE,- - перехід, якщо більше або дорівнює.
Тож зараз ми ще раз розглянемо попередній приклад.
У цьому прикладі, який ми розглядали раніше,
всі ці числа вважаються додатними.
Отже, в даному випадку це додатні
числа. Використовується перехід нижче.
Тепер давайте протестуємо ситуацію,
коли - є - тому давайте натиснемо на це і змінимо значення на FFFFFFFFF.
Тепер, якщо ви зупинитеся і поміркуєте над
цим на мить, якщо ми візьмемо це число без знаку, тобто це додатне число, то це найбільше можливе
додатне число, яке ви можете утримати в -.
Отже, в даному випадку, коли ви робите порівняння, ви точно знаєте, що - набагато більше, ніж -, і
тому стрибка нижче не відбудеться.
Тож давайте спробуємо.
Я збігаю і покажу вам.
Відійди.
А тепер ми продовжуємо, і
ви бачите, що стрибок нижче не є стрибком, тому що - набагато більший за -.
Тому він не стрибає.
Але що станеться, якщо ми вважатимемо це від'ємним числом?
Отже, якщо ми вважаємо, що це від'ємне число, це означає, що воно від'ємне.
Тоді ми не можемо використовувати JB.
Ми повинні змінити це на JL.
Гаразд, давайте спробуємо перезапустити його і змінити на JL.
Тож я просто перезавантажила його.
Тепер я поверну від'ємне число
назад: FFFFFFFFF.
А тепер я збираюся змінити це на JL замість JB, тому що я припускаю, що це від'ємне число.
ДЖЕЙ ЛО. Тепер подивимося, що з цього вийде.
Я побіжу, і я переступлю зараз.
Тепер ми порівняємо - і -.
Оскільки ми припускаємо, що це від'ємне
число, то - є меншим за два.
- є від'ємним.
- це два.
Тому це буде правдою.
Воно повинно стрибати.
Давай подивимося.
Це правда, він
стрибає.
Він стрибає.
Ось як ми можемо використовувати правильну інструкцію залежно від того, чи ми беремо порівняння зі знаком,
чи без знака.
Сподіваюся, це прояснило значення, відмінності між порівнянням беззнакових і знакових чисел.
Це все для цього відео.
Дякуємо за перегляд.