Ну, в общем, вот так вроде заработало. Может пригодится кому.
.386
dseg segment use16
mass1 db 1,-20,30,40,-30,50,-40,100,-45,2
vect dd ?
dseg ends
eseg segment use16
mass2 db 10 dup(?)
eseg ends
cseg segment use16
assume ds:dseg, cs:cseg, es:eseg
;загрузка регистров-указателей сегмента ds
code: mov cx, dseg
mov ds, cx
mov cx, eseg
mov es, cx
;сохраним адрес обработчика прерываний
push es
mov ah,35h
mov al,69h
int 21h
mov word ptr ds:vect,bx ;Вначале младшее слово (смещение)
mov word ptr ds:vect+2,es ;Затем старшее (сегмент)
pop es
push ds
;изменение вектора
mov cx, cs
mov ds, cx
lea dx, cs:maspr
mov ah,25h
mov al,69h
int 21h
pop ds
;входные параметры процедуры
mov cx,10
lea si, ds:mass1
lea di, es:mass2
;вызовем резидентный обработчик прерывания
int 69h
;восстановим старый обработчик прерывания
mov dx,word ptr ds:vect
mov ds, word ptr ds:vect+2
mov ah, 25h
mov al,69h
int 21h
;завершение исполнения
mov ah, 4ch
int 21h
;объявление поцедуры
maspr proc
cycl: cmp byte ptr ds:[si], 0
jl m1
movsb
jmp m2
m1:inc si
m2:loop cycl
iret
maspr endp
cseg ends
end code