Здавалка
Главная | Обратная связь

Sub ax,ax ; установить аккумулятор в значение 0



Mov cx,100 ; число выполняемых циклов

.

.

Директива .DATA несколько более сложна. Как можно понять, директива .DATA отмечает начало сегмента данных. В этом сегменте следует размещать ваши переменные памяти. Например:

.

Data

TopBoundary DW 100

Counter DW ?

ErrorMessage DB 0dh,0dh, '***Ошибка***',0dh,0ah,'$'

.

Это довольно просто. Вся "сложность" директивы .DATA заключается в том, что до того, как вы будете обращаться к ячейкам памяти в сегменте, определенном с помощью директивы .DATA, нужно явно загружать сегментный регистр DS идентификатором @data. Так как сегментный регистр можно загрузить из регистра общего назначения или ячейки памяти, но в него нельзя загрузить константу, регистр DS обычно загружается с помощью последовательности из двух инструкций:

.

mov ax,@data

Mov ds,ax

.

(Вместо регистра AX можно использовать любой общий регистр). Данная последовательность инструкций устанавливает DS таким образом, чтобы он указывал на сегмент данных, который начинается по директиве .DATA.

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

DB- 1 байт

DW - 2 байта = 1 слово

DD- 4 байта = 1 двойное слово

DQ- 8 байт = 1 четвертное слово

DT- 10 байт

Задания (2 часа)

1. Создайте файл с именем Lab2.asm.

 

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

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

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

Hello DB 'Лабораторная работа №2 !$';Зарезервировали память

;для переменной HELLO

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

Start:

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

mov ds,ax;данных

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

mov ah,09h;Функция DOS вывода строки

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

mov ax,4C00h;Функция DOS завершения

int 21h;программы

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

 

2. Создайте исполняемый файл Lab2.EXE, выполнив ассемблирование и компоновку файла.

3. Пример создания программы в виде *.com файла

3.1. Войдите в директорию TASM, в ней создайте файл с именем Lab21.asm. Введите текст следующей программы (без комментариев).

; Пример оформления программы в виде com-файла

MODEL SMALL

CODE

Org 100h

begin:

Jmp start

Hello DB 'Hello!$'

Start: LEA DX,Hello

Mov ah,09h

Int 21h

Mov ah,4ch

Mov al,00h

Int 21h

END begin

 

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

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

5. Продемонстрируйте работающие программы Lab1.exe, Lab2.com

6. Показать работа двух программ в Турбоотладчике

7. Напишите в отчете основные отличия в создании и структуре.com и .exe файлов.

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

1. Из чего состоит процесс ассемблирования программы?

2. Чем отличается трансляция от компоновки?

3. Можно в процессе ассемблирования обойтись без ключей?

4. Объясните назначение каждого из перечисленных файлов, получаемых при создании исполняемой программы на языке ассемблер *.asm, *.lst, *.map, *.exe, *.com.

5. Что такое "Турбоотладчик", расскажите основы пользования им?

6. Какая разница между сегментными регистрами es и ds?

7. Как отражаются es и ds в Турбоотладчике?

8. В чем особенность программы на языке ассемблера?

9. Есть у ассемблера своя собственная среда программирования?

 

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

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

3. Опишите назначения директив Assume и Model?

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

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

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

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

8. Раскройте механизм сегментации памяти процессора 8086?

9. Перечислите сегментные регистры процессора 8086, особенности их использования.








©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.