- •Лабораторная работа №1 работа с машинными командами и командами ассемблера с помощью отладчика debug
- •1. Цель работы
- •2. Основные сведения
- •2.1. Машинные команды
- •2.2. Команды ассемблера
- •Некоторые команды ассемблера
- •2.3. Отладчик Debug
- •3. Методические указания к выполнению лабораторной работы
- •3.1. Арифметика при помощи команд Debug и просмотр регистров
- •3.2. Машинные команды
- •3.3. Команды ассемблера
- •4. Контрольные вопросы
- •Лабораторная работа №2 основы программирования на ассемблере в windows
- •1. Цель работы
- •2. Основные сведения
- •2.1. Особенности программирования на ассемблере для Windows
- •2.2. Вызов WinApi функций
- •2.3. Создание программ на ассемблере
- •1. Получение ассемблерного листинга
- •2. Ассемблирование (трансляция)– получение объектного модуля
- •3. Компоновка (линковка) – создание исполняемого модуля
- •4. Выполнение (запуск) программы
- •2.4. Инструментальный пакет masm32
- •Основные сведения и порядок работы в пакете masm32:
- •2.5. Примеры
- •3. Методические указания к выполнению лабораторной работы
- •4. Контрольные вопросы
- •Литература
- •Лабораторная работа №3 представление данных в памяти компьютера
- •1. Цель работы
- •2. Основные сведения
- •2.1. Типы данных
- •2.2. Директивы определения данных
- •2.3. Взаимодействие ассемблерных программ с памятью
- •2.4. Примеры
- •3. Методические указания к выполнению лабораторной работы
3. Методические указания к выполнению лабораторной работы
Перед тем, как приступить к подготовке заданий, выполните самостоятельно все примеры, приведенные в теоретической части.
Практическая часть лабораторной работы состоит из трёх частей.
1. При помощи инструментального пакета MASM32 создайте и выполните программу на ассемблере, вычисляющую сумму и разность двух чисел: первое число – номер в группе, второе – число, противоположное номеру первой буквы фамилии в алфавите (отрицательное число в дополнительном коде). Противоположным к некоторому х называется число, равное х по абсолютной величине, но обратное по знаку. Сумму и разность переведите вручную в десятичную форму. Исследуйте работу программы в отладчике OllyDbg.
2. Перепишите программу из примера 2, используя процедуру Invoke.
3. Перепишите программу из примера 3, занося параметры функций GetStdHandle и WriteConsoleA в стек без использования процедуры Invoke.
4. Контрольные вопросы
Для чего используется язык ассемблера?
Что такое программа-ассемблер? Какие программы-ассемблеры вы знаете?
Чем программирование в Windows отличается от программирования в DOS?
Что такое функции API и для чего они используются?
Каков порядок вызова функций API? Как передаются параметры функций API? В каком порядке они должны заноситься в стек?
Зачем и каким образом используется процедура Invoke?
Что такое объектный файл? компоновщик?
Для чего используются директивы ассемблера? Какие директивы вам известны?
Для чего к программам на ассемблере подключают библиотеки?
Каково назначение прототипов процедур?
Литература
Бройдо В.Л. Вычислительные системы, сети и телекоммуникации: Учебник для вузов. – СПб.: Питер, 2005. – 703 с.
Зубков С.В. Assembler. Язык неограниченных возможностей. – М.: ДМК Пресс, 1999.
Крупник А.Б. Изучаем Ассемблер – СПб.: Питер, 2005. – 249с.
Пирогов В.Ю. Ассемблер для Windows. – 3-е изд., перераб. и доп. – СПб.: БХВ-Петербург, 2005. – 864 с.
Пятибратов А.П. Вычислительные системы, сети и телекоммуникации: Учебник / А.П. Пятибратов, Л.П. Гудыно, А.А. Кириченко; под ред. А.П. Пятибратова. – 3-е изд., перераб. и доп. - М.: Финансы и статистика, 2005. – 560 с.
Юров В., Хорошенко С. Assembler: учебный курс – СПб.: Питер Ком, 1999. – 672 с.
http://www.wasm.ru. На сайте размещены учебники и статьи, доступны для скачивания программы-ассемблеры.
Лабораторная работа №3 представление данных в памяти компьютера
1. Цель работы
Ознакомиться с правилами объявления и инициализация простых типов данных.
2. Основные сведения
2.1. Типы данных
При программировании на языке ассемблера используются данные следующих типов:
1.Непосредственные данные, представляющие собой числовые или символьные значения, являющиеся частью команды. Непосредственные данные формируются программистом в процессе написания программы для конкретной команды ассемблера.
2.Данные простого типа, описываемые с помощью набора директив резервирования памяти, позволяющих выполнить самые элементарные операции по размещению и инициализации числовой и символьной информации.
3.Данные сложного типа были введены в язык ассемблера с целью облегчения разработки программ. Введение сложных типов данных (массивов, структур, записей, объединений) позволяет несколько сгладить различия между языками высокого уровня и ассемблером.
Данные простого типа:
• Байт – восемь последовательно расположенных битов, от 0 до 7, при этом бит 0 является самым младшим значащим битом;
•Слово – последовательность из 2 байт, имеющих последовательные адреса. Размер слова – 16 бит; биты в слове нумеруются от 0 до 15. Байт, содержащий нулевой бит, называется младшим байтом, а байт, содержащий 15-й бит – старшим байтом. Микропроцессоры Intel имеют важную особенность – младший байт хранится по меньшему адресу. Адресом слова считается адрес младшего байта.
• Двойное слово – последовательность из 4 байт (32 бита), расположенных по последовательным адресам. Слово, содержащее нулевой бит, называется младшим словом, а слово, содержащее 31-й бит, - старшим словом.
• Учетверенное слово – последовательность из 8 байт (64 бита), расположенных по последовательным адресам. Адресом учетверенного слова считается адрес его младшего двойного слова.
При работе с этими директивами и с дампами памяти не забывайте о принципе <младший байт по младшему адресу>, в соответствии с которым при сохранении данных в памяти младшая часть значения всегда записывается перед старшей частью.
ASM предоставляет очень широкий набор средств описания и обработки данных, который вполне сравним с аналогичными средствами некоторых языков высокого уровня.
Для описания простых типов данных в программе используются специальные директивы резервирования и инициализации данных, которые по сути являются указаниями транслятору на выделение определенного объема памяти. Если проводить аналогию с языками высокого уровня, то директивы резервирования и инициализации данных являются определениями переменных. Машинного эквивалента этим директивам нет. При работе с этими директивами и с дампами памяти не забывайте о принципе <младший байт по младшему адресу>, в соответствии с которым при сохранении данных в памяти младшая часть значения всегда записывается перед старшей частью.