- •Программирование на ассемблере 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
- •Настройка путей
- •Формирование командных строк для вызова ассемблера, компоновщика или отладчика
- •Литература
5. Описание данных в программе на ассемблере
Все данные, используемые в программах на ассемблере, обязательно должны быть описаны.
Директива описания данных имеет следующий формат:
[<Имя>] <Директива>[<Константа>DUP(]<Список инициализаторов>[)]
где <Имя> – имя поля данных, которое может не присваиваться;
<Директива> – команда, объявляющая тип описываемых данных (см. таблицу 1);
<Константа> DUP – используются при описании повторяющихся данных, тогда константа определяет количество повторений;
<Список инициализаторов> – последовательность инициализирующих констант, указанных через запятую, или символ «?», если инициализирующее значение не определяется.
Таблица 1 – Директивы определения данных
Директива |
Описание типа данных |
BYTE |
8-разрядное целое без знака |
SBYTE |
8-разрядное целое со знаком |
WORD |
16-разрядное целое без знака или ближний указатель RM |
SWORD |
16-разрядное целое со знаком |
DWORD |
32-разрядное целое без знака или ближний указатель |
SDWORD |
32-разрядное целое со знаком |
Таблица 1 – Директивы определения данных (Окончание)
Директива |
Описание типа данных |
FWORD |
48-разрядное целое или дальний указатель |
QWORD |
64-разрядное целое |
TBYTE |
80-разрядное целое |
Real4 |
32-х разрядное короткое вещественное |
Real8 |
64-х разрядное длинное вещественное |
Real10 |
80-ти разрядное расширенное вещественное |
Примечание – В качестве директив также могут использоваться:
DB – определить байт,
DW – определить слово,
DD – определить двойное слово (4 байта),
DQ – определить четыре слова (8 байт),
DT – определить 10 байт,
однако при их использовании знаковые и беззнаковые, целые и вещественные типы не различаются, поэтому директивы считаются устаревшими.
В качестве инициализаторов при описании данных применяются:
целые константы [<знак>]<целое> [<основание системы счисления>],
например:
-43236, 236d – целые десятичные числа,
23h, 0ADh – целые шестнадцатеричные числа (если шестнадцатеричная константа начинается с буквы, то перед ней указывается 0),
0111010b – целое двоичное;
вещественные константы [<знак>] <целое> . [E|e [<знак>] <целое>],
например: -2., 34E-28;
символы в кодировке ASCII (MS DOS) или ANSI (Windows) в апострофах или кавычках, например: 'A' или A;
строковые константы в апострофах или кавычках, например, 'ABCD' или ABCD.
Примеры определения данных различных типов приведены далее.
Задание
Запустите RADAsm, создайте файл проекта по шаблону консольного приложения. Внимательно изучите структуру программы и зафиксируйте текст с комментариями в отчете.
Запустите шаблон на выполнение и просмотрите все полученные сообщения. Убедитесь, что текст программы и настройки среды не содержат ошибок.
Добавьте директивы определения данных и команды сложения и вычитания, описанные в разделе 3 настоящих методических указаний. Найдите в отладчике внутреннее представление исходных данных, зафиксируйте его в отчете и поясните.
Проследите в отладчике выполнение набранной вами программы и зафиксируйте в отчете результаты выполнения каждой добавленной команды (изменение регистров, флагов и полей данных).
Введите следующие строки в раздел описания инициированных данных и определите с помощью отладчика внутренние представление этих данных в памяти. Результаты проанализируйте и занесите в отчет.
val1 BYTE 255
chart WORD 256
lue3 SWORD -128
alu BYTE ?
v5 BYTE 10h
BYTE 100101B
beta BYTE 23,23h,0ch
sdk BYTE ²Hello²,0
min SWORD -32767
ar DWORD 12345678h
valar BYTE 5 DUP (1, 2, 8)
Определите в памяти следующие данные:
а) целое число 25 размером 2 байта со знаком;
б) двойное слово, содержащее число -35;
в) символьную строку, содержащую ваше имя (русскими буквами и латинскими буквами).
Зафиксируйте в отчете внутреннее представление этих данных и дайте пояснение.
Определите несколькими способами в программе числа, которые во внутреннем представлении (в отладчике) будут выглядеть как 25 00 и 00 25. Проверьте правильность ваших предположений, введя соответствующие строки в программу. Зафиксируйте результаты в отчете.
Замените директивы описания знаковых данных на беззнаковые:
A DWORD -30
B DWORD 21
X DWORD ?
Запустите программу и прокомментируйте результат.
Добавьте в программу переменную F1=65535 размером слово и переменную F2= 65535 размером двойное слово. Вставьте в программу команды сложения этих чисел с 1:
add F1,1
add F2,1
Проанализируйте и прокомментируйте в отчете полученный результат (обратите внимание на флаги).
