Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
Топ:
Эволюция кровеносной системы позвоночных животных: Биологическая эволюция – необратимый процесс исторического развития живой природы...
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Основы обеспечения единства измерений: Обеспечение единства измерений - деятельность метрологических служб, направленная на достижение...
Интересное:
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Средства для ингаляционного наркоза: Наркоз наступает в результате вдыхания (ингаляции) средств, которое осуществляют или с помощью маски...
Дисциплины:
2022-10-04 | 28 |
5.00
из
|
Заказать работу |
|
|
Исходный файл на ЯА состоит из сегментов. В простейшем случае это – один сегмент, который содержит обязательные элементы.
{мет. сег.} SEGMENT ’code’
ASSUMECS:{ мет. сег.}, DS:{ мет. сег.}, SS:{ мет. сег.}
{мет. нач}: MOVAX{ мет. сег.}; загрузка в DS
MOVDS, AX; адреса сегмента
…
MOVAX{код функции}
INT 21h
… DW …
… DB …
{ мет. сег.} ENDS
END{ мет. нач}
Рассмотрим директивы оформления программы:
1) SEGMENT
Для ассемблеров MASMили TASMимеет одинаковую структуру.
Общий вид:
{мет. сег.} SEGMENT[{счетный}] [{комбинационный}] [‘{класс}’]
где {мет. сег.} - имя сегмента, которое трактуется как метка
Атрибуты необязательны, но, если они есть, то очередность не меняется.
{счетный} – определяет метод выравнивания сегмента, т.е. начальный адрес.
Возможны следующие варианты:
Атрибут
| Граница | Примечания | |
Определяет | Нач. адрес | ||
Byte | Байт | Любой | Не рекомендуется |
Word | Слово | Четный | |
Para | Параграф | Кратный 16 | По умолчанию |
Page | Страница | Кратный 256 | |
Dword | Двойное слово | Кратный 4 | Есть только в TASM |
{комбинационный} – показывает, как данный сегмент комбинируется с другим, имеющим ту же метку, но из другого исходного файла.
Ограничение: размер области ОП, которая получается в результате объединения сегментов, не должна превышать 64 Кбайта.
Пример:
PRIVATE, PUBLIC, COMMON, STACK идругие.
Если нет атрибута {комбинационный}, то сегмент не объединяется с другими.
‘{класс}’ –помогает компоновщику определить нужный порядок расположения сегментов при сборке из разных модулей. При этом все сегменты с одним классом объединяются в один последовательно, а с различными классами – располагаются в алфавитном порядке или в порядке появления.
Часто используются классы:
|
‘Code’ – сегмент команд, необходим для MASM, иначе не работает CV(CodeView) - отладчик;
‘Stack’ – необходим для TLINK, иначе не инициализируется сегмент стека;
2) ASSUME
Нужна для выполнения команд программы, которые неявно ссылаются на сегментные регистры МП (т.е. в примере – DS и CS). Она обеспечивает передачу адресов сегментов в соответствии с именами в эти регистры.
Общий вид:
ASSUMECS:{ метка}[, {сег. рег.}:{ метка 1}]
В приведенном примере эта директива означает, что DS и CS указывают на один и тот же сегмент, причем в CS адрес начала сегмента загружается автоматически, а в DS для этого требуются обычно две инструкции в начале сегмента кодов.
ASSUME может быть располагаться до начала первого сегмента.
В многосегментных программах могут быть описаны следующие сегменты:
Сег.рег. | Сегмент | Загрузка |
CS | сегмент кодов | автоматическая |
DS | сегмент данных | в программе |
ES | дополнительный сегмент данных | в программе |
SS | сегмент стека | автоматическая |
3) ENDS
Указывает на конец текста сегмента.
Общий вид:
{ мет. сег.} ENDS
4) END
Указывает на конец исходного модуля (ИМ).
Общий вид:
END{ мет. начала}
где { мет. начала} – пусковой адрес, т.е. метка первой выполняемой строки ИМ, которой передается управление после компоновки (возможно имя процедуры).
Эта директива необходима, т.к. в начале сегмента кодов могут находиться процедуры, декларации и т.д.
Обычно программы состоят из 3-х сегментов (возможно четырёх). Расположение сегментов свободное, но рекомендуется порядок.
- сегмент данных,
- дополнительный сегмент данных,
- сегмент команд (кодов),
- сегмент стека, т.к. он может быть описан без расхода памяти.
Например,
Stack SEGMENT stack,‘stack’
DW 128 dup(?)
StackENDS
Объем стека обычно указывается в словах или байтах и не должен превышать 64КБ.
stack – комбинаторный атрибут, который позволяет компоновщику объединить стековые сегменты из разных ИМ.
‘stack’ – класс сегмента, необходимый для TLINK.
Использование прерываний
Система прерываний – важнейшая часть ПК, позволяющая быстро реагировать на события, обработка которых должна выполняться немедленно.
|
Прерывания бывают:
- аппаратные (таймер клавиатуры, мыши и т.д.)
- внутренние – возбуждаются в самом МП (деление на 0 – несуществующая команда)
- программные – вызываются командой INT(interrupt) с числовым аргументом, который рассматривается как номер вектора прерывания.
Вектор прерывания (базовый вектор) – это обычно 2 слова.
|
IPобр. пр. 0 CSобр. пр. 0 |
IPобр. пр. 1 CSобр. пр. 1 |
... |
IPобр. пр. n CSобр. пр. n |
... |
IP |
CS |
FLAGS |
| |||||||
|
|
Где обр. пр. i– обработчик прерываний, указывает адреса, в которых хранятся программы-диспетчеры, открывающий доступ к большим группам подпрограмм, обслуживающих конкретное прерывание.
Сигналы аппаратных прерываний, возникающие во внешних устройствах, поступают в МП через 2 контроллера прерываний. При этом по линиям данных подается номер вектора прерываний.
Самое начало ОП отводится под векторы прерываний. Всего 256 номеров: адреса от 00000hдо 003FFh.
Векторы прерываний делятся на группы:
- внутренние прерывания МП (от 00hдо 06h)
- аппаратные прерывания (от 08hдо 0Fhи от 70hдо 77h)
- программный BIOS обслуживания аппаратуры ПК (10h, 13hи другие)
- программы DOS (21h, 22hи другие)
- адреса системы таблиц BIOS (1Dh, 1Ehи другие)
Рассмотрим программные прерывания.
Общий вид:
INT {номер прерывания}
где {номер прерывания}может принимать значения от 0 до 255 и соответствует ситуации, обслуживаемой конкретным прерыванием.
Прерывания, вызываемые DOS называются прерываниями низкого уровня. Прерывания верхнего уровня используются в прикладных программах.
Примеры прерываний верхнего уровня:
Номер | Ситуация или выполняемые действия | |
10-чный | 16-чный | |
32 | 20h | Нормальное завершение программы |
33 | 21h | Обращение к функциям DOS |
34 | 22h | Вызов подпрограммы обработки завершения задачи |
Особенно важно прерывание 21h, которое может выполнять множество функций DOS по обслуживанию стандартных устройств и файловой системы.
Например,
№ функции | Операция |
0 | Завершение программы (аналог 20h) |
1 | Ввод символа с клавиатуры с эхом на экране |
2 | Вывод символа на экран |
5 | Вывод символа на печать |
8 | Ввод символа с клавиатуры без эха |
9 | Вывод строки символов на экран |
3Fh | Чтение из файла или ввод с устройства |
40h | Запись в файл или вывод на устройство |
4Ch | Завершение программы с возвратом управления |
4Dh | Выдача кода завершения программы |
Номер функции заносится в AH до вызова прерывания.
|
Например,
MOVAH, {номер функции}
INT 21h
Кроме того, в другие регистры МП программа обработки должна поместить аргументы выполняемой операции, если они нужны, а по окончании обработки из регистров могут быть получены результаты операции.
Например, 3-хсегментная программа вывода строки на экран:
Text SEGMENT
Hello DB ‘Здравствуйте!$’
Text ends
Primer SEGMENT
ASSUME CS:Primer, DS:text, SS:stack
Start: MOV AX, Text
MOVDS,AX
MOVAH, 9; функция вывода строки
MOVDX, OFFSETHello
INT 21h
MOVAH, 4Ch; выход из программы
INT 21h
Primer ENDS
Stak SEGMENT ‘stack’
DW 128 dup(?)
Stak ENDS
ENDStart
Операторы в инструкциях ЯА.
Операторы позволяют уточнить (модифицировать) команды.
Они условно делятся на 2 группы:
- операторы атрибута,
- операторы, возвращающие значение, т.е. определяющие его.
1) Операторы атрибута:
PTR – используется совместно с атрибутами типа Byte, Word, Dwordдля локальной отмены типов, определенных декларациями DB, DW, DD) или с атрибутами Nearили Far для отмены значения дистанции, принятого по умолчанию.
Например,
FdDW 322h
…
MOVAH, BytePTRFd+1; пересылка 2-го Байта, т.еAH:=03h
SHORT – модификация атрибута Nearв команде JMP
Например,
JMPShortL1
2) Операторы, возвращающие значение:
DUP – опрераторповторения начальных значений.
Например, MASSIV DW 100 DUP(0)
или A DB 2 DUP(12h, 44h)
12h | 44h | 12h |
|
|
LENGTH – возвращает число элементов, определяемых оператором DUP.
Например,
Tabl DW 10 DUP(0)
…
MOV DX, LENGTH Tabl; dx:= 000Ah
Если DUP отсутствует, то возвращаемое значение 1.
OFFSET – возвращает относительный адрес переменной или метки; используется обычно в команде mov.
Заметим, что есть аналогичная инструкция ЯА:
LEAop1,op2
Где op1 – регистр для слова (2Б), op2 – идентификатор или другое описание адреса области ОП.
Например,
LEABX, Q;BX:=адрес Q
LEA SI, [BX+2]; SI:=[BX]+2
|
MovDX, Q;DX:= содержимое Q
SEG – возвращает адрес сегмента, в котором располагается данная переменная или метка; используется обычно в программах, состоящих из нескольких отдельно ассемблированных сегментов.
Например,
MOVDX, segFLDW;DX:= адрес сегмента данных
TYPE – возвращает число байтов, соответствующих типу переменных.
Например,
Определение | Число байтов |
DB | 1 |
DW | 2 |
DD | 4 |
Например,
Tabl DW 10 DUP(0)
MOV AX, Type Tabl; AX:= 0002h
SIZE – возвращает произведение длины LENGTH и типа TYPE:
SIZE=LENGTH*TYPE(сколько байтов ушло на запись)
Пример:
MOV BX, Size Tabl; BX:= 0014h
|
|
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!