Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АААААААААААА.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
212.22 Кб
Скачать

Практическое задание №8 Директивы языка ассемблера

Цель работы:

  • ознакомление со структурой программы на ассемблере;

  • дать понятие о директивах определения данных;

  • директивы DATA, CODE, Mode.

ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

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

Предложения ассемблера бывают четырех типов: 

  • команды или инструкции, представляющие собой символические аналоги машинных команд. В процессе трансляции инструкции ассемблера преобразуются в соответствующие команды системы команд микропроцессора; 

  • макрокоманды — оформляемые определенным образом предложения текста программы, замещаемые во время трансляции другими предложениями; 

  • директивы, являющиеся указанием транслятору ассемблера на выполнение некоторых действий. У директив нет аналогов в машинном представлении;

  • строки комментариев, содержащие любые символы, в том числе и буквы русского алфавита. Комментарии игнорируются транслятором. 

Формат директивы 

Назначение

.CODE [имя]

Начало или продолжение сегмента кода

.DATA

Начало или продолжение сегмента инициализированных данных. 

.STACK [размер]

Начало или продолжение сегмента стека модуля. Параметр [размер] задает размер стека.

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

Директивы определения сегментов .STACK, .CODE и .DATA определяют, соответственно, сегмент стека, сегмент кода и сегмент данных. Например, директива:.STACK 200hопределяет стек размером в 200h (512) байт.

.CODE отмечает начало сегмента кода.

.CODE указывает Турбо Ассемблеру, в какой именно сегмент надо поместить ваши инструкции.

Директивы определения данных позволяют определить переменные в памяти различного размера:

DB - 1 байт DW - 2 байта = 1 слово DD - 4 байта = 1 двойное слово DQ - 8 байт = 1 четвертное слово DT - 10 байт

Задание: 1. Создайте файл с именем Lab8.asm. (Программно этот код практически ни чем отличается от Lab7.asm, но будет хорошо, если вы дополните егокомментариями).

.ModelSmall ; Модель памяти ближнего типа

.Stack 100h ; Определяет стек размеро100h

.Data ; Начало сегмента данных

HelloDB ‘Laboratornayarabota №6 !$’; Зарезервировалипамять для переменной Hello

.Code ; Начало сегмента кода

Start:

Movax,@DATA ; Формирование адреса сегмента

Movds,ax ;данных

LeaDX,Hello ; Установитьв DX адрес переменной Hello

Movah,09h ; ФункцияDOCвывода строки

Int 21h ; Вывод строки на экран

Movah,1h

Int 21h ; Вывод строки на экран

Movax,4C00h ; Функция DOC завершения

Int 21 ; программы

ENDstart ; конец программы

2. Создайте исполняемый файл Lab8.EXE, выполнив ассемблирование и компоновку файла. 3. Войдите в директорию cлабораторной работой (ПЗ7), в ней создайте файл с именем Lab71.asm. Введите текст следующей программы (без комментариев).

.ModelSmall

.CODE

Org 100h

Begin:

Jmpstart

Hello DB ‘Hello!$’

Start:LEA DX,Hello

Movah,09h

Int 21h

Movah,1h

Int 21h

Movah,4ch

Moval,00h

Int 21h

ENDbegin

3.1Создайте исполняемый *.comфайл Lab71.com, выполнив ассемблирование и компоновку файла Lab71.asm. При компоновке наберите TLINK/t Lab71.

  4. Напишите отчет о директивах ассемблера.

5. Продемонстрируйте работающие программы Lab8.exe, Lab71.com 6. Показать работа двух программ в Турбоотладчике 7. Напишите в отчете основные отличия в создании и структуре *.com и *.exe файлов.

Контрольные вопросы:

  1. Какую структуру имеет программа на языке ассемблера? 

  2. Какого вида предложения бывают в исходном коде на ассемблере?

  3. Модели памяти директива Model. 

  4. Расскажите разницу между директивами .Code, .Data и .Stack?

  5. Какие директивы определения данных существуют, их отличия и применение?

  6. Создание .com и .exe, их структурное отличие на примере сегментов памяти?