волом строки должен быть " $ " .Управляющие коды :
07h - звонок, 08h - шаг назад, 0Ah - перевод стро-
ки, 0Dh - возврат каретки .
Вызов : AH = 09h
DS : DX = адрес строки .
Функция 0Eh - Выбор диска .Предназначена для смены
текущего диска .Также возвращает количество логи-
ческих дисков .
Вызов : AH = 0Eh
AL = код дисковода ( 0 = A, 1 = B, 80h =
= C и т.п. )
Возврат : AL = количество дисководов в системе .
Функция 19h - Получение текущего диска .
Вызов : AH = 19h
Возврат : AL = код текущего диска ( 0 = A, 1 = B,
80h = C и т.п. ) .
Функция 1Ah - Установка адреса области передачи
данных ( DTA ) .Устанавливает заданный адрес DTA .
Вызов : AH = 1Ah
DS : DX = адрес DTA .
Функция 25h - Установка вектора прерывания .Запи-
сывает адрес программы обработки заданного преры-
вания в таблицу векторов .
Вызов : AH = 25h
AL = номер вектора прерывания
DS : DX = адрес программы обработки пре-
рывания .
Функция 19h - Получение даты .
Вызов : AH = 2Ah
Возврат : CX = год
DH = месяц
DL = день
AL = день недели ( 0 = воскресенье, 6 -
суббота ) .
Функция 2Fh - Получение адреса области передачи
данных ( DTA ) .Возвращает текущий адрес DTA .
Вызов : AH = 2Fh
Возврат : ES : DX = адрес DTA .
Функция 35h - Получение вектора прерывания .Считы-
вает адрес программы обработки заданного прерыва-
ния из таблицы векторов .
Вызов : AH = 35h
AL = номер вектора прерывания
Возврат : ES : BX = адрес программы обработки пре-
рывания .
Функция 3Bh - Смена каталога.Предназначена для вы-
бора текущего каталога .
Вызов : AH = 3Bh
DS : DX = полное имя каталога (например,
C:\TASM\VIRUS\
При ошибке :
CF = 1
AX = код ошибки .
Функция 3Dh - Открытие файла .Открывает файл с за-
данным именем и возвращает дескриптор, выделенный
этому файлу системой .Указатель устанавливается на
начало файла .
Вызов : AH = 3Dh
AL = режим доступа : 0 - для чтения
1 - для записи
2 - для чтения
и записи
DS : DX = полное имя файла ( например,
C:\TASM\VIRUS\EXE_VIR.COM )
Возврат : AX = дескриптор
При ошибке :
CF = 1
AX = код ошибки .
Функция 3Eh - Закрытие файла .Закрывает файл с за-
данным дескриптором.Дескриптор освобождается, кро-
ме того, модифицируются дата и время создания фай-
ла, если файл был изменен .
Вызов : AH = 3Eh
DX = дескриптор
При ошибке :
CF = 1
AX = код ошибки .
Функция 3Fh - Чтение из файла или устройства .Счи-
тывает данные из файла или устройства и модифици-
рует указатель .При чтении читается строка указан-
ной длины . При чтении из символьного устройства
чтение прекращается, если встретился символ воз-
врата каретки ( например,при вводе с клавиатуры ).
Вызов : AH = 3Fh
BX = дескриптор
CX = количество передаваемых символов
DS : DX = адрес буфера, в который поме-
щаются данные
Возврат : AX = число переданных байт
При ошибке :
CF = 1
AX = код ошибки .
Функция 40h - Запись в файл или в устройство .Счи-
тывает данные из буфера и записывает их в файл,при
этом модифицируется указатель .При записи записы-
вается строка указанной длины .
Вызов : AH = 40h
BX = дескриптор
CX = количество передаваемых символов
DS : DX = адрес буфера, в который поме-
щаются данные
Возврат : AX = число переданных байт
При ошибке :
CF = 1
AX = код ошибки .
Функция 42h - Установка указателя в файле .Предна-
значена для установки указателя на требуемый байт
в файле .
Вызов : AH = 42h
BX = дескриптор
AL = режим установки указателя:
0 - смещение от начала файла
1 - смещение от текущего положения
указателя
1 - смещение от конца файла
CX = старшая часть смещения
DX = младшая часть смещения
Возврат : CX = старшая часть возвращенного указа-
теля
DX = младшая часть возвращенного указа-
теля .
Функция 48h - Выделение блока памяти указанного
размера .Выделяет блок памяти, после чего возвра-
щает его сегментный адрес .
Вызов : AH = 48h
BX = Размер блока памяти в параграфах
Возврат : AX = сегментный адрес выделенного систе-
мой блока
При ошибке :
CF = 1
AX = код ошибки .
BX = размер наибольшего доступного в
данный момент блока .
Функция 49h - Освобождение блока памяти .
Вызов : AH = 49h
ES = сегментный адрес блока,который сле-
дует освободить
При ошибке :
CF = 1
AX = код ошибки .
Функция 4Ah - Изменение размера блока памяти, ко-
торый был выделен программе .
Вызов : AH = 4Ah
BX = новый размер блока в параграфах .
ES = сегментный адрес блока,размер кото-
рого следует изменить
При ошибке :
CF = 1
AX = код ошибки .
BX = размер наибольшего доступного в
данный момент блока .
Функция 4Ch - Завершение процесса с кодом возвра-
та .Завершает текущую задачу и передает код завер-
шения родительскому процессу .Освобождает выделен-
ную программе память, сбрасывает на диск буферы,
закрывает дескрипторы, восстанавливает из PSP век-
тора прерываний INT 22h, INT 23h и INT 24h . Далее
управление передается родительскому процессу .
Вызов : AH = 4Ch
AL = код возврата .
AL = 00h обычно соответствует нормальному заверше-
нию программы .
Функция 4Eh - Поиск первого файла .Производит по-
иск в заданном каталоге первого файла, соответст-
вующего заданной маске и имеющего указанные атри-
буты .
Вызов : AH = 4Eh
CX = атрибуты файла ( могут комбиниро-
ваться ) :
1 - только читаемый ( read only )
2 - скрытый ( hidden )
4 - системный ( system )
8 - метка тома
20h - архивный ( archive )
DS : DX = адрес маски для поиска
Возврат : имя найденного файла и его расширение
записывается в DTA в байты 1Eh - 2Ah .За последним
символом расширения всегда следует точка : " . "
При ошибке :
CF = 1
AX = код ошибки .
Функция 4Fh - Поиск следующего файла .Почти всегда
используется в паре с предыдущей функцией и вызы-
вается после того, как был найден первый файл .
Вызов : AH = 4Fh
Возврат : имя найденного файла и его расширение
записывается в DTA в байты 1Eh - 2Ah .За последним
символом расширения всегда следует точка : " . "
При ошибке :
CF = 1
AX = код ошибки .
Мультиплексное прерывание INT 2Fh.Используется для
организации взаимодействия резидентных программ с
системой и друг с другом.Для программиста зарезер-
вированы функции : C0h - FFh .
Вызов : AH = 2Fh
AL = подфункция
Возврат : AL = 0 - программа не установлена и ее
можно установить
AL = 1 - программа не установлена и ее
нельзя установить
AL = 0FFh - программа уже установлена .
При ошибке :
CF = 1
AX = код ошибки .
--------------------------------------------------
Прерывание INT 13h, функция 02h - чтение сектора.
Считывает один или несколько определенных пользо-
вателем секторов физического диска в выделенный
буфер.Для начального сектора указываются такие ко-
ординаты : дорожка,сектор, головка .Секторы на до-
рожке нумеруются от единицы, дорожки и головки
нумеруются от нуля .
Вызов : AH = 02h
AL = количество читаемых секторов
CH = дорожка
CL = начальный сектор
DH = головка
DL = дисковод ( 00h - 07Fh - для дискет-
ного дисковода, 80h - 0FFh - для
" винчестера " .
ES : BX = адрес буфера, в который будет
читаться информация из
секторов
Возврат : CF = 0
AH = 0
AL = количество прочитанных секторов
При ошибке :
CF = 1
AH = байт состояния .
*
Биты регистра CX 5...0 определяют номер сектора,
а биты 15...6 - номер дорожки !!!
Это выглядит так :
____________________________________________
| Номер бита |15 |14 |13 |12 |11 |10 | 9 | 8 |
|------------|---|---|---|---|---|---|---|---|
| Содержимое | | | | | | | | |
| бита |c |c |c |c |c |c |c |c |
|____________|___|___|___|___|___|___|___|___|
____________________________________________
| Номер бита | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|------------|---|---|---|---|---|---|---|---|
| Содержимое | | | | | | | | |
| бита |C |c |S |s |s |s |s |s |
|____________|___|___|___|___|___|___|___|___|
Буква " C " или " c " означает, что бит при-
надлежит номеру дорожки;
Буква " S " или " s " означает, что бит при-
надлежит номеру сектора.
Таким образом, биты "7" и "6" являются старши-
ми битами номера дорожки, а биты "5" и "4" яв-
ляются старшими битами номера сектора.
Прерывание INT 13h, функция 03h - запись сектора.
Записывает один или несколько определенных пользо-
вателем секторов на физический диск .Для начально-
го сектора указываются такие координаты : дорожка,
сектор, головка .Секторы на дорожке нумеруются от
единицы, дорожки и головки нумеруются от нуля .
Вызов : AH = 03h
AL = количество записываемых секторов
CH = дорожка
CL = начальный сектор
DH = головка
DL = дисковод ( 00h - 07Fh - для дискет-
ного дисковода, 80h - 0FFh - для
" винчестера " .
ES : BX = адрес буфера,информация из ко-
торого будет записываться
в сектора
Возврат : CF = 0
AH = 0
AL = количество записанных секторов
При ошибке :
CF = 1
AH = байт состояния .
*
Биты регистра CX 5...0 определяют номер сектора,
а биты 15...6 - номер дорожки !!!
( см функцию 02h ).
Прерывание INT 13h, функция 08h - получение пара-
метров дисковода.
Вызов : AH = 08h
DL = дисковод ( 00h - 07Fh - для дискет-
ного дисковода, 80h - 0FFh - для
" винчестера " .
Возврат : AH = 0
BL = тип дисковода ( только AT и PS2 )
DL = количество накопителей, обслуживае-