Директивы транслятора для описания моделей памяти
Современные трансляторы допускают использование директив, упрощающих оформление программы. Так, для создания простой модели памяти типа .exe, содержащей один сегмент кода, достаточно указать имя модели small в директиве .model.
Основные типы возможных моделей памяти приведены в таблице 1.
Название | Код | Данные | Определение | Описание |
tiny | near | near | cs = dgroup ds =ss = dgroup | Код, данные и стек содержатся в одном сегменте 64 Кбайт. Используется только для COM – программ. |
small | near | near | cs = _text ds =ss = dgroup | Код и данные содержатся в различных сегментах размером до 64 Кбайт. |
medium | far | near | cs = <module>_text ds =ss = dgroup | Неограниченный размер кода. Под данные отводится один сегмент 64 Кбайт. |
compact | near | far | cs = _text ds =ss = dgroup | Размер кода ограничен одним сегментом 64 Кбайт. Размер данных не ограничен. |
large | far | far | cs = <module>_text ds =ss = dgroup | Размер кода и данных не ограничен. Размер переменной не может превышать 64 Кбайт. |
huge | far | far | cs = <module>_text ds =ss = dgroup | Размер кода и данных не ограничен. Аналогична большой модели памяти (введена для совместимости с языками высокого уровня). |
Таблица 1
Оформление программы типа .exe с использованием модели памяти:
title lab1
.model small ;модель памяти
.stack 100h ; подстек выделяется 256 ячеек памяти
.data ; начало сегмента данных
adw10
bdw20
cdw30
ddw30
ydw ?;результат (2 байта)
ostdw ?;остаток от деления
.code ; начало сегмента кода
Lab1:
mov ax,dgroup ; загрузка регистра
mov ds,ax ;сегмента данных
mov ax,a ;(a)
add ax,b; (a+b)
imul c; (a+b)*c
idiv d;(a+b)*c
mov y,ax ;запись результата в память
mov ost,dx; запись остатка в память
Ret
mov ah,4ch ;завершение выполнения программы
Int 21h
endlab1
Оформление программы типа .com с использованием модели памяти:
.model tiny;модель памяти для .com-программы
.code ; начало сегмента
org 100h ; под нужды ОС выделяется 256 байтов в
; начале сегмента
lab1proc far
movax,a
subax,b
imulc
idivd
movy,ax
movost,dx
Ret
adw10
bdw20
cdw30
ddw30
ydw?
ostdw?
lab1endp
endlab1
Пример отладки программы в отладчике AFDPro:
AX 0009 SI 0000 CS 2C8D IP 001A Stack +0 0000 Flags 3284 BX 0000 DI 0000 DS 2C8C +2 2C7A CX FFF6 BP 0000 ES 2C7A HS 2C7A +4 0003 OF DF IF SF ZF AF PF CF DX FFFF SP 001C SS 2C8A FS 2C7A +6 0002 0 0 1 1 0 0 1 0 +------------------------------------------------------------------------------- ¦CMD > ¦ 1 0 1 2 3 4 5 6 7 +------------------------------------------02-¦ DS:0000 0A 00 14 00 1E 00 1E 00 0017 A10600 MOV AX,[0000] ¦ DS:0008 00 00 00 00 00 00 00 00 001A F63E0800 ADD AX,[0002] ¦ DS:0010 1E B8 00 00 50 B8 8C 2C 001E 03C1 IMUL W/[0004] ¦ DS:0018 8E D8 A1 00 00 03 06 02 0020 A30900 IDIV W/[0006] ¦ DS:0020 00 F7 2E 04 00 8B C8 A1 0023 89160B00 MOV [0008],AX ¦ DS:0028 06 00 F6 3E 08 00 03 C1 0027 CB MOV [000A],DX ¦ DS:0030 A3 09 00 89 16 0B 00 CB 0028 0000 RET Far ¦ DS:0038 00 00 00 00 8F 4E 00 00 002A 0000 ADD [BX+SI],AL ¦ DS:0040 00 20 00 00 00 00 00 00 002C 8F ADD [BX+SI],AL ¦ DS:0048 00 00 00 00 00 00 00 00 -------------------------------------------------------------------------------- 2 0 1 2 3 4 5 6 7 8 9 A B C D E F ¦ DS:0000 03 00 02 00 FE FF 09 00 02 00 00 00 00 00 00 00 ¦....__.. ........ DS:0010 1E B8 00 00 50 B8 8C 2C 8E D8 A1 00 00 03 06 02 ¦.+..P+М, О+б..... DS:0020 00 F7 2E 04 00 8B C8 A1 06 00 F6 3E 08 00 03 C1 ¦.ў...Л+б ..Ў>...- DS:0030 A3 09 00 89 16 0B 00 CB 00 00 00 00 8F 4E 00 00 ¦г..Й...- ....ПN.. DS:0040 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ¦. ...... ........ -------------------------------------------------------------------------------- 1 Step 2ProcStep 3Retrieve 4Help ON 5BRK Menu 6 7 up 8 dn 9 le 10 ri |
Лабораторное задание
Задание 1.Разработать программу вычисления функции y=f(a,b,c,d). Формат данных – байт, слово. Данные задаются в программе с помощью директив DBиDW. Результат записать в память. Правильность работы программы проверить с помощью отладчика.
Оформить программу в виде файлов типа .ехе для операндов-слов.
Программу следует набрать в любом текстовом редакторе, создающем файл в ASCII-кодах, (например, с помощью Блокнота) и сохранить с именем, например, Lab1.asm.
Пусть для работы с программой используются транслятор Tasm, редактор связей Tlink и отладчик AFD. Настройте в свойствах этих программ снятие флажка Закрывать окно по завершении работы на вкладке Программа. Для удобства работы можно разместить эти программы и программу Lab1.asm в одном каталоге.
Откомпилировать c получением листинга:
набрать в командной строке Total Commander:
Tasm.exe /l Lab1.asm
Если ошибок при компиляции не обнаружено, будут созданы файлы листинга Lab1.lst и объектного кода Lab1.obj.
Получить исполняемый файл, запустив Редактор связей:
Tlink.exe Lab1.obj
Запустить отладчик:
AFD.exe Lab1.exe
В процессе отладки использовать несколько тестовых наборов исходных данных: операнды должны быть как положительные, так и отрицательные. Результаты отладки зафиксировать в файле протокола. Для отчета представить листинг программы c комментариями и распечатку файла протокола отладки. Варианты заданий представлены в таблице1.
Таблица 1. Варианты заданий. | |||
Вариант | Функция | Вариант | Функция |
y=a+b-c/d*e | y=(a+b)*c-d/e | ||
y=a-b/c+d*e | y=a*b/c-d*e | ||
y=a*b+c/d-e | y=a+b-c+d/e | ||
y=a/b+c-d*e | y=(a+b)/c-d*e | ||
y=(a-b+c)/d*e | y=a-b/c*d+e | ||
y=a-b+c/d*e | y=(a-b)+c/d+e |
Задание 2.Настроить среду Asm Editor на работу с программами Tasm, Tlink и AFD.
Кнопку трансляции свяжите с .bat-файлом, который
· запускает Tasm с параметром, указывающим на исходную программу,
· если трансляция прошла успешно, запускает Tlink для создания объектного файла, в противном случае открывает Блокнот с листингом программы.
Оформить разработанную в соответствии с Заданием 1 программу в виде .сом –программы, используя операнды-байты. Отладить программу.
Отчет должен содержать листинги программ и окна отладки программ на момент окончания их выполнения.