З поверненням.
А зараз ми перейдемо до практичної частини.
Відкриваємо наш x64dbg.
Шукайте шаблонний.
І давайте почнемо виконувати ці інструкції, починаючи з цього місця.
Отже, ми будемо MOVE - . Потім, щоб ввести двійкові числа,
ми вводимо 0b, а потім цифри один, два, три, чотири, п'ять, шість, сім, вісім.
Отже, це двійкове число.
Гаразд.
Потім знову MOVZX, переміщуємо нульове розширення.
- , - . Клац.
Гаразд.
Отже, зараз ми поставимо тут точку зупинки і побіжимо.
Він б'є наш брейк-пойнт.
Тоді ми переступаємо. Він перемістить одиницю в - . Відійди.
Зараз - один. Він переходить до MOVZX - , - .
- не така.
Давайте скопіюємо це число,
скопіюємо це значення.
Відкрийте калькулятор і вставте його сюди.
Тож наразі це ось що.
Тож давайте перейдемо до переступання.
Тож давайте подивимось.
Давайте скопіюємо це значення і вставимо його сюди.
І тепер ми побачимо,
що спочатку це було це число, але коли ви MOVZX - , - , він додає всі нулі ззаду, щоб зробити
його до 32 біт.
Тому йому байдуже до будь-якого знаку, позитивного чи негативного.
Гаразд.
Отже, перейдемо до наступного
прикладу.
Тож ми продовжуємо натискати тут.
ВПЕРЕД.
Спочатку натисніть пробіл, а потім введіть MOV.
0b, і перемістіть це число.
Закрийте калькулятор.
Давайте спочатку відкладемо калькулятор.
Давайте дамо ці інструкції тут.
MOV - , 0b для двійкових, одиниця...
Так.
Тоді...
Гаразд, тоді рухайся.
MOVZX,---- Гаразд,
ми вже тут.
Давай переступимо.
Він перемістить цей гекс на 81. Гекс 81 - це число у двійковій системі числення від - до .
Тож давай переступимо.
А тепер - має гекс 81.
Давайте скопіюємо це значення і введемо його в наш калькулятор, а потім побачимо, що гекс 81 - це значення, яке ми щойно ввели.
Це значення.
Тож тепер ми будемо рухатися далі.
Тож переступайте, і давайте подивимося, що сталося з - . Вона має таку цінність.
Тож давайте скопіюємо його і вставимо сюди.
І ми все одно отримуємо те саме.
Ззаду він отримує всі нулі.
Тут йому байдуже до цього.
Неважливо, одиниця це чи нуль, тому що ми припускаємо, що все є додатним числом.
Отже, MOVZX, що розшифровується як "нульове розширення", завжди ставить нулі ззаду.
Він ніколи не буде ставити їх на задній план.
Саме тому він називається розширенням з нульовим ходом.
Тому він використовується лише тоді, коли ми вважаємо всі числа додатними.
Тож давайте збережемо це зараз.
Файл, файл виправлень.
І ми назвемо його 41.
41 -movzx.
Асм.
Тому що це рух...
Приклад 41.
Перейдемо до наступного прикладу
- розширення знаку.
Отже, відкриваємо шаблон знову.
Перезапустіть, перезапустіть
цей шаблон, щоб отримати новий шаблон.
А тепер рушаймо.
Так.
0b, і один, два, три, чотири, п'ять, шість, сім, вісім.
Отже, ми даємо це двійкове число, потім MOVSX, MOVSX - , - .
Нагадую, що MOVSX - це розширення знаків.
Тепер ми біжимо до нашої брейк-пойнту.
Відійди. Він пересуне одиницю на - , а тепер він пересунеться на MOVSX - , - . Відійди.
І давайте подивимося, що ж там...
Зрозумів.
Відкрийте калькулятор
і покладіть його туди, і ви побачите, що це оригінальне число, а ззаду все це розширили, додавши нулі.
Чому?
Тому що це позитивне число.
Через цей нуль тут, це позитивне число.
Ось чому він ставить всі нулі ззаду.
Тепер візьмемо інший
приклад, цей. Перемістити на одиницю, перемістити це число на - .
Тож ми поставили там місце.
MOV - , 0b, один, два, три, чотири, п'ять, шість,
сім, вісім.
Гаразд, тепер це інше двійкове число.
Це від'ємне число, тому що тут стоїть одиниця.
Тоді РУШ...
MOVSX - , - .
Гаразд, тепер продовжуємо переступати.
Він перемістить цей бінарний код, гекс 81, яким є 10000001, до - . Відійди.
І тепер - має це.
Ми можемо це підтвердити.
Скопіюйте це значення,
а це гекс 81, і введіть його у свій калькулятор, і ви побачите - він отримав те значення, з якого ми починали...
А це ось це.
Тепер ми переходимо до MOVSX - , - .
Давайте переступимо через це і подивимося, що станеться. - має це.
Тож давайте скопіюємо це зараз і вставимо сюди.
І подивіться, початковий номер був таким.
А тепер, після того, як ми зробили
MOVSX, він набиває всі ці ззаду, всі ці ззаду.
Чому?
Тому що це єдиний екземпляр. Це від'ємне число. Тому ззаду всі одиниці.
Ось як можна зрозуміти відмінності між MOVZX і MOVSX. MOVZX призначений для розширення
беззнакових чисел простим додаванням нулів ззаду, а MOVSX - для знакових чисел.
Таким чином, MOVSX буде враховувати, чи це додатне, чи від'ємне число.
Якщо це додатне число, то воно витіснить
усі нулі ззаду через нуль, що означає, що це додатне число. Але якщо це від'ємне число через одиницю, то воно заповнить
все одиницями.
Тепер давайте збережемо це. Клацніть файл виправлення, виправте, і назвемо це 42-movsx. Асм. Натисніть
"Зберегти і закрити".
На цьому практичний урок завершено.
Дякуємо за перегляд.