Главная » Просмотр файлов » Конспект лекций по курсу Ассемблер (Алещенко)

Конспект лекций по курсу Ассемблер (Алещенко) (1002288), страница 6

Файл №1002288 Конспект лекций по курсу Ассемблер (Алещенко) (Раздаточный материал) 6 страницаКонспект лекций по курсу Ассемблер (Алещенко) (1002288) страница 62016-04-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 6)

Обычно программы состоят из 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

F LAGS





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

Операторы в инструкциях ЯА.

Операторы позволяют уточнить (модифицировать) команды; считается, что операторы можно разделить на 2 группы:

­- операторы атрибута,

- операторы, возвращающие значение, т.е. определяющие его.

1) Операторы атрибута:

PTR – используется совместно с атрибутами типа Byte, Word, Dword для локальной отмены типов (определенных декларациями DB, DW или DD) или с атрибутами Near или Far для отмены значения дистанции по умолчанию.

Например,

Fd DW 322h

MOV AH, Byte PTR FD+1; пересылка 2-го Байта



SHORT – модификация атрибута Near в команде JMP

Например,

JMP Short L1

2) Операторы, возвращающие значение:

DUP – оператор повторения начального значения, например:

MASSIV DW 100 DUP(0); создание и обнуление массива размером 100.

LENGTH – возвращает число элементов, определенных оператором DUP.

Например,

Tabl DW 10 DUP(?)

MOV DX, LENGTH Tabl ; DX := 000Ah

Если DUP отсутствует, то возвращаемое значение – 0001.

OFFSET – возвращает относительный адрес переменной или метки. Используется обычно в команде mov. Существует аналогичная инструкция LEA op1, op2. Где op1 – регистр для слова (2Б), op2 – идентификатор или другое описание адреса ООП.

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

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

mov DX,Q ; DX := содержимое ячейки Q

SEG – возвращает адрес сегмента, в котором располагается данная переменная или метка; используется обычно в программах, состоящих из нескольких отдельно ассемблированных сегментов.

Например,

MOV DX, seg FLDW ; DX := адрес сегмента данных

TYPE – возвращает число байтов, соответствующее определению имени в декларациях:

Определение

Возвращаемое значение

DB

1

DW

2

DD

4

DQ

8

DT

10

STRUC

Число Байтов, определенных в STRUC

NEAR {метка}

FFFFh

FAR {метка}

FFFEh



Например, для Tabl, описанной выше, можно записать

MOV AX, Type Tabl; AX := 0002h

SIZE – возвращает произведение длины LENGTH и типа TYPE (подсчитывает число байтов, потраченных на запись) и полезен при ссылках на переменную с оператором DUP.

Для использованного выше примера можно записать

MOV BX, Size Tabl ; BX := 0014h

Блочная структура программы. Процедуры.

Часто в больших программах используются подпрограммы для реализации вспомогательных алгоритмов. В ЯА подпрограммы оформляются в виде процедур.

Описание процедур

{имя проц.} PROC {параметр}

{тело проц.}

[RET]

{имя проц.} ENDP

где {имя проц.} – должно повторяться дважды и используется для обращения к процедуре;

{параметр} может принимать одно из двух значений - <NEAR> (по умолчанию) или <FAR>.

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

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

Хотя в АЯ можно описать одну процедуру внутри другой, никакой выгоды это не дает и обычно не используется.

Вызов процедур

На ЯА все переходы между основной программой и процедурой нужно организовывать самим. Если из процедуры возможен возврат в DOS, то ее можно вызвать командой перехода на имя процедуры

JMP {имя проц.}

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

CALL {имя проц.}

Тогда в теле процедуры должна быть команда возврата

Характеристики

Тип файла
Документ
Размер
574 Kb
Тип материала
Предмет
Высшее учебное заведение

Список файлов учебной работы

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6508
Авторов
на СтудИзбе
302
Средний доход
с одного платного файла
Обучение Подробнее