- •Введение Основные определения
- •Системы счисления Основные определения
- •Двоичная, восьмеричная и шестнадцатеричная системы счисления
- •Смешанные системы счисления
- •Перевод чисел из одной системы счисления в другую
- •Арифметические действия в системах счисления с основанием, отличным от 10
- •Двоично-восьмеричные и двоично-шестнадцатеричные преобразования
- •Обратный и дополнительный коды и их применение в операциях с отрицательными числами
- •Сложение и вычитание чисел со знаком в дополнительном коде
- •Архитектура персонального компьютера История развития вычислительной техники
- •Основные термины и определения
- •Функциональная структура компьютера
- •Архитектура микропроцессора
- •Регистры общего назначения и сегментные регистры
- •Управляющие регистры Регистр cr0.
- •Память компьютера
- •Структура программы на языке Ассемблера Формат кодирования в языке Ассемблера
- •Структура программы на ассемблере
- •Простейшая программа в ос Windows
- •Типы и форматы данных в ассемблере
- •Базовая система команд микропроцессора ia-32
- •Операнды языка ассемблер
- •Стандартные директивы сегментации
- •Макрокоманды
- •Процедуры (функции)
- •Организация интерфейса с процедурой
- •Возврат результата из процедуры
- •Связь ассемблера с языками высокого уровня
- •Обработка прерываний
- •Создание исполняемого файла
- •Отладка программы
- •Математический сопроцессор
- •Представление чисел с плавающей точкой в разрядной сетке вычислительной машины
- •Архитектура сопроцессора
- •Система команд сопроцессора
- •Команды передачи данных
- •Команды загрузки констант
- •Команды сравнения данных
- •Арифметические команды
- •Команды управления математическим сопроцессором
- •Пример программы с использованием команд сопроцессора
- •Сложные типы данных Структуры
- •Объединения
- •Программирование для windows
- •Основы программирования в ос Windows
- •Консольные приложения Windows
- •Работа с файлами в системе Windows
- •Вывод чисел в консоль
- •Оконные (каркасные) приложения Windows
- •Графика в оконных приложениях Windows
- •Ресурсы в Windows-приложениях
- •Приложение 1
Отладка программы
Отладка программы осуществляется с использованием специализированной программной среды, называемой отладчиком. Отладчик позволяет решить следующие задачи:
определить место логической ошибки;
определить причину логической ошибки.
С помощью отладчика также возможно:
выполнение трассировки программы в прямом направлении, то есть последовательное исполнение программы, при котором за один шаг выполняется одна машинная инструкция;
просмотр и изменение состояния аппаратных ресурсов микропроцессора во время покомандного выполнения программы.
Для организации процесса получения исполняемого модуля для отладки необходимо выполнить следующие действия.
В исходной программе должна быть обязательно определена метка для первой команды, с которой начнется выполнение программы. Такая метка может быть собственно меткой или именем процедуры. Имя этой метки обязательно нужно указать в конце программы в качестве операнда директивы END:
END имя_метки
Исходный модуль должен быть оттранслирован с опцией /zi:
c:\masm32\bin\ml /c /coff /Zi PROG.ASM
Применение опции /zi разрешает транслятору сохранить связь символических имен в программе и их смещений в памяти, что позволит отладчику производить отладку, используя оригинальные имена идентификаторов.
Компоновка модуля должна быть произведена с опцией /DEBUG:
c:\masm32\bin\link /SUBSYSTEM:WINDOWS /DEBUG PROG.OBJ
Опция /DEBUG указывает на необходимость сохранения отладочной информации в исполняемом файле.
Для отладки программы как в комбинированном проекте с использованием нескольких языков программирования, так и в проекте программы на ассемблере, можно использовать встроенную среду отладки Microsoft Visual Studio.
Для того, чтобы отладка программы была возможна необходимо включить отладочную информацию в исполнимый модуль.
Запустить программу на выполнение в отладчике можно в одном из четырех режимов:
режим безусловного выполнения;
выполнение по шагам;
выполнение до текущего положения курсора;
выполнение с установкой точек прерывания.
Режим безусловного выполнения целесообразно применять, когда требуется посмотреть на общее поведение программы. Для запуска программы в этом режиме необходимо нажать клавишу F5 или выбрать меню DebugStart Debugging. В точках, где необходимо ввести данные, отладчик, в соответствии с логикой работы применяемого средства ввода, будет осуществлять определенные действия. Аналогичные действия отладчик выполняет для вывода данных.
В случае, если нужно более детально изучить работу программы, применяются три следующих режима отладки.
Выполнение по шагам применяется для детального изучения работы программы. В этом режиме можно выполнить программу по командам. При этом можно наблюдать результат исполнения каждой команды. Для активизации этого режима нужно нажать клавишу F11 (меню DrbugStep Into) или F10 (меню DrbugStep Over). Обе эти клавиши активизируют пошаговый режим; отличие их проявляется в том случае, когда в потоке команд встречаются команды перехода в процедуру call или на прерывание int. При использовании Step Into отладчик осуществит переход на процедуру или прерывание и выполнит их по шагам. Если же используется Step Over, то вызов процедуры или прерывания отрабатывается как одна обычная команда, и управление передается следующей команде программы.
Выполнение до текущего положения курсора позволяет выполнить программу по шагам, начиная с произвольного места программы. Этот режим целесообразно использовать в том случае, если интересует только правильность функционирования некоторого участка программы. Для активизации этого режима необходимо установить курсор на нужную строку программы и во всплывающем меню выбрать Run To Cursor. Программа начнет выполнение и остановится на отмеченной команде, не выполнив ее.
Выполнение с установкой точек прерывания позволяет выполнить программу с остановкой ее в строго определенных точках прерывания (breakpoints). Перед выполнением программы необходимо установить эти точки в программе, для чего следует перейти в нужную строку и во всплывающем меню выбрать BreakpointInsert Breakpoint. В выбранной строке слева появится красный кружок. Установленные ранее точки прерывания можно убрать — для этого нужно выбрать в нужной строке во всплывающем меню BreakpointDelete Breakpoint или BreakpointDisable Breakpoint (неактивная точка останова). После установки точек прерывания программа запускается на безусловное выполнение клавишей F5. На первой точке прерывания программа остановится. Теперь можно посмотреть состояние микропроцессора и памяти, а затем продолжить выполнение программы.
Использование одной из перечисленных возможностей отладчика позволяет просматривать значения регистров и идентификаторов, а также ассемблерный код исполняемой программы.
Для просмотра ассемблерного кода исполняемой программы выбрать меню DebugWindowsDisasembly;
для просмотра содержимого регистра выбрать DebugWindowsRegisters (содержимое регистров содержится в левом нижнем окне, при изменении значения регистра его цвет становится красным);
для просмотра значения идентификатора используется меню DebugWindowsWatch, где вводится имя идентификатора;
для просмотра области памяти используется меню DebugWindowsMemory, где вводится адрес ячейки памяти.
Для того, чтобы вывести в отладчике информацию о содержимом регистра признаков EFLAGS необходимо во всплывающем меню окна Registers выбрать соответствующую опцию Flags.