Назад | Начало урока | Вперед
Содержание

Глава 10

Введение в вирусологию. Обработчик прерываний.

10.1 Программа из прошлой главы
10.2 Вирус
10.2.1 Структура и принцип работы вируса
10.3 Резидент
10.3.1 Подробней о прерываниях
10.4 Первый обработчик прерывания
10.4.1 Новые операторы и функции прерываний
10.5 Работа с флагами процессора

Вверх

10.1 Программа из прошлой главы
В главе 9 наша программа перезагружала сама себя (загружалась поверх своего кода) в оперативной памяти. Мы не зря просили вас присвоить ей имя Prog09.asm. Если программа не найдет файл с данным именем, то она просто завершит работу, при этом издаст звуковой сигнал. Ничего сложного в ней нет. Эта программа наглядно показывает, что в ассемблере можно проделывать невероятные вещи, которые недоступны языкам высокого уровня.

Ниже приведен код программы с пояснениями ее работы.
;-------------------------------------
; Prog10.asm
;-------------------------------------

CSEG segment
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h

Begin:
mov dx,offset File_name
call Open_file ;Открываем файл
jc Error_file ;Ошибка?
; ------------- Открыли файл ----------------

mov bx,ax
mov ah,3Fh ;Функция чтения файла
mov cx,offset Finish-100h
mov dx,offset Begin ;! Адрес, куда будут читаться данные
int 21h
; ------------- Прочитали файл ----------------

call Close_file

; ------------ Выводим сообщение --------------
mov ah,9
mov dx,offset Mess_ok
int 21h
ret

; ---------- Не смогли найти / открыть файл -----------------
Error_file:
mov ah,2
mov dl,7
int 21h
ret

; === Процедуры (подпрограммы) ===

; --- Открытие файла ---
Open_file proc
cmp Handle,0FFFFh
jne Quit_open
mov ax,3D00h
int 21h
mov Handle,ax
ret
Quit_open:
stc
ret
Handle dw 0FFFFh
Open_file endp

; --- Закрытие файла ---
Close_file proc
mov ah,3Eh
mov bx,Handle
int 21h
ret
Close_file endp

; === Данные ===

File_name db 'prog09.com',0
Mess_ok db 'Все нормально!', 0Ah, 0Dh, '$'

Finish equ $ ;Метка конца программы

CSEG ends
end Begin


Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz