- •Программирование на ассемблере masm32 в среде radAsm с использованием 32-разрядного отладчика OlleDbg
- •Лабораторная работа № 1. Изучение среды и отладчика ассемблера
- •1. Начало работы со средой
- •2. Запуск заготовки приложения
- •3. Создание простейшей программы
- •4. Просмотр выполнения программы в отладчике
- •5. Описание данных в программе на ассемблере
- •Задание
- •1. Форматы машинных команд ia-32
- •Лабораторная работа № 2 Программирование целочисленных вычислений
- •100010Dw Mod Reg Reg См.Мл.Байт
- •100010Dw Mod Reg Mem ss Ind Base См.Мл.Байт
- •2. Команды целочисленной арифметики ia-32
- •4. Команда обмена данных
- •3. Пример линейной программы
- •4. Организация ввода-вывода
- •Задание
- •Приложение Наиболее важные настройки среды radAsm
- •Настройка путей
- •Формирование командных строк для вызова ассемблера, компоновщика или отладчика
- •Литература
2. Запуск заготовки приложения
Для запуска заготовки необходимо выполнить:
трансляцию Создать/Assemble,
компоновку Создать/Link,
запуск на выполнение Создать/Run.
В процессе трансляции (ассемблирования) исходная программа на ассемблере преобразуется в двоичный эквивалент. Если трансляция проходит нормально, то в окне Output, которое появляется под окном программы, выводится текст:
C:\Masm32\Bin\ML.EXE /c /coff /Cp /nologo
/I"C:\Masm32\Include" "Lab01.asm"
Assembling: Lab01.asm
Make finished.
Total compile time 78 ms
Примечание – Окно Output появляется и закрывается. Чтобы повторно посмотреть результаты, необходимо установить курсор мыши на верхнюю часть строки состояния под окном текста программы (нижнюю рамку окна Output).
Первая строка сообщения об ассемблировании – вызов ассемблера:
C:\Masm32\Bin\ML.EXE – полное имя файла транслятора ассемблера masm32 (путь + имя), за которым следуют опции:
/c – заказывает ассемблирование без автоматической компоновки,
/coff – определяет формат объектного модуля Microsoft (coff),
/Cp – означает сохранение регистра строчных и прописных букв всех идентификаторов программы,
/nologo – осуществляет подавление вывода сообщений на экран в случае успешного завершения ассемблирования,
/I"C:\Masm32\Include" – определяет местонахождение вставляемых (.inc) файлов,
и параметр "Lab01.asm" – задает имя обрабатываемого файла.
Остальные строки – сообщение о начале и завершении процесса ассемблирования и времени выполнения этого процесса.
Результатом нормального завершения ассемблирования является создание файла, содержащего объектный модуль программы, – файла Lab01.obj.
Если при ассемблировании обнаружены ошибки, то объектный модуль не создается и после сообщения о начале ассемблирования идут сообщения об ошибках, например:
Lab01.asm(26) : error A2006: undefined symbol : EAY
В сообщении указывается:
номер строки исходного текста (в скобках),
номер ошибки, под которым она описана в документации,
возможная причина.
После исправления ошибок процесс ассемблирования повторяют.
Следующий этап – компоновка программы. На этом этапе к объектному (двоичному) коду программы добавляются объектные коды используемых подпрограмм. При этом в тех местах программы, где происходит вызов процедур, указывается их относительный адрес в модуле. Сведения о компоновке также выводятся в окно Output:
C:\Masm32\Bin\LINK.EXE /SUBSYSTEM:CONSOLE /RELEASE
/VERSION:4.0 /LIBPATH:"C:\Masm32\Lib" /OUT:"Lab01.exe" "Lab01.obj"
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
Make finished.
Total compile time 109 ms
Первая строка вывода также является командной строкой вызова компоновщика
C:\Masm32\Bin\LINK.EXE – полное имя компоновщика, за которым следуют опции:
/SUBSYSTEM:CONSOLE – подключить стандартное окно консоли,
/RELEASE – создать реализацию (а не отладочный вариант),
/VERSION:4.0 – минимальная версия компоновщика,
/LIBPATH:"C:\Masm32\Lib" – путь к файлам библиотек,
/OUT:"Lab01.exe" – имя результата компоновки – загрузочного файла
и параметр "Lab01.obj" – имя объектного файла.
В следующих строках также возможны сообщения об ошибках. В основном в лабораторных работах вы будете получать сообщение о неразрешенных внешних ссылках, например:
Lab01.obj:error LNK2001:unresolved external symbol _ExitProcess@4
Lab01.exe : fatal error LNK1120: 1 unresolved externals
Make error(s) occured.
Как правило, такое сообщение говорит о наличии в программе вызовов процедур, для которых в указанных библиотеках не найдены коды. В данном примере не подключена библиотека, в которой находится процедура ExitProcess.
После устранения ошибки программу необходимо перетранслировать и заново скомпоновать.
Если процессы трансляции и компоновки прошли нормально, то ее можно запустить на выполнение. При этом открывается окно консоли, в которое выводится строка запроса (см. рисунок 3).
Рисунок 3 – Окно консоли
Окно закрывается при нажатии клавиши Enter.
