
;              DBG16_02.ASM - программа к Главе № 16

; (С) Авторские права на файлы-приложения принадлежат автору книги
; "Ассемблер? Это просто! Учимся программировать под MS-DOS"
; Автор: Калашников Олег Александрович (e-mail: Assembler@Kalashnikoff.ru)
;	 http://www.Kalashnikoff.ru

; --- Ассемблирование (получение *.com файла) ---
;При использовании MASM 6.11 - 6.13:
;ML.EXE dbg16_02.asm /AT

;При использовании TASM:
;TASM.EXE dbg16_02.asm
;TLINK.EXE dbg16_02.obj /t/x


;                   === Защита от отладчиков ===

; Способ второй:
;Сделать так, чтобы отладчик сам себя затер.

;Устанавливаем стек в область векторов прерываний, а точнее - на адрес
;03 прерывания.

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

Begin:
       cli
       mov sp,03h*4+2	;SP - смещение адреса 03 прерывания + 2
			;(стек растет снизу вверх)

       xor ax,ax
       mov ss,ax	;SS = 0
			;Теперь стек находится в области векторов прерываний
			;При помещении в стек числа, затирается адрес
			;03 прерывания, что "вешает" машину в отладчике

       nop		;<=== Отладчик "виснет" здесь!

       push cs		;Восстановим стек...
       pop ss
       mov sp,0FFFEh

       sti
       mov ah,9
       mov dx,offset Message
       int 21h

       ret

Message db 'DBG16_02.COM - порядок!$'

CSEG ends
end Begin