mov si, dx ;DS:SI - адрес имени создаваемого файла
les di,TestName ;загрузка ES:DI адресом строки с тестовым именем
mov cx,TestNameLen ;длина тестового имени с завершающим нулем
repe cmpsb ;сравниваем, пока равно
je Equal ;делаем выводы
NotEqual:
MOV AX,353Ch
Int 3C - FLOATING POINT EMULATION - INSTRUCTIONS WITH SEGMENT OVERRIDE
model tiny
.code
.186
org 100h
begin:
mov ah,3ch
xor cx,cx
mov dx,offset myName
int 21h
jc isStop
mov bx,ax
mov ah,3eh
int 21h
xor ax,ax
int 16h
ret
isStop:
mov ah,9
mov dx,offset myName
int 21h
xor ax,ax
int 16h
ret
myName db 'error.fil',0,'$'
end begin
model tiny
.code
.186
org 100h
begin:
jmp init
;данные о старом векторе
old_vec21 label dword
old_21o dw ?
old_21s dw ?
;контролируемая строка
check_name db 'check.txt',0
;наш обработчик
new_vec21:
cmp ah,3Ch
je isInterupt
jmp notInt
;наша функция
isInterupt:
pusha
push SI
push DI
push CX
mov si,DX
mov di,offset check_name
mov cx,9
repe cmpsb
jne notintf
Equal:
STC
mov ax,5
pop CX
pop DI
pop SI
popa
jmp exit1
notint:
jmp cs:old_vec21
notintf:
pop CX
pop DI
pop SI
popa
jmp cs:old_vec21
exit1:
iret
;инициализация
init: mov ax,3521h
int 21h
;запоминаем старый вектор
mov old_21o,bx
mov old_21s,es
;контролируем присутсвие
mov cx,9h
mov si,107h
mov di,107h
repe cmpsb
or cx,cx
jz isStop
;сообщение о начале работы
isGo: mov ah,9
mov dx,offset dbMessageGo
int 21h
;ставим свой вектор
mov ax,2521h
mov dx,offset new_vec21
int 21h
;выходим
mov dx,offset init
int 27h
dbMessageGo db 'interupt set up$'
dbMessageNo db 'Im here$'
сообщаем о повторе
isStop: mov ah,9
mov dx,offset dbMessageNo
int 21h
xor ax,ax
int 16h
ret
end begin
mov si,DX
mov di,offset check_name
mov cx,9
repe cmpsb
(Лысков Игорь Витальевич, у вас в строке кода les di,TestName мне кажеться ошибка, кроме как оператора lea мне больше не чего не вспомнилось)
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.