Как программа может перезагрузить саму себя в ОЗУ?
Изучаю книгу «Assembler это просто» (Калашников). В книге написано «В главе 9 наша программа перезагружала сама себя (загружалась поверх своего кода) в оперативной памяти».
Не могу понять:
- Если программа перезагружает себя, то программа будет выполняться бесконечно?
- Как я понял, команда
int 21h(после командыmov dx, offset Begin) читает файл в память начиная с меткиBegin. Получается, после выполнение этой команды процессор не выполнит следующие заint 21hкоманды (например, отображение сообщение Mess_ok)?
p.s. Программа сохранена как Prog09.asm
CSEG segment
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h
; -------------- Начало -------------
Begin:
mov dx,offset File_name
call Open_file
jc Error_file
; -------------- Открыли файл -----------
mov bx,ax
mov ah,3Fh
mov cx,offset Finish-100h
mov dx,offset Begin
int 21h
; ------------- Прочитали файл ----------------
call Close_file
; ------------ Выводим сообщение -------------- mov ah,9
mov dx,offset Mess_ok
int 21h
ret
; ---------- Не смогли найти файл -----------------
Error_file:
mov ah,2
mov dl,7
int 21h
ret
; Процедуры
; --- Открытие файла --- Open_file proc
cmp Handle,0FFFFh
jne Quit_open
mov ax,3D00h
int 21h
mov Handle,ax
ret Quit_open:
stc
ret
Handle dw 0FFFFh
Open_file endp
; --- Закрытие файла ---
Close_file proc
mov ah,3Eh
mov bx,Handle
int 21h
ret
Close_file endp
; Данные
File_name db 'Prog09.com',0
Mess_ok db 'Все нормально!', 0Ah, 0Dh, '$'
Finish equ $
CSEG ends end Begin