Способы адресации в командах языка Ассемблера Тема 5. Знакомство с некоторыми функциями 21 прерывания DOS.


РЕЖИМЫ АДРЕСАЦИИ
Под адресацией данных подразумевают способы описания соот-ветствующих адресов хранения операндов, используемых в программе. Различают основные способы описания операндов (и соответствующие формы адресации):
1. Операнды-регистры;
2. Непосредственные операнды;
3. Операнды в памяти.

Режим адресации Формат адреса сегментный регистр
=============== ============= =================
Регистровая регистр Нет
Непосредственная данные Нет
Косвенная регистровая [BX] DS
[BP] SS
[DI] DS
[SI] DS

По базе со смещением метка [BX] DS
метка [BP] SS

Прямая метка [DI] DS
с индексированием метка [SI] DS

По базе метка [BX + SI] DS
с индексированием метка [BX + DI] DS
метка [BP + SI] SS
метка [BP + DI] SS

Строковые команды исходный адрес DS:SI
адрес приемника ES:DI
• Метка […] может быть заменена на [смещение + …].
Следовательно, запись [24 + BX] будет означать адрес 24+ВХ.

Примечание: Многие строковые команды используют ES:DI как место назначения, а DS:SI как адрес источника.
ИСПОЛЬЗОВАНИЕ ПРЕРЫВАНИЙ
1. Векторы прерываний.

Работа компьютеров семейства IBM PC , собранных на базе мик-ропроцессоров Intel 8086, управляется главным образом с помощью использования прерываний, которые могут генерироваться как аппа-ратно, так и программно.
Когда возникает прерывание, управление компьютера передает-ся программе обработки прерывания, которая обычно хранится в сис-темной ROM. Обработчик прерывания вызывается путем загрузки его адресов сегмента и смещения в регистры, которые управляют ходом выполнения программы, а именно CS и IP. Сегментные адреса, кото-рые определяют местоположение обработчиков прерываний, называют-ся векторами прерываний. Таблица векторов прерываний находится в самом начале RAM-памяти по адресу 0000:0000Н. Всего может быть 256 векторов прерываний. Адрес обработчика прерываний высчитывается умножением вектора прерывания на 4.
В общем случае прерывания компьютера можно разделить на шесть категорий:
— прерывания микропроцессора или логические прерывания — с 00Н по 04Н;
— аппаратные прерывания — с 08Н по 0FH и 70H по 77H;
— программные прерывания — с 10Н по 1FH и 40Н по 5FH;
— прерывания DOS — c 20Н по 3FH;
— прерывания Бейсика — 80H по F0H;
— прерывания общего назначения — с 60Н по 66Н.
2. Прерывания DOS

Пять прерываний DOS 20Н, 21Н, 25Н, 26Н, 27Н обеспечивают доступ к системным службам. К этим прерываниям можно обратится из программы с помощью команды INT. Для других четырех прерываний 22Н, 23Н, 24Н, 28Н DOS хранит адреса программ, вызываемых самой DOS, но можно заменить их своими программами, изменив значения одного из векторов прерываний. Остальные 22 прерывания, резерви-руемые системой DOS, не предназначены для использования в прог-раммах.
Прерывание 20Н используется для завершения и выхода из прог-раммы и передачи управления обратно системе DOS. Прерывание 21Н — общие службы DOS. Обладает набором функций. каждая функция имеет уникальный номер, который указывается при обращении к данному прерыванию.
Прерывание 25Н и 26Н служит для чтения и записи диска в аб-солютных адресах.
Прерывание 27Н завершает работу программы, не удаляя ее из памяти. Она оставляет определенную часть программы в памяти и она остается резидентной.
3. Некоторые функции прерывания 21Н.

01Н — ввод символа с эхопечатью
02Н — вывод символа
08Н — ввод с консоли без эхопечати
09Н — вывод строки символов
0АН — буфферизированный ввод с клавиатуры

ВЫПОЛНЕНИЕ РАБОТЫ:
1. Введите программу в любом доступном редакторе и запишите на диск.

title Демонстратор некоторых функций int 21 (com)
;———————————————
codesg segment para ‘code’
assume cs:codesg, ds:codesg, ss:codesg, es:codesg
org 100h
begin: jmp start

message db ‘Hello, Tiraspol!’,’$’
start: lea dx, message ; загрузка адреса строки
mov ah, 09h ; функция вывода строки на экран
int 21h
int 20h ; выход в DOS
codesg ends
end begin

2. Оттранслируйте программу и выполните компановку.
3. Запустите на исполнение.
4. Объясните результат и алгоритм действия программы по ис-ходному тексту.
5. При работе с Turbo Assembler можно заменить описание сегментов специальными директивами.

title Демонстратор некоторых функций int 21 (com)
;———————————————
dosseg ; расположение сегментов в соответсвии
; с соглашениями в MS DOS
.model tiny ; описание принятой модели памяти
; в этой модели код программы, данные и
; стек расположены в одном сегменте
.code ; начало сегмента кода
org 100h

begin: jmp start
message db ‘Hello, Tiraspol!’,’$’
start: lea dx, message ; загрузка адреса строки
mov ah, 09h ; функция вывода строки на экран
int 21h
int 20h ; выход в DOS
end begin

6. Введите следующую программу

title Демонстратор некоторых функций int 21 (com)
;———————————————
codesg segment para ‘code’
assume cs:codesg, ds:codesg, ss:codesg, es:codesg
org 100h
begin:
call start

message db ‘Введите Ваше имя: ‘, ‘$’
string label byte ;Список параметров
symb db 19 ;Максимальная длина
real db ? ;Реальная длина
all db 20 dup (?),’$’; Введенные символы

start proc near
mov ah, 00h ; Функция очистки экрана
mov al, 03h ; Стандартный цветной текст 80х25
int 10h

mov dh, 12 ; Установка позиции курсора
mov dl, 02
mov bh, 00
mov ah, 02h ; Вызов функции установки курсора
int 10h

mov ah, 09h ; Вызов функции вывода
lea dx, message ; Загрузка адреса строки сообщения
int 21h ; Вызов 21 прерывания DOS
lea dx, string ; Загрузка адреса списка параметров
mov ah, 0ah ; Запрос функции ввода
int 21h ; Вызов 21 прерывания DOS

mov dh, 12 ; Установка позиции курсора
mov dl, 40
mov bh, 00
mov ah, 02h ; Вызов функции установки курсора
int 10h

mov bl,real ; Поместить указатель на конец строки
mov bh,00
mov all[bx],07 ; Установка ограничителя
mov all[bx+1],’$’
lea dx, string+2
mov ah, 09h
int 21h ; Вызов 21 прерывания DOS
mov ah,4ch ; Выход в DOS в 21 прерывании
int 21h
start endp
codesg ends
end begin

7. Оттранслируйте введенную программу и выполните компоновку.
8. Объясните результат и алгоритм действия программы по ис-ходному тексту. В случае затруднений обратитесь к TD.
9. Выполните индивидуальное задание. (Для выполнения индиви-дуального задания обращайтесь к электронному справочнику help.exe).

ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ.
1. Напишите программу ввода пароля, и вывода его на экран внизу экрана. Выполните ее трассировку.
2. Напишите программу, запрашивающую у оператора строку, а затем выводящую ее на экран. Выполните трассировку программы.
3. Напишите программу, запрашивающую у оператора строку, а затем выводящую ее на экран в pамке. Выполните трассировку прог-раммы.
4. Напишите программу, запрашивающую у оператора строку, а затем выводящую ее на экран, предварительно изменив заглавные буквы на строчные. Выполните трассировку программы.
5. Напишите программу, запрашивающую у оператора строку, а затем выводящую ее на экран, предварительно изменив строчные бук-вы на заглавные. Выполните трассировку программы.
6. Напишите программу, запрашивающую у оператора строку, а затем выводящую символы введенной строки на экран в обратном по-рядке. Выполните трассировку программы.
7. Напишите программу, выводящую строку запроса и ожидаю-щую ответ. В зависимости от ответа ‘Y’ или ‘N’ вывести на экран ту или иную строку.
8. Напишите программу, запрашивающую у оператора строку, а затем выводящую ее на экран, предварительно изменив строчные бук-вы каждого слова на заглавные. Выполните трассировку программы.
9. Напишите программу, запрашивающую у оператора строку из pусских букв, а затем выводящую ее на экран, предварительно изме-нив строчные буквы на заглавные, а заглавные — на стpочные. Вы-полните трассировку программы.
10. Напишите программу, запрашивающую у оператора строку из pусских букв, а затем выводящую ее на экран, предварительно изме-нив строчные буквы на заглавные. Выполните трассировку программы.
11. Напишите программу, запрашивающую у оператора строку из pусских букв, а затем выводящую ее на экран, предварительно изме-нив заглавные буквы на строчные. Выполните трассировку программы.
12. Напишите программу, запрашивающую у оператора строку.
Количество вводимых букв ограничьте. Выполните трассировку прог-раммы.
13. Напишите программу, запрашивающую у оператора строку, а затем выводящую на экран кажде слово стpоки в отдельной стpоке. Выполните трассировку программы.

ВОПРОСЫ К ЗАЩИТЕ ЛАБОРАТОРНОЙ РАБОТЫ
1. Способы адресации данных, используемые в языке Ассемблер.
2. Что такое прерывание? Вектор прерывания?
3. Какие бывают прерывания?
4. Основные прерывания DOS.
5. Ввод символа с клавиатуры в программу.
6. Вывод символа на экран.
7. Ввод строки с клавиатуры в программу.
8. Вывод строки на экран.
9. Выход из программы в DOS.

СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ:
1. Абель П. «Язык Ассемблера для IBM PC и программирования» М.: Высшая школа, 1992 — 447 c.
2. Джордейн Р. «Справочник программиста персональных ком-пьютеров типа IBM PC, XT и AT» М.: Финансы и статистика, 1992. — 544 с.
3. П.Нортон, Р.Уилтон «IBM PC и PS/2. Руководство по прог-раммированию» М.: Радио и связь, 1994г. — 336 с.
4. Г.В.Майко «Ассемблер для IBM PC» Одесса, 1996г.

Ст. преподаватель
кафедры ПОВТ И.А.Васюткина

Загрузка...