Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LR_1_MZYaP.doc
Скачиваний:
12
Добавлен:
22.09.2019
Размер:
673.79 Кб
Скачать

Лабораторная работа №1

Методические указания предназначены для студентов, слушающих курс Машинно-зависимые языки программирования. В качестве среды программирования при этом используется RADAsm. Данная среда позволяет осуществлять ввод программ на ассемблере, их ассемблирование, компоновку и выполнение в консольном и обычном режимах Windows. Для отладки программ к среде подключен 32-разрядный отладчик OlleDBG. Настоящие указания содержат необходимые теоретические сведения, практические рекомендации и задания по выполнению работ в указанной среде программирования.

Masm32 – специализированный пакет программирования на языке ассемблера IA-32. Являясь продуктом фирмы Microsoft, он максимально приспособлен для создания Windows-приложений на ассемблере. Кроме транслятора, компоновщика и необходимых библиотек пакет Masm32 включает сравнительно простой текстовый редактор и некоторые инструменты, предназначенные для облегчения программирования на ассемблере. Однако набор инструментов не содержит 32-х разрядного отладчика и предполагает работу в командном режиме, что не очень удобно.

В лабораторных работах для создания программ будет использоваться специализированная интегрированная среда RADAsm, которая помимо других ассемблеров позволяет использовать Masm32. Точнее будет использоваться специально настроенная среда – «сборка» RADAsm + OlleDBG, где OlleDBG – 32-х разрядный отладчик.

Цель работы

Изучение структуры программы на языке Ассемблер; знакомство со средой программирования RadASM; изучение команд пересылки данных; изучение команд для работы с адресами и указателями; изучение методов адресации; изучение арифметических и логических команд.

Структура программы

Директивы сегментации

Программа на языке Ассемблер состоит из следующих частей – сегментов:

1) сегмент стека, промежуточная область памяти с методом доступа к элементам LIFO («последним пришел – первым вышел»);

2) сегмент данных содержит обрабатываемые, промежуточные данные. Данные описываются следущим образом:

Имя Тип выражение

Тип определяет размер данных: DB – один байт, DW – два байта, DD – четыре байта и так далее. Выражение определяет значение, если стоит «?», то переменная не инициализирована.

var1 db 56 ; переменная var1 имеет значение 56

var2 dw 4376h ; var2 имеет значение 4376h (в десятичной – 17270)

var3 dd 3567302334 ; var3 имеет значение 3567302334

var4 dq ? ; значение переменной var4 не определено

3) сегмент кода содержит исполняемый код.

Использование стандартных директив сегментации

При использовании стандартных директив сегментации каждый сегмент данных необходимо описывать директивами сегментации:

Имя_сегмента SEGMENT Тип_выравнивания Тип_комбинирования Класс Размер Имя_сегмента ENDS

Таблица 1 – Описание стандартных директив сегментации

Атрибут

Назначение

Выравнивание

сообщает компоновщику о том, что нужно обеспечить размещение начала сегмента на заданной границе

Комбинирование

сообщает компоновщику, как нужно комбинировать сегменты различных модулей, имеющие одно и то же имя

Класс

заключенная в кавычки строка, помогающая компоновщику определить нужный порядок следования сегментов при сборке программы из сегментов нескольких модулей

Размер

сегменты могут быть 16- или 32-разрядными

Для того что бы сообдить транслятору какой сегмент к какому сегментному регистру привязан используется директива ASSUME:

ASSUME регистр: Имя_сегмента, регистр: Имя_сегмента, …

Структура программы с использованием директив сегментации будет выглядить следующим образом.

1 Объявление сегмента стека.

2 Объявление сегмента данных.

3 Начало сегмента кода:

– директива SEGMENT;

– директива main (proc) (объявление главное процедуры);

– директива ASSUME (связывание сегментов с сегментными регистрами)

4 Настройка сегмента данных командами

mov ax,Имя_сегмента_данных

mov ds,ax

5 Тело программы

6 Стандартное окончание:

– процедур:

RET;

Имя_процедуры ENDP

– кодового сегмента:

mov ax,4C00h

int 21h

Имя_сегмента ENDS

– программы: END Имя_главной процедуры

Использование упрощенных директив сегментации

Для простых программ, содержащих по одному сегменту для кода, данных и стека, описание упрощено с помощью использования упрощенных директив сегментации и директивы указания модели памяти MODEL.

Таблица 2 – Описание некоторых упрощенных директив сегментации

Для сравнения приведем два листинга с программами на ассемблере. Функционально они одинаковы и выводят на консоль сообщение: «Hello World».

Формат команды

Формат кодирования команд Ассемблера имеет следующий вид

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]