- •Обработка прерываний
- •Обработка прерывания
- •Изменение вектора прерывания
- •Функция 35h
- •Дополнительные сведения о структуре doSиBios Прямое обращение к видеопамяти
- •Буфер клавиатуры
- •Пример выполнения работы
- •Варианты заданий
- •Вопросы по теме
- •Лабораторная работа № 2.
- •Функция 0ен
- •Функция 3dн Открывает хендл (открывает файл) на диске
- •Функция 3ен
- •Функция 3fh
- •Функция 40н
- •Функция 41н
- •Функция 42н
- •Функция 43h
- •Функция 47н
- •Функция 4ен
- •Функция 4fh
- •Функция 56н
- •Функция 57н
- •Функция 5ан
- •Прерывание 25н
- •Прерывание 26н
- •Пример выполнения работы Создать новую директорию new_dir на диске а:, сделать ее текущей, записать туда файл newfile.Txt и в него записать сообщение - "Это вновь созданный файл".
- •Порядок выполнения работы
- •Вопросы по теме работы
- •Лабораторная работа № 3
- •Основные сведения
- •Функция Назначение
- •Функция 00н
- •Функция 01h
- •Функция 02h
- •Функция 03h
- •Пример выполнение работы
- •Контрольные вопросы
- •Лабораторная работа № 4 Таймер и генерация звука.
- •Форматы управляющих команд таймера.
- •Использование каналов в ibm pc.
- •Генерация звука.
- •Частоты нот для второй октавы
- •Варианты заданий.
- •Вопросы по теме работы.
Функция Назначение
00h Инициализация порта
01h Вывод одного символа в порт
02h Ввод одного символа из порта
03h Опрос состояния порта
*Примечание.
Номер стыка в описанных ниже функциях задается так: 0 - СОМ1, 1 - COM2 и т. д. Базовый адрес порта для стыка извлекается из области данных по адресу 00400h.
Функция 00н
Инициализация последовательного порта .
*Вход:
АН = 00h
AL = параметры инициализации (см. ниже)
DX = номер стыка (0-СОМ1.1-СОМ2 и т. д.)
*Выход:
АН == состояние линии AL == состояние модема
* Примечание:
Инициализирует заданный стык RS-232 в соответствии с параметрами, которые задаются в AL следующим образом:
7 6 5 4 3 2 1 0
После вызова функции в регистр АН записывается состояние последовательного порта АН (состояние линии):
7 6 5 4 3 2 1 0
Функция 01h
Выводит один символ в порт последовательного интерфейса.
*Вход:
АН = 0lh
AL = выводимый символ
DX = номер стыка (0-СОМ1,1-СОМ2 и т. д.)
*Выход:
АН = состояние линии (см. функцию 00h)
AL = без изменения
*Примечание:
Посылает символ из AL в заданный порт и возвращает состояние линии в АН (AL не изменяется). Если произошла ошибка, то устанавливается бит 7 АН. Определить ошибку можно вызвав функцию 03h.
Функция 02h
Вводит один символ из порта
*Вход:
АН = 02h
DX = номер стыка (0-СОМ1, 1-СОМ2 и т. д.)
*Выход:
АН = состояние линии (см. функцию 00h)
AL = введенный символ
*Примечание:
Ожидает поступления символа из линии и возвращает его в AL; состояние линии возвращается в АН. Если произошла ошибка, то устанавливается бит 7 АН. Определить ошибку можно вызвав функцию 03h.
Функция 03h
Производит опрос состояния последовательного порта
*Вход:
АН = 03h
DX = номер стыка (0 - СОМ1, 1- СОМ2 и т. д.)
*Выход:
АН = состояние линии (см. функцию 00h) AL = состояние модема
*Примечание:
Возвращает состояние линии (см. функцию 00h) и состояние модема.
Существуют специальные программы, обеспечивающие передачи информации между двумя компьютерами по последовательному каналу. Одна из них включена в версию Norton Commander версии 3.0. Для работы с этой командой запустите версию 3.0 Norton Commander, F9 - войдите в меню, на правой или левой панели выберите в меню команду Link. Предварительно необходимо соединить кабелем два PC. Команда Link предлагает выбрать порты (СОМ1 , или COM2 ) и тип данной машины( Master - ведущая машина или Slave - ведомая машина ). Для одной машины выберите Master, а для другой Slave. Можно установить так же ускоренную или обычную скорость передачи. После установок параметров запустить команду Link. Запуск произвести одновременно на обоих PC. Для установления связи требуется 5-10 секунд, если за это время связь не установилась надо попробовать изменить значение портов, например, СОМ1 заменить на COM2 и перезапустить команду.
Пример выполнение работы
Работа выполняется на двух компьютерах, соединенных кабелем, подключенным к стыку 25-штырь-ковыми разъемами. Чаще всего 25-штырьковый разъем подключается к порту COM2, поэтому при составлении программы в первую очередь следует использовать порты COM2. Работа состоит из двух частей: Для каждого варианта задания составляются две программы работы: для передающей (OUT.ASM ) и для принимающей ( INP.ASM ) машин. Ниже приведен пример программирования СОМ1 для передачи и приема символа. В примере общие процедуры работы со стандартными устройствами ввода/вывода выделены в отдельный файл LIB.ASM. С помощью директивы ассемблера INCLUDE <имя файла> LIB.ASM вставляется в обе программы, в место, определенное директивой INCLUDE. Эта директива имеет вид INCLUDE <имя файла>, где <имя файла> - имя файла (если необходимо указывается директория), содержащего любые данные, которые директива вставляет в программу при трансляции вместо себя.
;Программа передачи символа через СОМ1
; OUT.ASM
data segment
messi db 13,10, 'Передача символа : "
char db "A" ; передаваемый символ
db "$"
mess2 db 13,10,'Символ передан. Код завершения : $'
coderet db ?
data ends
code segment
assume cs:code,ds:data
start: mov ax,data ; Инициализация регистра
mov ds,ax ; сегмента данных DS
call initrs232 ; инициализация интерфейса RS-232
mov dx,offset soob1 ; Вывод сообщения
call print_text ; на экран
; Передача символа
mov ah,l ; Номер функции 1
mov al,char ; Передаваемый символ Char
mov dx,0 ; Номер используемого интерфейса COM1
int 14h ; Передача символа по сети
mov coderet, ah ; Сохраняем код завершения прерывания
mov dx,offset mess2 ; Вывод сообщения о завершении
call print_text ; передачи символа по сети
mov al,coderet ; Вывод кода возврата
call print_al ; (Выводимый код в AL)
mov ax,4C00h ; Завершение программы
int 21h ; и выход в DOS
include lib.asm ;Подключение библиотеки процедур
code ends
end start
Файл INP.ASM:
; INP.asm
data segment
mess db 13,10,'Принят символ "
char db ?,'$'
mess1 db 13,10,'Код завершения $'
data ends
code segment
assume cs:code,ds:data,ss:stack
Start:
mov ax, data ; Инициализация регистра
mov ds,ax ; сегмента данных DS
call initrs232 ; Инициализация интерфейса RS-232
;Прием символа mm:
mov ah, 2 ; Функция чтения символа
mov dx, 0 ; Читаем из линии СОМ1
int 14h ; Прием символа
or ah,ah ; Проверяем ошибку
jne mm ; Бесконечный цикл до получения символа
; Получили символ, печатаем его
mov char.al
mov dx, offset mess
call print_text
; Печатаем регистр статуса линии (код возврата)
mov dx,offset mess1
call print_text
xchg al,ah
call print_al
; Завершаем работу, выходим в DOS
mov ax,4C00h
int 21h
include lib.asm
code ends
end Start
; библиотека стандартных процедур
; имя файла на диске - LIB.ASM
initrs232 proc near ; инициализация порта СОМ1
push ds ; сохране-
push cs ;ние
pop ds ;регистров
mov al,l 1111111b ;скорость передачи 9600бод, контроль на четность,
; 2 стоповых бита, длина слова 8 бит
mov ah,Oh ; номер функции
xor dx.dx ; COM1
int 14h ; вызов прерывания
mov dx,offset cs:init ; вывод
call print_text ; сообщения
call print_al ; вывод
xchg al,ah ; сообщений
mov dx,offset cs:statusl ; о
call print_text ; статусе
call print_al ; линии
pop ds
ret
initrs232 endp
print_al proc near ; процедура вывода шестнадцатиричного числа из AL
push ax ; сох-
xor ah, ah ; раня-
push ds ; ем
push ax ; co-
push bx ; дер-
push cx ; жи-
push dx ; мое
push di ; регистров
push cs ; устанавливаем
pop ds ; ds на cs
mov ex,16 ;
print_n: ;
mov bx,16 ; основание системы
xor dx,dx ; счисления
div bx ; деление 32х16
mov di,dx ; остаток в di
mov b1, byte ptr cs:print_table[di] ; 16-тиричную цифру из таблицы
mov di,cx ; цифру
mov byte ptr cs:print_buf[di],bl ; в буфер вывода
cmp ax,0h ; частное = 0
jle print_nl ; да
loop print_n ; на следующую цифру
print_ nl: ;
mov di,cx ;
mov al, byte ptr cs:print_buf[di]
mov bx,07 ; цвет
mov ah.0Eh
int 10h
inc cx
cmp cx,17
jne print_nl
pop di ; восста-
pop dx ; навлива-
pop cx ; ем
pop bx ; co- pop ax ; дер-
pop ds ; жи-
pop ax ; мое
ret ; регистров
print_al endp
print_text proc near ; вывод на экран сообщений
push ax
mov ah,09H
int 21H
pop ax
ret
print_text endp
print_table db "0123456789ABCDEF"
print_buf db 17 dup (0)
init db 13,10,"Инициализация порта СОМ1"
db 13,10,"Регистр статуса модема $"
statusl db 13,10, "Регистр статуса линии $"
Варианты заданий.
1. Передать, принять и напечатать строку символов произвольной длины ( до 100 символов ).
2. Передать, принять и напечатать копию экрана с учетом цвета символов.
3. Организовать пересылку сообщений между машинами ( форма диалога ).
4. Передать из одной машины в другую файл произвольной длины.
5. Передать из одной машины в другую директорию и имя файла, хранящегося в принимающей машине, которая выдает сообщение о результатах поиска файла.
6. Передать из одной машины в другую файл произвольной длины, которая по мере приема выводит его на экран.
7. Передать из одной машины в другую копию экрана с атрибутами цвета, создать в принимающей машине файл, хранящий копию переданного экрана.
8. Передать системное время, установить в принимающей машине новое ситемное время равное переданному.