Програмування на асемблері (masm32) під windows

настройка відладчика softice

nbsp Найвище вікно показує стан регістрів процесора. Його розмір змінити не можна, але можна приховати командою WR. Вивести його знову можна за допомогою тієї ж команди. Під ним знаходиться вікно дампа пам'яті. Третє вікно зверху - вікно коду, в якому показується або код у вигляді символьної інформації, або в аналізувати код, або змішаному вигляді. Висота вікна встановлюється командою WC X, де Х - кількість ліній. Приховати і знову відобразити його можна командою WC без параметрів. Зверніть увагу, що в рядку стану завжди показується підказка при наборі команд. Отримати довідку про команду можна, давши команду H X, де Х - ім'я команди. Якщо дати команду H без параметрів, то SoftICE виведе інформацію про всі команди.
nbsp Експериментуйте з різними командами, не бійтеся чогось зіпсувати. Тільки перед цим збережіть всі не збережені файли. Дуже важливо освоїтися в SoftICE, подолати страх перед ним. Я знаю людей, у яких при одному згадуванні про нього ворушиться волосся, як при згадці про нічному кошмарі. Однак SoftICE - це дуже потужний, зручний і приємний інструмент програміста. Думаю, що до кінця курсу ви полюбите його настільки, що будь-яка машина без нього буде здаватися вам неповноцінною.
nbsp Ви, напевно, подумує тепер про те, як зберегти зміни в налаштуваннях, які ми зараз зробили? Це абсолютно правильний хід думок. Виходимо з SoftICE, натиснувши знову CTRL + D або F5 і вирушаємо в директорію, куди встановлено SoftICE (я сподіваюся, ви вже використовуєте FAR?). Там знаходимо файл winice.dat. Відкриваємо його і шукаємо рядок nbsp Це рядок ініціалізації, в якій вказуються початкові настройки отладчика. Ось як виглядає цей рядок у мене: nbsp Вкажіть в ній свої настройки, які вам здадуться зручними. До речі, про команду FAULTS OFF. Вкажіть її обов'язково, так як вона забороняє отладчику спливати при виникненні GPF - General Protected Fault, коли система видає на екран вікно повідомлення типу:

документація та література

перша програма на асемблері

загальна структура ассемблерних програм

nbsp Ще не будемо сильно заглиблюватися в розбір написаної нами програми first.asm. Однак скажу, що в цілому вона відображає загальну структуру програм написаних на макроассемблере.
nbsp Програма, як ви бачите, складається з заголовка (рядка 1-6), глобальних змінних (секція ініціалізованих даних, рядки 7-9), власне коду (секція коду, рядка 10-17) і кінця програми (рядок 18).
nbsp Перший рядок говорить асемблеру, що необхідно дозволити команди 386 процесора. Цього зазвичай вистачає, але можна написати і .486, і .586. По суті ми і написав щось .386, щоб визначити плоску (flat) модель пам'яті у другому рядку. Також у другому рядку декларується угоду про виклик процедур STDCALL. Про плоскою моделі пам'яті ми будемо говорити в наступній статті, коли будемо розбирати архітектуру процесора, а про угоду STDCALL в статті "Робота зі стеком". У рядках 4-5 підключаються заголовки. Практично завжди в програмах, написаних з використання пакета MASM32 першим повинен підключатися файл windows.inc. У ньому визначені необхідні константи, структури і прототипи деяких функцій. Наприклад, константи MB_OK і NULL (рядки 12 і 15) визначено в цьому файлі.
nbsp Що стосується рядків 5 і 6, то поки буде достатньо, якщо я скажу, що в них визначається ім'я функції MessageBoxA з кількістю зраджувати аргументів, і йдеться, що її треба шукати в модулі user32.dll. Сказане лише віддалено нагадує, що відбувається насправді, але ми будемо детально розбирати питання виконання функцій з DLL пізніше. У секції ініціалізованих даних (рядки 7-9) оголошуються дві глобальні змінні типу byte. Далі починається секція коду (рядок 10). Нижче її розташована точка входу в програму (рядок 11). У рядках 12-16 викликається функція MessageBoxA, в результаті якої на екрані з'являється вікно повідомлення з відповідним написом. Інструкція ret (рядок 17) повертає керування операційній системі, коли робота нашої програми завершена.
nbsp Кінець програми визначається в рядку 18. Насправді ця інструкція виконує ще одну дуже важливу роботу: каже компонувальнику, що зміщення start є точкою входу в програму.