Доклад: Маскировка вирусов
.Записываем в строку qw символ "L" и выходим из подпрограммы
mov byte ptr ds: [off set qw+2],"L"
ret
set_protected_mode ENDP
Подпрограмма, возвращающая процессор в реальный режим
set_real_mode PROC
[Сохраняем значение регистра SP для реального режима
mov real_sp,sp
.Выполняем CPU Reset (рестарт процессора)
mov al,SHUT_DOWN
out STATUS_PORT,al
;Ждем, пока процессор перезапустится
wait_reset:
hit
jmp wait_reset
;C этого места программа выполняется после перезапуска процессора
shutdown_return:
;Устанавливаем регистр DS в соответствии с регистром CS
push cs
pop ds
восстанавливаем указатели на стек
;по ранее сохраненным значениям
mov ss,real_ss
mov sp,real_sp
[Закрываем адресную линию А20
call disable_a20
.Разрешаем немаскируемые прерывания
mov ax.OOOdh
out CMOS_PORT,al
[Разрешаем маскируемые прерывания
in al,INT-MASK_PORT
and al,0
out INT_MASK_PORT,al
sti
ret
set_real_mode EN DP
[Процедура, открывающая адресную линию А20. После открытия
[адресной линии программам будет доступна память свыше 1Мбайт
enable_a20 PROC
mov al,A20_PORT
out STATUS_PORT,al
mov al,A20_ON
out KBD_PORT_A.al
ret
enable_a20 ENDP