
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. Описать процесс инициализации программ.