
- •Организация и функционирование вычислительных машин
- •Лабораторная работа 1.Освоение трансляции, отладки и выполнения программы на языке Ассемблера Intel 8086.
- •Часть 1
- •Часть 2
- •Лабораторная работа 2. Изучение режимов адресации в Intel8086
- •Лабораторная работа 3. Программирование ветвящихся процессов
- •Лабораторная работу 4. Изучение программирования обработки символьной информации с использованием команд пересылки строк.
- •Лабораторная работа 5. Разработка собственного прерывания.
- •Лабораторная работа 6. Организация связи Ассемблера с яву на примере программы построения частотного распределение попаданий псевдослучайных целых чисел в заданные интервалы.
- •Лабораторная работа 7. Использование арифметических операций и процедур в Ассемблере.
- •Лабораторная работа 8. Разработка на языке ассемблер программы анализа используемой конфигурации компьютера и вывода на экран информации об имеющихся ресурсах.
Лабораторная работу 4. Изучение программирования обработки символьной информации с использованием команд пересылки строк.
1. Разработать программу обработки символьной информации, реализующую функции:
инициализация ( вывод титульной таблички );
передача строки символов, длиной не более Nmax, из заданной области памяти в буферную область;
выполнение заданного в таблице 1 преобразования введенной строки, вывода результирующей строки символов на экран и передача в приемную область памяти.
2. Разработать на языке Pascal тестирующую программу для проверки функционирования ассемблерной программы. Ассемблерную программу включить в программу нa Pascal по принципу встраивания (in-line).
Таблица 1.
Варианты заданий вида преобразования
1. Формирование выходной строки только из цифр введенной строки.
2. Формирование выходной строки только из латинских букв введенной строки.
3. Формирование выходной строки только из русских букв введенной строки.
4. Преобразование всех заглавных латинских букв входной строки в строчные.
5. Преобразование всех строчных латинских букв входной строки в заглавные.
6. Инвертирование введенных во входной строке цифр в десятичной системе счисления.
7. Преобразование введенных во входной строке десятичных цифр в шестнадцатиричную систему счисления и вывод на экран.
8. Инвертирование введенных во входной строке цифр в шестнадцатиричной системе счисления.
9. Формирование номера введенной латинской буквы по алфавиту и номера позиции его первого вхождения во входной строке и выдача их на экран.
10. Формирование номера введенной русской буквы по алфавиту и номера позиции его первого вхождения во входной строке и выдача их на экран.
11. Игнорирование (исключение) строчных латинских букв, введенных во входной строке при формировании выходной строки.
12. Исключение русских букв и цифр, введенных во входной строке, при формировании выходной строки.
Лабораторная работа 5. Разработка собственного прерывания.
1. Краткие сведения.
Прерывание - это процесс вызова процедур для выполнения некоторой задачи, обычно связанной с обслуживанием некоторых устройств (обработка сигнала таймера, нажатия клавиши и т.д.). Когда возникает прерывание, процессор прекращает выполнение текущей программы (если ее приоритет ниже) и запоминает в стеке вместе с регистром флагов адрес возврата(CS:IP) - места, с которого будет продолжена прерванная программа. Затем в CS:IP загружается адрес программы обработки прерывания и ей передается управление. Адреса 256 программ обработки прерываний, так называемые векторы прерывания, имеют длину по 4 байта (в первых двух хранится значение IP , во вторых - CS) и хранятся в младших 1024 байтах памяти. Программа обработки прерывания должна заканчиваться инструкцией IRET (возврат из прерывания), по которой из стека восстанавливается адрес возврата и регистр флагов.
Программа обработки прерывания - это отдельная процедура, имеющая структуру:
SUBR_INT PROC FAR
PUSH AX ; сохранение изменяемых регистров
...
<действия по обработке прерывания>
POP AX ; восстановление регистров
...
MOV AL, 20H
OUT 20H,AL
IRET
SUBR_INT ENDP
Две последние строки необходимы для разрешения обработки прерываний с более низкими уровнями, чем только что обработанное.
Замечание: в лабораторной работе действиями по обработке прерывания может быть вывод на экран некоторого текста или включение/выключение звукового сигнала.
Программа, использующая новые программы обработки прерываний при своем завершении должна восстанавливать оригинальные векторы прерываний. Функция 35 прерывания 21H возвращает текущее значение вектора прерывания, помещая значение сегмента в ES, а смещение в BX. В этом случае программа должна содержать следующие инструкции:
; -- в сегменте данных
KEEP_CS DW 0 ; для хранения сегмента
KEEP_IP DW 0 ; и смещения прерывания
; -- в начале программы
MOV AH, 35H ; функция получения вектора
MOV AL, 1CH ; номер вектора
INT 21H
MOV KEEP_IP, BX ; запоминание смещения
MOV KEEP_CS, ES ; и сегмента
Для установки написанного прерывания в поле векторов прерываний используется функция 25H прерывания 21H, которая устанавливает вектор прерывания на указанный адрес.
PUSH DS
MOV DX, OFFSET ROUT ; смещение для процедуры в DX
MOV AX, SEG ROUT ; сегмент процедуры
MOV DS, AX ; помещаем в DS
MOV AH, 25H ; функция установки вектора
MOV AL, 60H ; номер вектора
INT 21H ; меняем прерывание
POP DS
В конце программы программы восстанавливается старый вектор прерывания
CLI
PUSH DS
MOV DX, KEEP_IP
MOV AX, KEEP_CS
MOV DS, AX
MOV AH, 25H
MOV AL, 1CH
INT 21H ; восстанавливаем вектор
POP DS
STI
Варианты заданий
Шифры, определяющие варианты заданий приведены в таблице
N Шифр N Шифр
бригады задания бригады задания
1 1A 7 3B
2 1B 8 3C
3 2A 9 4A
4 2B 10 4B
5 2С 11 4C
6 3A 12 2C
Цифра в шифре задает номер и назначение заменяемого вектора прерывания:
1 - 1Ch - прерывание от часов - генерируется автоматически операционной системой
18 раз в сек;
2 - 60h - прерывание пользователя - должно генерироваться в программе;
3 - 05h - прерывание, генерируемое при нажатии клавиш Shift+PrintScr;
4 - 23h - прерывание, генерируемое при нажатии клавиш Control+C.
Буква определяет действия, реализуемые программой обработки прерываний:
А - Печать сообщения на экране;
В - Выдача звукового сигнала(печать символа с кодом 07h);
С - Приостановить вывод на экран (вставить цикл задержки).
Замечание: для исключения возможного взаимного влияния системных и пользовательских прерываний рекомендуется отвести в программе под стек не менее 1К байт.