Конспект лекций по курсу язык ассемблера ibm icon

Конспект лекций по курсу язык ассемблера ibm


1 чел. помогло.
Смотрите также:
Конспект лекций удк 651. 5 Ббк 60. 844 Конспект лекций по курсу «Делопроизводство»...
Конспект лекций удк 651. 5 Ббк 60. 844 Конспект лекций по курсу «Делопроизводство»...
Опорный конспект лекций по макроэкономике Автор: Фридман А. А...
Конспект лекций по курсу «Организация производства»...
Конспект лекций по курсу «Русский язык и культура речи»...
Конспект лекций по курсу “Начертательная геометрия и инженерная графика” Кемерово 2002...
Горобец е. Г., Карлина о. А., Нарушевич а. Г., Нечепуренко м. Ю...
Горобец е. Г., Карлина о. А., Нарушевич а. Г., Нечепуренко м. Ю...
Конспект лекций часть 1 2008 перечень ссылок основная: М...
Конспект лекций по курсу «бизнес-планирование в условиях рынка»...
Конспект лекций по курсу “ Общая химическая технология” для студентов специальности 090200 всех...
Конспект лекций по курсу «теория чисел» Методическая разработка...



Загрузка...
страницы: 1   ...   4   5   6   7   8   9   10   11   12
вернуться в начало
скачать
^

Структура программы на языке Ассемблера




Исходный файл на ЯА состоит из сегментов. В простейшем случае это – один сегмент, который содержит обязательные элементы.

{мет. сегм.} SEGMENT ’code’

ASSUME CS:{ мет. сегм.}, DS:{ мет. сегм.}

{мет. начала} MOV AX, { мет. сегм.};

MOV DS,AX;

………………

MOV AX,{код функции};

INT 21h

……………

… DW …

… DB …

{ мет. сегм.} ENDS

END { мет. начала}


Рассмотрим директивы оформления программы:

1) директива SEGMENT для ассемблеров MASM или TASM имеет одинаковую структуру

{мет. сегм.} SEGMENT [{счетн.}] [{комб.}] [‘{класс}’] ,где

{мет. сегм.} - это имя сегмента, которое трактуется как метка, т.к. используется для передачи управления. Атрибуты необязательны, но, если они есть, то очередность должна сохраняться.

{счетн.} – определяет метод выравнивания данного сегмента, т.е. начальный адрес сегмента.

Возможны следующие варианты:

Значение атрибута

Граница

Использование

Примечания

Название

Нач. адрес

MASM

TASM

Byte

Байт

Любой

+

+

Не рекомендуется

Word

Слово

Четный

+

+




Para

Параграф

Кратный 16

+

+

По умолчанию

Page

Страница

Кратный 256

+

+




Dword

Двойное слово

Кратный 4

­_

+




{комб.} – показывает, как данный сегмент должен объединяться с другим, имеющим ту же метку, но из другого исходного файла.

Ограничение: размер области ОП, которая получается в результате объединения сегментов, не должна превышать 64 Кбайта. Если нет атрибута {комб.}, то сегмент не объединяется с другими.

Возможны варианты атрибута: PRIVATE, PUBLIC, COMMON, STACK и др.

‘{класс}’ – указывается в апострофах, помогает компоновщику определить нужный порядок расположения сегментов при сборке из разных модулей. При этом все сегменты с одинаковым классом объединяются в один последовательно, а с различными классами – располагаются, как правило, в алфавитном порядке.

Часто используются классы:

‘Code’ – сегмент команд;

‘Stack’ – сегмент команд;

‘Data’ – сегмент данных.

Класс сегмента необходимо указывать для правильной обработки файла.

Например, MASM требует наличия класса ‘Code’, т.к. без этого не может работать отладчик Code View (CV), а компоновщик TLINK, входящий в TASM, не инициализирует сегмент стека, если не объявлен класс ‘Stack’.

2) директива ASSUME нужна для выполнения команд программы, которые неявно ссылаются на сегментные регистры МП (т.е. в примере – DS и CS). Она обеспечивает передачу адресов сегментов с соответствующими именами в сегментные регистры.

Общий вид

ASSUME CS:{ мет.}[, {сег. рег.}:{ мет.}]

В приведенном примере эта директива означает, что DS и CS указывают на один и тот же сегмент, причем в CS адрес начала сегмента загружается автоматически, а в DS для этого требуются обычно две инструкции в самом начале сегмента:

mov AX,{метка}

mov DS,AX

ASSUME может быть расположен до начала первого сегмента. В многосегментных программах ASSUME может описывать следующие сегменты

Сег.рег.

Сегмент

Загрузка адреса

CS

Рг сегмента команд

автоматическая

DS

Рг сегмента данных

в программе

ES

Рг доп. сегмента данных

в программе

SS

Рг сегмента стека

автоматическая



3) Директива ^ ENDS указывает на конец текста сегмента. Общий вид

{ мет. сегм.} ENDS

4) Директива END указывает на конец текста исходного модуля (ИМ). Общий вид

END { мет. начала}

где { мет. начала} – пусковой адрес, т.е. метка первой выполняемой строки ИМ, которой передается управление после компоновки.

Эта директива нужна, т.к. декларации описания ООП (DB, DW …) могут располагаться в начале или в конце сегмента команд, причем рекомендуется – в начале. Декларации можно вставлять и в текст между командами, но это – не корректно.

Обычно программы состоят из 3-х сегментов (возможно 4-х): команд, данных и стека. Расположение сегментов в принципе свободное, но рекомендуется:

    1. сегмент данных,

    2. дополнительный сегмент данных,

    3. сегмент команд,

    4. сегмент стека, т.к. он может быть описан без расхода памяти.

Например,

Stack SEGMENT stack ‘stack’

DW 128 dup(?)

Stack ENDS

Объем стека обычно указывается в словах и не должен превышать 64КБ. Здесь имя сегмента совпадает с атрибутами, что не запрещено; далее stack – комбинаторный атрибут, который позволяет компоновщику объединить стековые сегменты из разный ИМ (исходных модулей) в один стековый сегмент. Кроме того, при загрузке программы выполняется автоматическая инициализация регистров SS и SP.

‘Stack’ - класс сегмента для TLINK.
^

Использование прерываний


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

Существует 3 вида прерываний:

- Аппаратные (от машинных таймеров, клавиатуры и т.д.)

- Внутренние (возбуждаются в самом МП: деление на 0, несуществующая команда)

- Программные (вызываются командой int (от interrupt - прерывать) с числовым аргументом, который рассматривается как номер вектора прерывания, который обычно представляет собой два слова)


^ Схема организации прерываний



IP обр.прер.0

CS обр.прер.0

IP обр.прер.1

CS обр.прер.1

…………………….

IP обр.прер.n

CS обр.прер.n

…………………

IP

CS

FLAGS

…………………..












0 вектор прерывания 0




МП





IP

CS

FLAGS


2

4

6


(2)


Вектор прерв. процесса


(1)

SP в момент прерывания




Обработка прерываний n – обработчик прерываний, указывает адреса, в которых хранятся программы диспетчеры, открывающие доступ к большим гркппам подпрограмм обслуживающих конкретное прерывание.

Сигналы аппаратных прерываний, возникающие во внешних устройствах, поступают в МП через два контроллера прерываний, при этом по линиям данных передаётся номер вектора прерываний. Самое начало ОП отводится под векторы прерываний (адреса от 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

Завершение программы с возвратом управления DOS

4Dh

Выдача кода завершения программы



Номер функции заносится в AH до вызова прерывания. Например,

MOV AH, {номер функции}

INT 21h

Кроме того, в другие регистры вызывающая программа должна поместить аргумент выполняемой операции, если они нужны, а по окончании обработки из регистров могут быть получены результаты операции.

Ниже приведен пример программы из трех сегментов для вывода на экран строки.

Text SEGMENT

Hello DB “Здравствуйте!$”

; программа

Prim SEGMENT

ASSUME CS:Prim, DS:text

Start MOV AX, Text

MOV DS,AX

MOV AH, 9; функция вывода строки

MOV DX, OFFSET Hello

INT 21h

MOV AH, 4Ch; выход из программы

INT 21h

Prim ENDS

Stak SEGMENT ‘stack’

DW 128 dup(?)

Stak ENDS

END Start

Здесь для вывода сообщения в DX записывается начальный адрес ООП с именем Hello. Оператор OFFSET позволяет определить эффективный (относительный) адрес переменной или метки внутри сегмента данных. Общий вид оператора

OFFSET {переменная или метка}

Этот оператор используется обычно в командах MOV . Заметим, что для загрузки эффективный адреса в регистр существует специальная команда МП. Общий вид

LEA op1, op2

Где op1 – регистр для слова (2Б);

Op2 – описывает адрес в ОП

Например,

^ LEA SI, [BX+2]; SI := [BX]+2

LEA BX,Q ; BX := адрес Q

MOV DX,Q ; DX := содержимое Q




оставить комментарий
страница9/12
Дата02.10.2011
Размер0,99 Mb.
ТипКонспект, Образовательные материалы
Добавить документ в свой блог или на сайт

страницы: 1   ...   4   5   6   7   8   9   10   11   12
отлично
  1
Ваша оценка:
Разместите кнопку на своём сайте или блоге:
rudocs.exdat.com

Загрузка...
База данных защищена авторским правом ©exdat 2000-2017
При копировании материала укажите ссылку
обратиться к администрации
Анализ
Справочники
Сценарии
Рефераты
Курсовые работы
Авторефераты
Программы
Методички
Документы
Понятия

опубликовать
Загрузка...
Документы

Рейтинг@Mail.ru
наверх