ОЗУ и резидентные програмки
Я с помощью следующей програмки записываю в ОЗУ 7-ки 32 штуки, смотрю до и после - записались в файле 54 - до, а в 55 - после - всё правильно:
.model small
.stack 100h
.code
start:
mov ax,dgroup
mov ds,ax
mov ax,3D02h
mov dx,offset file
int 21h
mov bx,ax
cycle:
mov si,0000h
xor cx,cx
dec cx
loopyy:
push cx
push ds
xor ax,ax
mov ds,ax
mov dl,byte ptr ds:[si]
pop ds
push bx
mov bx,offset buf
mov byte ptr ds:[bx],dl
pop bx
mov ax,4000h
mov dx,offset buf
xor cx,cx
inc cx
int 21h
inc si
pop cx
loop loopyy
mov ax,3E00h
int 21h
mov al,mi
test al,al
jnz eee
push ds
push bx
xor ax,ax
mov ds,ax
mov dx,7777h
mov bx,0500h
mov cx,0010h
change:
mov word ptr ds:[bx],dx
inc bx
inc bx
loop change
pop bx
pop ds
mov ax,3D02h
xor cx,cx
mov dx,offset file2
int 21h
mov bx,ax
inc mi
jmp cycle
eee:
mov ax,4C00h
int 21h
.data
file db "54.txt",0
file2 db "55.txt",0
buf db ?
mi db 0
end start
А затем с помощью аналогичной програмки проверяю содержимое ОЗУ и в файле 56 ничего нет! Почему?
Кто стёр из ОЗУ мои данные???
Может я в чём-то ошибаюсь???
Это просто подготовительный этап к написанию резидентной програмки! Я хочу узнать могу ли я вышеприведённым способом её туда "затолкать", а затем исполнять перехватывая, например, знаменитое 21-е DOS'кое прерывание, изменив значение вектора прерываний по адресу 0000h:0021*4h?
Если хотите проверить, то эти файлы я компилировал в Masm'е, как exe'шники, а потом ещё создавал 54, 55 и 56, так как тут нет проверки на отсутствие, чтобы не загромождать програмку!
Жду ответов! Спасибо, если поможете!
.model small
.stack 100h
.code
start:
mov ax,dgroup
mov ds,ax
mov ax,3D02h
mov dx,offset file
int 21h
mov bx,ax
mov si,0000h
xor cx,cx
dec cx
loopyy:
push cx
push ds
xor ax,ax
mov ds,ax
mov dl,byte ptr ds:[si]
pop ds
push bx
mov bx,offset buf
mov byte ptr ds:[bx],dl
pop bx
mov ax,4000h
mov dx,offset buf
xor cx,cx
inc cx
int 21h
inc si
pop cx
loop loopyy
mov ax,3E00h
int 21h
mov ax,4C00h
int 21h
.data
file db "56.txt",0
buf db ?
end start