Как программа может перезагрузить саму себя в ОЗУ?

Изучаю книгу «Assembler это просто» (Калашников). В книге написано «В главе 9 наша программа перезагружала сама себя (загружалась поверх своего кода) в оперативной памяти».

Не могу понять:

  1. Если программа перезагружает себя, то программа будет выполняться бесконечно?
  2. Как я понял, команда 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

Ответы (0 шт):