Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №1_2012.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
140.29 Кб
Скачать

3.10 Используемые модели памяти

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

Таблица 3.1.

Модели памяти

Модель

Тип кода

Тип данных

Назначение модели

TINY

near

near

Код и данные объединены в одну группу с именем DGROUP. Используется для создания программ файлового формата СОМ

SMALL

near

near

Код занимает один сегмент, данные объединены в одну группу с именем DGROUP. Эту модель обычно используют для большинства программ на ассемблере

MEDIUM

far

near

Код занимает несколько сегментов, по одному на каждый объединяемый программный модуль. Все ссылки на передачу управления имеют тип far. Данные объединены в одной группе; все ссылки на них имеют тип near.

COMPACT

near

far

Код в одном сегменте; ссылки на данные имеют тип far.

LARGE

far

far

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

FLAT

near

near

Код и данные в одном 32-битном сегменте (плоская модель памяти).

4. Порядок выполнения работы.

4.1. Загрузить пакет MASM путем запуска программы-оболочки Programer’s WorkBench (файл pwb.com в каталоге MASM\BIN)

4.2. Набрать в рабочем окне пакета текст тестирующего кода:

.MODEL small

.STACK 256

.data; задание начала сегмента данных

;вставить описание необходимых для работы процедуры данных

.code; задание начала сегмента команд (программы)

;вставить описание процедуры

main: ;начало основного тела программы

mov dx,@data

mov ds,dx

call ИМЯ_ПРОЦЕДУРЫ

mov ax,4c00h

int 21h

end main ;конец основного тела программы

Этот код может являться шаблоном при написании процедур и программных модулей для исследования работы тех или иных команд.

4.3. После директивы .data вставить описание данных, используемых в программе:

operand1 db ?

operand2 db ?

res_w label word

res_b db 0

carry db 0

Знаки вопроса заменить числами размером не больше одного байта.

4.4. После директивы .code вставить текст процедуры, выполняющей основные, исследуемые действия:

adduns proc

mov al,operand1

add al,operand2

mov res_b, al

jnc pend ;Проверка на переполнение

adc carry, 0

pend: ret

adduns endp

В этой процедуре происходит сложение чисел размером 1 байт без учета знака. Программа учитывает возможное переполнение результата. Сложение двоичных чисел большей размерности (2/4 байта) выполняется аналогично. Для этого необходимо заменить директивы DB на DW/DD и регистр AL на AX/EAX.

4.5. В качестве операнда команды вызова подпрограммы CALL поставить имя процедуры adduns.

4.6. Сохранить полученный файл с расширением «.asm» на диске и провести его ассемблирование по команде Make/Compile file, после чего получить ЕХЕ-файл командой Make/Build.

4.7. Запустить отладчик для полученного файла командой Run/Debug.

4.8. Переписать в отчет значения содержимого регистров до выполнения программы (после выполнения команды Run/Restart), при пошаговом ее выполнении (команда Trace или нажатие клавиши F8) и после выполнения программы.

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

4.10. Переписать в отчет содержимое окна источника «source» в формате:

Адрес:смещение

Содержимое ячейки памяти (шестнадцатеричное значение

Мнемокод команды

Операнды команды

При заполнении этой таблицы учесть ячейки с находящимися в них данными (операндами) для вычислений.

4.11. Модифицировать программу для работы с двоичными числами размерностью в два и четыре байта.

4.12. Повторить для модифицированной программы п.4.6-4.10.

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

Для этого соответствующим образом заменить в процедуре команду add al,operand2 на соответствующую исследуемую команду с учетом синтаксиса.

4.14. Занести в отчет все программы и результаты их работы, полученные в отладчике.

4.15. Сделать выводы по особенностям и отличиям в работе команд сложения, вычитания и сравнения.

5. Содержание отчета.

Отчет должен содержать:

1. наименование, цель и программу работы;

2. тексты и результаты работы программ;

3. содержимое регистров на каждом шаге работы программ для каждой из исследуемых команд сложения, вычитания и сравнения;

4. выводы по работе.

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

1. Раскрыть назначение и область применения языка Assembler.

2. Привести алгоритм получения исполняемого кода программы с помощью пакета MASM.

3. Описать регистры микропроцессора.

4. Охарактеризовать назначение разрядов в регистре флагов микропроцессора.

5. Перечислить регистры общего назначения, основные области их использования.

6. Назначение индексных регистров и регистровых указателей.

7. Перечислить директивы установления данных и привести их форматы.

8. Указать правила использования и формат записи команд сложения ADD, ADC, INC.

9. Указать правила использования и формат записи команд вычитания SUB, SBB, DEC, NEG, а также команды сравнения СМР.

10. Описать процесс инициализации программ.