WEBVTT

00:01.490 --> 00:02.940
Привіт і ласкаво просимо назад.

00:02.960 --> 00:07.820
Сьогодні ми розглянемо інструкцію DIV, або інструкцію поділу.

00:08.240 --> 00:13.310
Отже, це ключове слово, і воно означає "Розділити".

00:16.160 --> 00:23.450
Основна ідея полягає в тому, що результат поділу зберігається в різних місцях.

00:23.990 --> 00:28.790
Отже, коли ви ділите щось на дільник, ви отримуєте результат.

00:28.790 --> 00:32.750
Одне з них буде вашим часткою, а друге - залишком.

00:32.780 --> 00:33.950
Візьмемо, наприклад.

00:34.040 --> 00:41.090
Отже, - це слово, що означає - байти, і ви збираєтеся розділити його за допомогою регістра - значення

00:41.120 --> 00:42.680
в регістрі.

00:43.370 --> 00:45.550
Синтаксис наступний.

00:45.560 --> 00:50.600
У вас є ключове слово DIV, за яким слідує назва реєстру.

00:50.900 --> 00:59.780
Отже, в даному випадку, припустимо, що ми збираємося зробити DIV -, отже, це будуть - операції,

00:59.780 --> 01:05.480
які будуть відбуватися. Кожного разу, коли ви робите занурення, відбуваються операції.

01:06.260 --> 01:13.430
Перша операція полягає у тому, що ви берете -, ділите з регістром - незалежно від того, яке значення

01:14.060 --> 01:20.280
знаходиться у регістрі -, а потім результат ділення зберігається у -.

01:21.060 --> 01:35.400
Отже, - буде молодшим байтом регістра -. І тоді залишок від цього ділення буде збережено

01:35.400 --> 01:40.620
у старшому байті регістра -.

01:41.520 --> 01:47.340
Отже, щоб отримати частку, ми виконуємо цілочисельне ділення.

01:47.490 --> 01:52.980
Отже, коли ви ділите таким чином, ви отримуєте ціле число, а не дріб.

01:53.850 --> 01:58.710
Отже, ви берете ціле число і зберігаєте його у своєму -байте тут.

01:58.950 --> 02:04.350
Для того, щоб отримати залишок, ви виконуєте операцію залишку.

02:04.350 --> 02:07.020
Тому цей символ відомий як залишок.

02:07.650 --> 02:11.820
Іноді її ще називають операцією за модулем або по модулю.

02:11.940 --> 02:14.430
Це означає, що ви отримуєте залишок від поділу.

02:15.330 --> 02:19.250
Отже, зверніть увагу, що результатом є байт.

02:19.550 --> 02:26.150
Параметр - слово - байти - але результатом є байт.

02:26.720 --> 02:27.680
Я теж.

02:28.100 --> 02:36.830
Параметр - це слово або - байт, і ви отримуєте один байт як залишок.

02:37.220 --> 02:40.280
Отже, цей перший приклад відомий

02:40.280 --> 02:46.850
як поділ байтового регістру. Регістр тут містить байт.

02:47.360 --> 02:49.970
Ось чому ми називаємо це поділом байтового регістру.

02:50.510 --> 02:55.130
Погляньмо на наступний поділ - поділ за регістром слів.

02:55.340 --> 03:04.220
Отже, при такому поділі параметр зберігається частково в - регістрі, а частково в - регістрі.

03:04.460 --> 03:10.790
Таким чином, ці аргументи будуть об'єднані, щоб сформувати остаточний аргумент, який буде розділений.

03:11.330 --> 03:13.220
Отже, це - байти.

03:13.220 --> 03:16.840
Це - байти - також відомі як слово і слово.

03:16.850 --> 03:20.340
Отже, коли ви поєднуєте слова разом, ви отримуєте СЛОВО.

03:20.640 --> 03:25.350
Отже, це СЛОВО розділяється словом.

03:25.830 --> 03:37.060
Отже, ви будете ділити, щоб отримати цілий результат. Ділення тут дасть вам цілочисельний результат.

03:37.080 --> 03:45.530
Таким чином, при діленні слова тут ви отримаєте частку від ділення, і цей результат

03:45.570 --> 03:53.100
буде збережено в регістрі -. А решта буде зберігатися у вашому - реєстрі.

03:53.190 --> 03:55.800
Отже, ваш результат - локації.

03:57.390 --> 04:00.360
Тепер давайте подивимося на інший поділ:

04:00.900 --> 04:02.850
поділ регістрів DWORD.

04:03.030 --> 04:11.500
Отже, у цьому випадку ваш параметр зберігається у - регістрах: - та -.

04:11.520 --> 04:14.110
Отже, тут це слово DWORD.

04:14.130 --> 04:15.310
Це ще одне СЛОВО.

04:15.330 --> 04:16.710
Отже, ви отримуєте QWORD.

04:16.950 --> 04:23.850
Отже, QWORD має довжину - байт і розділене регістром DWORD.

04:24.300 --> 04:30.450
Отже, в цьому випадку, знову ж таки, - об'єднуються, щоб отримати остаточний аргумент, який є дуже великим

04:30.450 --> 04:31.020
числом.

04:31.650 --> 04:37.050
А потім цілочисельне ділення дає частку, яка зберігається в -.

04:37.080 --> 04:41.220
Результат зберігається в -, а залишок - залишок

04:41.550 --> 04:44.100
буде збережено в -.

04:44.370 --> 04:50.130
Тож, як бачите, тут діє той самий принцип, що й раніше.

04:50.490 --> 04:56.250
Результат ділення - половина початкового розміру параметра.

04:56.580 --> 05:03.580
Отже, тут параметром є QWORD, а результатом - DWORD.

05:04.920 --> 05:05.020
Гаразд.

05:05.140 --> 05:07.510
Тут це QWORD, а тут ви отримуєте DWORD.

05:09.100 --> 05:10.810
Більше прикладів DIV.

05:10.990 --> 05:13.600
Ось кілька прикладів поділу.

05:13.900 --> 05:18.130
Ви також можете виконати DIV на байт.

05:18.160 --> 05:23.740
Наприклад, тут - це старший байт для регістра -.

05:24.130 --> 05:35.470
Отже, у цьому випадку - це ваш дільник, і ви ділите своє слово за допомогою -, який є байтом.

05:36.670 --> 05:44.140
Таким чином, частка буде зберігатися в -, а залишок буде зберігатися в -.

05:44.950 --> 05:46.810
Інший приклад: DIV -.

05:47.470 --> 05:50.590
Тож у цьому випадку ваше - це дільник.

05:50.830 --> 05:52.540
Це СЛОВО.

05:52.840 --> 06:02.320
І ви ділите QWORD на DWORD, і результат ділення буде збережено в регістрі -, а залишок

06:02.470 --> 06:06.820
буде збережено в регістрі -.

06:07.780 --> 06:16.660
Інший приклад: DIV -. - є молодшим словом регістру -.

06:17.440 --> 06:27.550
Отже, у цьому випадку ви ділите DWORD на слово, і отриманий результат буде збережено

06:27.550 --> 06:34.420
у регістрі -, а залишок буде збережено у регістрі -.

06:35.680 --> 06:36.730
Інший приклад:

06:36.760 --> 06:38.060
DIV hex-.

06:38.350 --> 06:40.390
Отже, це недійсна інструкція.

06:41.080 --> 06:45.950
Параметр вимагає, щоб це був регістр.

06:45.970 --> 06:47.890
Ви не можете вставити сюди константу.

06:48.920 --> 06:49.890
Винятки.

06:50.210 --> 06:55.740
Операція може спричинити помилки, також відомі як винятки.

06:55.760 --> 06:58.280
Наприклад, ділення на нуль.

06:59.780 --> 07:10.490
У цьому прикладі ви переміщуєте гекс - на -, і переміщуєте гекс - на -, потім переміщуєте гекс - на -, потім

07:10.490 --> 07:10.850
робите

07:10.880 --> 07:11.980
DIV -.

07:11.990 --> 07:16.380
Отже, в даному випадку параметр -.

07:17.450 --> 07:18.980
Просто щоб освіжити пам'ять:-:-. І ви ділите

07:20.480 --> 07:25.590
-: - на -.

07:25.600 --> 07:28.660
Отже, - це насправді - - всі нулі - і закінчується на -.

07:28.670 --> 07:34.880
Але коли ви ділите зі знаком -, ви ділите щось

07:35.420 --> 07:42.350
на нуль, і це призведе до помилки ділення на нуль.

07:42.350 --> 07:43.850
Другий приклад.

07:45.350 --> 07:46.550
Це виключення називається

07:47.400 --> 07:54.060
виключенням переповнення частки, і воно трапляється, якщо результат частки занадто великий, занадто великий.

07:54.090 --> 07:55.020
Наприклад, ви переміщуєте цей гекс - на -, а потім переміщуєте гекс "всі -" на -.

07:55.320 --> 08:04.390
Так що параметр зараз - він буде дуже великим.

08:05.280 --> 08:08.150
Це дуже величезна кількість.

08:08.160 --> 08:09.630
Коли ви поєднуєте

08:10.830 --> 08:19.510
це з цим, ви отримуєте параметр QWORD - дуже великий - і тепер ви переходите до -, а потім робите DIV -.

08:19.530 --> 08:21.590
Це означає, що ви берете це величезне

08:21.600 --> 08:27.600
число - це об'єднане з цим - це величезне число ділите на дуже маленький дільник.

08:27.600 --> 08:29.190
Тому результат буде занадто великим, щоб зберігати його у вашому - або -.

08:29.610 --> 08:35.460
Запам'ятайте, що у вас в результаті ділення вийшло - частини.

08:35.850 --> 08:41.160
Коефіцієнт потрібно зберігати у вашому -.

08:41.190 --> 08:44.310
Тепер ваше - занадто мале, щоб зберігати результат ділення,

08:44.400 --> 08:47.160
тому що ділення дасть дуже велике число.

08:47.160 --> 08:54.230
Отже, оскільки - не може зберігати велике число для частки, це викличе виключення переповнення частки.

08:54.410 --> 09:00.710
Гаразд, давайте відкриємо наш x32dbg і спробуємо ввести цей код, щоб побачити виняток.

09:01.220 --> 09:09.890
Отже, відкрийте x32dbg, а разом з ним і ваш шаблон - як і раніше, і ми введемо

09:10.790 --> 09:20.390
ці інструкції і побачимо помилку, яка трапляється при спробі розбиття.

09:20.390 --> 09:26.180
Тож давайте прокрутимо вниз до введення, натиснемо клавішу пробіл і почнемо вводити всі ці інструкції.

09:27.140 --> 09:35.270
Отже, перше - інструкції для ініціалізації різних регістрів.

09:35.870 --> 09:41.900
Отже, перший - це MOV -, hex -. Натисни Enter.

09:42.440 --> 09:49.710
Другий - MOV -, hex -. Натисни Enter. Третій - MOV -, hex -.

09:49.830 --> 10:02.310
Натисни Enter.

10:03.960 --> 10:04.860
І четвертий - DIV -. І натисни Enter.

10:05.190 --> 10:12.540
Отже, це ваш підрозділ.

10:14.100 --> 10:15.900
Тепер ми спробуємо закрити

10:16.260 --> 10:25.620
його і спробувати запустити, але перед цим перевірте, чи правильно ви ввели параметри - інструкції.

10:25.620 --> 10:27.750
Переконавшись, що інструкції введено

10:28.080 --> 10:34.350
правильно, поставте тут точку зупинки, клацнувши правою кнопкою миші, вибравши "Точка зупинки" і "Перемикач".

10:34.710 --> 10:36.970
Я зробив це, а потім побіг до нього.

10:36.990 --> 10:39.480
Тепер давай переступимо.

10:40.740 --> 10:42.160
Він зупинився в точці розриву.

10:42.180 --> 10:43.920
Відійди.

10:44.220 --> 10:45.270
Відійди.

10:45.270 --> 10:46.290
Тепер вона буде рухатися від - до -.

10:46.740 --> 10:49.350
Підійдіть і перевірте

10:50.010 --> 10:51.900
- тепер має -.

10:51.900 --> 10:54.480
Тепер вона буде рухатися від - до -.

10:54.900 --> 10:57.350
Переступаємо, і - тепер має значення -.

10:57.360 --> 11:00.990
Отже, на цьому етапі наш параметр - об'єднаний з -. Це дає вам велике число: нулі, нулі та -.

11:01.200 --> 11:10.410
Щоб освіжити вашу пам'ять, ми робимо

11:11.670 --> 11:20.850
такий поділ: - об'єднується з -, щоб дати вам повний параметр.

11:20.850 --> 11:21.630
Тепер ми будемо ділити, і

11:22.710 --> 11:24.350
частка повинна бути в -, а залишок повинен бути в -.

11:24.630 --> 11:29.520
Тож давайте переступимо через це.

11:30.150 --> 11:32.190
- тепер зберігає -.

11:33.990 --> 11:35.460
Отже, це дільник.

11:35.460 --> 11:37.050
Отже, це велике число - ми розділимо на -, тобто на -.

11:37.170 --> 11:42.750
Тож давайте переступимо через це і подивимося, що з цього вийде.

11:42.870 --> 11:45.150
Поглянь.

11:46.880 --> 11:47.360
Виняток першого попадання, і це виняток: ціле число ділиться на нуль.

11:47.570 --> 11:53.690
Бачиш?

11:53.720 --> 11:54.170
Ось так

11:54.290 --> 11:58.320
ви побачите виняток на нижній панелі завдань тут.

11:58.340 --> 11:59.480
Ось так виглядає виняток.

12:00.590 --> 12:03.260
Тепер давайте спробуємо іншу.

12:03.800 --> 12:05.570
Інший виняток - переповнення коефіцієнта.

12:05.750 --> 12:09.680
Отже, зараз ми перезапустимо програму,

12:10.550 --> 12:18.560
і цього разу повернемося сюди і введемо ваші другі інструкції тут.

12:18.560 --> 12:19.070
Тож натисни пробіл.

12:20.390 --> 12:22.340
Виберіть його, натисніть пробіл і введіть першу цифру.

12:23.420 --> 12:27.890
MOV -, hex-.

12:30.150 --> 12:33.990
Натисни Enter.

12:33.990 --> 12:34.590
MOV -,

12:34.930 --> 12:35.580
hex-.

12:38.860 --> 12:40.270
Натисни Enter.

12:43.660 --> 12:44.710
MOV -, hex

12:45.490 --> 12:46.150
-.

12:46.180 --> 12:49.120
Натисни Enter.

12:49.420 --> 12:50.440
ЗАНУРЕННЯ.

12:51.400 --> 12:51.820
Натисни Enter.

12:53.290 --> 12:54.280
Тепер давайте перевіримо, чи правильно ви все ввели.

12:55.120 --> 12:59.380
Гаразд.

12:59.560 --> 13:00.010
Тепер ми ставимо точку зупинки, як зазвичай, тут.

13:00.040 --> 13:02.350
Я вже це зробив.

13:03.460 --> 13:04.570
Тепер натискаємо на кнопку "Виконати". Він потрапляє в наш брейк-пойнт, і давайте переступимо через нього.

13:04.600 --> 13:08.920
Тепер перша інструкція - рухатися від - до -. Переступай,

13:11.140 --> 13:18.490
і тепер - маєш.

13:18.490 --> 13:20.200
Наступна інструкція полягає в тому, щоб перемістити це велике число сюди.

13:20.680 --> 13:27.040
Перейдіть через це, а тепер підтвердіть - перевірте, чи з'явилися

13:27.730 --> 13:28.750
ці великі цифри...

13:28.750 --> 13:30.940
Далі потрібно переміститися

13:31.150 --> 13:34.000
ось сюди.

13:35.500 --> 13:38.620
Тож переступайте, а тепер - маєте.

13:38.620 --> 13:41.350
Наступна інструкція розділить - з -.

13:41.710 --> 13:48.550
Отже, це буде велике число - QWORD- - тут у поєднанні з -.

13:49.780 --> 13:59.680
Вийде дуже довге число, яке потрібно розділити на -, тобто на -.

13:59.710 --> 14:05.920
Таким чином, отриманий добуток буде збережено в -.

14:06.400 --> 14:09.820
Давайте підійдемо і подивимося, що з цього вийде, і ви отримаєте виняток з першого разу.

14:10.090 --> 14:16.100
Виключення: Переповнення цілого числа.

14:16.100 --> 14:18.020
Отже, цілочисельне переповнення означає, що частка, яка є цілим числом, не може поміститися в -.

14:18.020 --> 14:26.420
Він занадто великий для -.

14:26.450 --> 14:28.160
Тому він переповнюється.

14:28.160 --> 14:29.590
У цьому і полягає сенс

14:29.600 --> 14:33.410
виключення: переповнення множника тут.

14:33.770 --> 14:35.740
Коефіцієнт занадто великий.

14:35.750 --> 14:37.190
У цьому уроці ви дізналися

14:37.850 --> 14:45.320
про інструкцію DIV та параметри різних частин ділення, а також про деякі винятки, які можуть трапитися під час виконання ділення.

14:45.830 --> 14:54.410
Це все для цього відео.

14:54.950 --> 14:56.420
На наступному уроці ми виконаємо вправу -, а після неї - вправу -.

14:56.420 --> 15:01.820
Тож побачимося на наступному уроці.

15:01.850 --> 15:03.560
Дякуємо за перегляд.
