З поверненням.
У попередньому уроці ми виконували вправи на додавання - інструкції додавання з використанням регістрів DWORD, що означає
весь регістр, повний регістр, чотирибайтовий
регістр.
У цьому уроці ми будемо робити часткові регістри.
Тож давайте спробуємо зараз.
Ви можете скористатися тією ж програмою, яку
ми використовували на минулому уроці, а потім просто перезапустити, щоб видалити все це.
Якщо ви хочете зберегти його, не забудьте виправити його і зберегти, перш ніж вносити будь-які зміни.
Отже, ви робите Файл, Виправлення, а потім виправляєте це - можливо, ми можемо назвати це 03_ADD. EXE.
Натисни "Зберегти".
Гаразд, тепер у вас є копія, і ми можемо відкрити ADD.
І продовжимо з того місця, на якому зупинилися.
Отже, тут я ставлю коментар "Повні регістри" до цього місця, а звідси я ставлю ще один коментар "Частковий регістр. Тому я натискаю Пробіл, щоб додати коментар.
Пам'ятайте, що ви просто ставите крапку з комою і вводите свій коментар.
Гаразд.
Тож ми продовжуємо далі.
Часткові регістри.
Давайте спочатку налаштуємо наші часткові регістри.
Перша інструкція
- перші три інструкції - це встановлення значень, початкових значень.
Тож перемістіть це значення.
Отже, ми надрукуємо нашу інструкцію тут.
Залиште одне порожнє місце і натисніть клавішу пробілу.
MOV EDI, AB 29
FF FF.
Натисни
"Гаразд".
Наступна інструкція - перемістити 703 в ECX.
Отже, введіть MOV
ECX 0x703.
Не обов'язково вводити всі нулі спереду.
Просто наберіть 703.
Далі потрібно перемістити 0xFF в EAX.
Тож давайте надрукуємо це зараз.
MOV EAX, 0x
FF.
Вибач.
0xFF.
Гаразд.
Тепер ми налаштували три регістри з початковими значеннями.
Тепер ми готові виконати доповнення.
І це - як ви помітите - все це будуть часткові реєстри.
Тож давайте наберемо
перший
варіант: ADD AL, CH.
ДОДАТИ ЕЛ, Ч.
Гаразд.
Потім додайте DI, CX.
ДОДАТИ DI, CX. Натисни "Гаразд".
Далі ми рухаємося в цьому значенні.
Тож давайте зробимо це зараз. MOV EDI,
0xAB29FFFF. Натисни "Гаразд".
Наступний - ADD EDI, ECX. ДОДАТИ EDI, ECX. Натисни "Гаразд".
Тому просто перевірте, чи правильно ви ввели всі вхідні дані.
Після того, як ви двічі перевірили і підтвердили, що все правильно,
ми готові перемістити нашу точку зупинки сюди.
Тож поставте тут брейк-поінт.
Клацніть правою кнопкою миші, Breakpoint, Toggle.
Тут ми можемо видалити точку зупинки зверху.
Перемикач.
А тепер біжимо.
Отже, тепер ми готові налаштувати наші регістри з початковими значеннями.
Наразі це значення має EDI, тому ми просто переходимо до нього і переносимо його в EDI.
Отже, EDI тепер містить значення, яке ми щойно перенесли в нього.
Далі ми перемістимо 703 до ECX, який знаходиться
тут. Перейдіть сюди.
703 переїхав до ECX.
Далі ми перемістимо 0xFF в EAX.
Це EAX.
Тож давайте переступимо.
0xFF перемістився в EAX.
Тепер ми можемо
- ми налаштували наші початкові регістри з початковими значеннями.
Ми готові виконати додавання.
Ви повинні бути дуже обережними, оскільки ми додаємо часткові регістри, на відміну від
першого прикладу, де ми додавали повні регістри за допомогою DWORD.
Отже, перше, що потрібно зробити, це додати CH до AL.
Тож просто нагадаю - освіжимо вашу пам'ять - CH тут, старший байт, один байт
тут.
КХЛ тут.
CH - це
один байт.
Отже, ми додаємо лише байт, один байт.
Отже, ми беремо один байт з CH.
Отже, один
байт з CH тут: 07. CL - 03, 07 - CH порівняно з цим графіком тут.
CL - це CH - старший байт.
CL - молодший байт, тому старший байт дорівнює 07.
Молодший байт - 03, але зараз ми використовуємо CH, тому він дорівнює 07.
Отже, ми беремо 07, який тут 07, один байт, і додаємо його до AL.
AL - молодший байт EAX. Отже, це один байт.
Отже, ми беремо 07 і додаємо його до 0xFF.
Якщо ви подивитеся на свою діаграму - вашу діаграму - ви побачите, що AL - це молодший байт.
Отже, ми беремо CH, додаємо його до AL і зберігаємо результат в AL.
Оскільки в результаті додавання двох чисел ми отримаємо велике число, яке не зможемо зберегти,
воно буде обгорнуте так само, як ми вивчали в попередньому уроці.
Отже, у цьому випадку 07 плюс 0xFF - давайте спочатку спробуємо наш калькулятор.
Переконайтеся, що ви вибрали Hex.
Ми візьмемо 07-07 - це CH.
Отже, ми вводимо 7, плюс додаємо його до AL.
AL - це перший байт, тобто FF, тому ми вводимо FF.
Дорівнює - отримуємо 106. Але 106 занадто велике число, тому що наша ціль, наш пункт призначення - це лише один байт, а саме AL.
ЕЛ.
Таким чином, 1 буде усічено.
Нам слід очікувати лише 06.
Тож давайте переступимо через це.
І дійсно, ми бачимо 06.
Тут ми не побачимо 106, хоча результат дорівнює 106, тому що вказана ціль - це лише один байт.
AL - один байт.
Таким чином, він не буде перезаписаний в наступний.
Вона загорнеться в себе, в себе.
Отже, виходить 06.
Тепер, наступним кроком буде додавання CX до DI. Зараз CX - 703.
Чому?
Тому що це слово.
Погляньте на нашу діаграму.
CX-CX - це слово.
Слово - це два байти.
Отже, CX тут означає 0703-0703.
І ми збираємося додати його до ІР. ІР - це теж слово.
Поглянь.
DI фактично те саме, що й SI.
Це означає, що це лише слово, яке має 16 біт.
У цьому випадку ваш DI - FFFF, тому ми візьмемо CX, який дорівнює 0703, і додамо його до DI, який
дорівнює FFFF.
Тож подивимося, що з цього вийде.
Спочатку скористайтеся калькулятором.
Отже, CX має значення 0703.
Тож давайте очистимо наш внесок. Переконайся, що це Гекс. 0703, і ми додамо його до DI.
ДІ - це ФФФФ.
Тож введіть FFFF. Дорівнює - отримуємо 10702.
Але він занадто великий для нашого пункту призначення.
Наш пункт призначення - це лише слово, тому слово - це лише два байти.
Отже, це два байти.
Отже, 1 усікається. Він вже більший за два байти?
Так.
Таким чином, він зберігає тільки 0702 в DI.
Отже, ми очікуємо побачити в DI значення 0702 в молодших двох байтах.
Тож давай переступимо.
І, звичайно ж, ми бачимо 0702 у нижньому слові, тобто два байти, точно так само, як ми бачили
в калькуляторі.
Наступним кроком буде перенесення цього значення в EDI.
EDI-EDI розбереться з цим.
Тож давайте переступимо через це і подивимося.
Тож тепер він перемістив це значення в EDI.
Як ви можете бачити, наступним кроком буде додавання ECX до EDI.
Отже, ECX - це 00000703,
а весь DWORD - це 00000703.
І це додасться до EDI, який буде AB29FFFF.
Знову ж таки, це ціле СЛОВО.
Тож давайте спочатку спробуємо наш калькулятор і подивимося, що вийде.
Очистити вхід.
Таким чином, ECX має значення 00000703.
Отже, ми просто
вводимо 703 тут.
Ми збираємося додати це в EDI.
EDI - AB29FFFF.
Отже, набираємо AB29FFFF. Прирівнюємо, і отримуємо AB2A0702.
Гаразд.
Тож давайте подивимось - давайте переступимо через це і подивимось, що відбувається з EDI.
Тож давай переступимо.
І EDI тепер зберігає значення AB2A0702, яке збігається з цим калькулятором.
Ось і все.
Отже, ми вже навчилися виконувати додавання, використовуючи повний регістр, яким є DWORD, а також часткові
регістри, якими можуть бути як слова, так і байти.
Якщо ви хочете зберегти його, просто виберіть "Файл", а потім "Файл виправлення". Натисніть "Виправлення" і назвіть його іншою
назвою.
03_ADD-2, якщо ви хочете зберегти його. Так, ви можете зберегти його як dash-2.
Ви не можете перезаписати його, оскільки він виконується в пам'яті, тому ми повинні зберегти його під іншим
ім'ям.
Тож натисніть "Зберегти", і ви збережете його зараз.
На цьому відеоурок закінчено.
Ми вже навчилися виконувати додавання.
До зустрічі в наступному випуску.
Дякуємо за перегляд.