З поверненням.
У цьому уроці ми реалізуємо наш дизайн, тому відкриваємо шаблон.
А ось тут нам потрібно знайти пам'ять для зберігання цього рядка: "Enter
first num. Отже, ми переходимо
до карти пам'яті, натискаємо, двічі натискаємо на дані, і ми можемо зберігати наш рядок тут.
Просто виберіть його, клацніть правою кнопкою миші, виберіть двійкове редагування і введіть "Введіть перше число. Поставте двокрапку і пробіл.
Потім ми копіюємо цю адресу, натискаємо правою кнопкою миші, копіюємо адресу і вставляємо її сюди.
Далі ми повинні викликати функцію printf.
Тож давайте отримаємо адреси потрібних нам функцій і запишемо їх
сюди: функція printf, а також нам потрібна функція scanf.
Щоб отримати адресу функції, ми прокручуємо вниз і переходимо до таблиць переходів, двічі клацнувши на будь-якій доступній
функції.
Потім переходимо до столу для стрибків.
Шукаємо scanf, клацаємо правою кнопкою миші адресу, копіюємо її та вставляємо сюди.
Потім ми також шукаємо функцію printf.
Переходимо за адресою, клацаємо правою кнопкою миші, копіюємо і вставляємо сюди.
Тепер ми готові викликати printf. Тож давайте повернемося до покажчика інструкцій і повернемося
туди, де ми зараз знаходимося.
Отже, далі нам потрібно отримати адресу для другого рядка, яким є цей.
Отже, нам потрібно спочатку створити рядок, щоб ми могли використати, наприклад, ось цей, а потім вибрати всі ці.
Клацаємо правою кнопкою миші, бінарне редагування, і вводимо тут
рядок: "Введіть другий номер", двокрапку і пробіл. Натискаємо ОК, а потім копіюємо цю адресу.
І вставити його сюди.
А, ось.
Вибач.
Цей я маю вставити сюди - так буде легше читати.
Отже, це адреса першого рядка,
а це адреса другого рядка.
А потім нам також потрібно створити специфікатори формату.
Отже, ми створюємо специфікатори формату для цього %d. Ми можемо вибрати його тут, а потім клацнути
правою кнопкою миші, бінарне редагування і ввести %d. Натискаємо ОК, копіюємо цю адресу, клацаємо правою кнопкою миші, копіюємо
адресу, і можемо вставити її сюди: %d.
Отже, це специфікатор формату для %d.
Те ж саме тут.
Ми також можемо вставити його сюди, оскільки використовуємо той самий специфікатор формату.
Далі нам потрібно створити змінну "first num. Отже, змінна "first num" - ми переходимо до пам'яті,
вибираємо "dump to first", так що коли ми переходимо до пам'яті, ми будемо
показувати пам'ять в дампі два.
Тож перейдіть до карти пам'яті, знайдіть BSS, тому що це змінна.
Отже, двічі клацніть на BSS, і ми тут, і можемо використовувати цю адресу.
Клацніть правою кнопкою миші на цій адресі, скопіюйте адресу і вставте її сюди.
Отже, це адреса першої змінної, яка повинна зберігати число.
Тепер нам потрібна змінна і для другого числа.
Тож ми можемо використати цей.
Клацніть правою кнопкою миші, скопіюйте адресу, перейдіть сюди і вставте її сюди.
Отже, у нас є змінна для другого числа.
Тепер ми підійшли до цієї лінії.
Цей рядок - нам потрібно зберегти цей специфікатор формату. Це рядок, тому ми повертаємося до
скидання одного.
Ми обираємо цей.
Потім натискаємо правою кнопкою миші, бінарне редагування і вводимо наш специфікатор формату ось так.
Отже, давайте зробимо
все правильно,
ви бачите: %d плюс
%d дорівнює %d.
Тепер нам потрібно вставити символ переходу на новий рядок, який у шістнадцятковому форматі дорівнює 0x0A.
Отже, ми переходимо до останнього байта і вводимо 0x0A для символу переходу на новий рядок.
Тепер натискаємо ОК і просто перевіряємо, щоб переконатися, що там є 0x0A.
Далі ми копіюємо цю адресу, клацаємо правою кнопкою миші, копіюємо цю адресу, а потім можемо вставити адресу під
цим рядком.
А потім для першої цифри, ця перша цифра є власне цією адресою.
Тож ми просто копіюємо його звідси і вставляємо сюди.
Таким чином, на нього легко посилатися.
А другий номер - адреса ось ця.
Тож ми копіюємо цю адресу і вставляємо її сюди.
І ми бачимо, ми помічаємо,
що нам також потрібна змінна для зберігання суми.
Отже, нам потрібно повернутися до розділу BSS, знайти змінну, можливо, цю.
Клацніть правою кнопкою миші, скопіюйте цю адресу та вставте її сюди.
І це буде наша адреса для зберігання третьої змінної: sum.
Тож тепер у нас є всі необхідні адреси.
Це, це, це і це - сегменти даних.
Це два сегменти BSS.
І як я вже казав, їхнє призначення - зберігати ініціалізовані дані.
У цьому випадку це ініціалізовані дані - рядки, ініціалізовані дані, специфікатори формату
є ініціалізованими даними, а сегмент BSS призначений для зберігання неініціалізованих даних, тобто змінних.
Як ви можете бачити, BSS - це неініціалізовані дані, а сегмент даних - для ініціалізованих даних.
Так що, думаю, у нас є все, що потрібно.
Ми можемо почати кодування вже зараз.
Тому для початку кодування ми будемо використовувати цю порожню адресу пам'яті, поки вона не закінчиться.
Потім ми перейдемо до кодової печери, щоб продовжити.
Тож давайте почнемо кодувати.
Зараз це досить просто.
Отже, перше - це поштовх.
Натисни ось це: "Введіть
перше число", перше число.
Тож, щоб підштовхнути це.
Ми натискаємо цю адресу.
Просто перейдіть сюди, введіть push і натисніть на цю адресу.
Гаразд.
Наступним буде to- Після натискання
ви викликаєте функцію printf.
Отже, виклик - адреса функції printf буде такою.
Натисни
"ОК".
Як тільки ви це зробите, вам потрібно почати працювати над своїм сканфайлом.
Тож для сканфу потрібно штовхатися.
Я забув це.
Вибач.
Так.
Отже, вам потрібно натиснути %d, а потім викликати scanf.
Отже, ти натискаєш першу цифру.
Натисніть
першу цифру, ось цю.
Це адреса першої змінної num.
А потім ви натискаєте ось це, специфікатор формату для scanf.
Тож ви копіюєте це і натискаєте ось
це.
Далі потрібно викликати сам scanf.
Отже, scanf-адреса - ось ця.
Отже, у вас є дзвінок тут, і це адреса для scanf.
Тепер вам потрібно повторити те ж саме,
але для другого числа, а саме цього.
Тож ми збираємось проштовхнути це сюди.
Зрозумів.
І ми штовхаємо цю нитку до стопки.
Потім ми викликаємо функцію printf, яка і є цією адресою.
Тепер ти це зробив.
Треба просканувати.
Отже, ми виштовхуємо це в стек, який є другою змінною.
А потім ми виштовхуємо специфікатор формату в стек, який є цією першою змінною.
Тож ми штовхаємо це.
А потім ми кличемо сканф.
Отже, сканф - це ось цей.
Тож це буде виклик.
І ми це зрозуміли.
Потім прокрутіть і перевірте, скільки байт у вас залишилося.
Не вистачає байт для решти програми, тому нам
потрібно перейти до печери коду.
Отже, печера коду - ось ця.
Отже, ми копіюємо цю адресу кодової печери, а потім повертаємося нагору і переходимо до нашої кодової печери.
Ходімо в печеру коду і продовжимо.
Тож двічі клацніть на цьому.
Введіть код печери.
Отже, в печері коду ми збираємося реалізувати доповнення.
Отже, щоб додати, нам потрібно все це зробити.
Отже, спочатку ми переходимо до значення нуль, щоб ініціалізувати його, а потім додаємо перше число до -.
Отже, на перше число потрібно розіменовувати посилання.
Пам'ятайте, що це фактично адреса, тому нам потрібно розіменовувати її таким чином як DWORD.
Нам потрібно зробити таке роз'яснення.
Друге число також має бути розіменоване, оскільки ми хочемо, щоб значення зберігалося за цією адресою.
Я просто...
Гаразд, тепер ми повертаємося до нашої програми.
Ми можемо продовжити з кодом для доповнення.
Ми переїхали -, тож тепер хочемо додати.
Ми хочемо додати до -.
Перший
- цей.
Тому нам потрібно розіменовувати його, щоб отримати значення, яке там зберігається.
Повторюємо те ж саме для другого числа.
Отже, друге - це ось що.
І ми це зробили.
Отже, тепер нам потрібно...
Тепер, коли ви отримали результат у -, нам потрібно зберегти - за цією адресою.
Тож нам треба рухатися.
Гаразд.
Що таке сума.
Отже, для змінної sum
адреса знаходиться тут.
І ми зберігаємо значення в - за цією адресою пам'яті.
Отже, адреса пам'яті
тут: 405050.
Тут ми зберігаємо - сюди.
Тож тепер це зроблено.
Наступне, що потрібно зробити - це роздрукувати.
Роздрукуй.
Щоб роздрукувати, нам потрібно виштовхнути все це в стек.
Просто дотримуйтесь цієї формули тут.
Отже, нам потрібно виштовхнути всі параметри для printf у стек.
Отже, ми збираємо пуш, а потім тут буде розіменування.
Отже, DWORD PTR, і нам потрібно розіменовувати суму.
Ось адреса.
Далі ми натискаємо те саме, але вже вдруге.
Другий номер - ось цей.
Далі нам потрібно натиснути першу цифру.
Отже, перше число - ось це.
Давайте скопіюємо це.
Потім нам потрібно натиснути на цю нитку.
Отже, цей рядок буде просто натискати безпосередньо на рядок.
Отже, ми копіюємо цю адресу звідси і натискаємо на рядок.
Отже, пам'ятайте, що
для рядків нам не потрібно розіменовувати посилання, оскільки адреса рядка є початком самого рядка.
Отже, тепер у нас є всі чотири параметри для printf.
Нарешті ми можемо викликати функцію printf.
Отже, ми копіюємо цю адресу для функції printf і викликаємо її.
Ця адреса.
І ми закінчили.
Тож тепер, щоб переконатися, що все правильно, давайте повернемося до - і повільно пройдемося.
Гаразд.
Поглянь сюди.
Ми виштовхуємо цей рядок до стеку, а потім викликаємо printf, щоб показати підказку.
Потім ми виштовхуємо 405010, яка є цією адресою, до стеку.
Ми виштовхуємо специфікатор формату до стеку.
Потім ми викликаємо scanf, щоб прочитати вхідні дані і зберегти їх у 405010.
Це твій перший номер.
Потім повторюємо те ж саме для другого числа.
Виштовхуємо до стеку рядок запиту "Enter second num".
Ми викликаємо printf, щоб показати його.
Потім ми виштовхуємо в стек адресу другого числа, яким тут є 405030.
Після цього ми виштовхуємо специфікатор формату в стек і викликаємо scanf, щоб прочитати другий
номер і зберегти його за адресою 405030.
Нарешті, ми дзвонимо в сканф. Потім ми стрибаємо в печеру коду, тому що у нас закінчилася пам'ять.
Тож ми робимо розрахунки. Перед тим, як почати обчислення, нам потрібно використати - зареєструвати та ініціалізувати його нулем.
Отже, ми переміщуємо нуль до -, а потім додаємо до - будь-яке значення, що зберігається за цією адресою.
Отже, все, що зберігається за цією адресою, має перший номер: 405010.
Перша цифра.
Потім ми додаємо 405030, що є другим числом, доданим до -.
Таким чином, кожен раз, коли ми будемо додавати, - буде зберігатися сума.
І, нарешті, ми отримали загальну суму.
Тож ми переїжджаємо - і зберігаємо його за цією адресою: 405050, що тут.
І тепер ми можемо виштовхнути все у стек
для функції printf.
Отже, ми виштовхуємо значення, що зберігається за адресою 405050, яке є сумою.
Потім ми натискаємо 405030, що є другою змінною, другим числом, і натискаємо 405010, що є першим числом.
Потім ми натискаємо специфікатор формату і, нарешті, printf.
Ще одна річ, яку нам потрібно зробити, - це стрибнути назад на вершину.
Тож нам треба відскочити назад.
Тож давайте повернемося до -.
Нам потрібно повернутися до адреси після точки переходу, якою є ця адреса.
Отже, ми копіюємо цю адресу.
Повертайся назад, а ми зробимо трамплін тут.
Ми переходимо назад нагору за адресою після точки переходу. Натисни "ОК".
Тепер поверніться до -.
Поставте тут точку зупинки, і ви готові до запуску.
Тож перед тим, як бігти, можливо, ви захочете його врятувати. Вирішувати вам, але,
можливо, ми побіжимо першими.
Тож давайте запустимо його зараз.
Гаразд, він працює.
Тож зараз він працює.
Підійдіть до нашої точки розриву.
Давайте переступимо через лінію за лінією.
Він виштовхує рядок "Введіть перше число" до стеку.
Тож він у стопці.
Тепер буде викликано printf, щоб показати цей перший рядок, і ми отримаємо наш перший рядок "Введіть перше число".
Потім він виштовхне два параметри до стеку для сканування.
Перший - 405010, тобто ця адреса для першого числа.
Потім ви виштовхуєте специфікатор формату до стеку.
Отже, ми маємо адресу для першого числа.
Тепер переступаємо і виштовхуємо специфікатор формату до стеку.
Отже, тепер у нас є два параметри для використання scanf, і ми будемо викликати scanf і спостерігати за статусом внизу.
Він переходить у стан запуску.
Отже, нам потрібно натиснути сюди, і там буде курсор, який чекає на ваше введення.
Ми вводимо два, і коли ми натискаємо клавішу Enter, він повертається до стану паузи.
Це означає, що він повертається до відладчика.
Отже, зараз ми знаходимося у відладчику.
Ми можемо продовжувати переступати.
Ми виштовхнемо рядок "Введіть друге число" до стеку. Переступаємо, і рядок "Введіть друге число" опиняється
у стеку.
Тепер ви викличете printf, щоб використати цей параметр і вивести його на екран.
Тож давайте переступимо, і ми отримаємо нашу підказку.
Тепер він виведе два параметри для використання scanf.
Знову ж таки, цей номер буде вашою адресою для другого номера, який знаходиться тут, за цією адресою.
Підійдіть, і ви побачите адресу на стеку.
Потім ми виштовхуємо специфікатор формату до стеку.
Тож переступаємо, і специфікатор формату опиняється у стеку.
Тепер ці два параметри готові до використання.
Отже, коли ви переступите через сканф, стан паузи зміниться на стан виконання.
Тож зараз ми перебуваємо в біжучому стані.
Натискаємо сюди, отримуємо підказку.
Скажімо, ми набрали чотири, натиснули клавішу Enter, і тепер він повертається до стану паузи, що означає, що ми знову
в відладчику.
Отже, у нас закінчилася пам'ять, тож нам потрібно перейти до печери коду.
Тож ми переступаємо, стрибаємо і приземляємося в печері коду.
Тепер ми займемося розрахунками.
Ми будемо використовувати регістр - для зберігання суми.
Отже, спочатку ми ініціалізуємо його нулем.
Тож дивіться, що тут відбувається.
Відійдіть, а тепер відійдіть.
А зараз - нуль.
Тепер він візьме значення, що зберігається в 405010, і додасть його до -.
Отже, значення, яке там зберігається, дорівнює двом.
Отже, коли ми розіменовуємо його, ми отримуємо два плюс нуль у -, і зберігаємо його назад у -.
Отже - має стати два. Переступити, і - два.
Тепер ми візьмемо значення, що зберігається за цією адресою, 405030, тобто чотири.
Отже, ми візьмемо чотири і додамо їх до того, що знаходиться в -, тобто до двох.
Таким чином, сума буде дорівнювати шість, і шість буде збережено назад у -. Тож їх має стати шість.
Тож переступайте, і ми побачимо там шість.
Тепер ми закінчили наші розрахунки.
Отримали суму першого та другого чисел, яка дорівнює -.
Тепер ми виведемо результат на друк.
Отже, для printf нам потрібно передати чотири параметри: суму, друге число, перше число і специфікатор формату.
Тож давайте зробимо це зараз.
Натисни другу цифру.
Ні, збільшуй суму.
Вибач.
Отже, ми штовхаємо суму до стеку.
Отже, шість у стопці.
Тепер він виштовхне друге число до стеку.
Друге число - чотири, тому чотири також є у стеку. Тепер він виштовхне перше число до стеку.
Отже, перше число - два.
Підійшовши, ви бачите два на стопці.
Нарешті, він виштовхне специфікатор формату до стеку, який є рядком. Підійдіть, і ви побачите, що нитка
там.
Отже, тепер перший параметр, другий параметр, третій параметр, четвертий параметр - всі чотири параметри
вже в стеку.
Ці чотири параметри: один, два, три, чотири параметри, всі в стеку.
Отже, тепер він готовий до використання за допомогою printf.
Отже, тепер ми переходимо до printf і бачимо вивід.
Два плюс чотири дорівнює шість.
Тоді.
Тепер ми повернемося до адреси після точки переходу, тобто підемо назад.
Тож поверніться сюди і так далі.
Ось як ми реалізуємо наше рішення для проекту калькулятора.
На цьому відео все.
Дякуємо за перегляд.