Из комментария ОП
... но компьютер указывает на начало раздела с #BOOTSEG, , где больше нет кода . Поэтому я думал, что Jumpi Go, INITSEG не будет выполняться.
Будьте уверены, код все еще там!
Так заполнялась память, когда BIOS загружал загрузочный сектор по линейному адресу 00007C00h:
00007C00 mov ax,#BOOTSEG ; 07C0h
00007C03 mov ds,ax
00007C05 mov ax,#INITSEG ; 9000h
00007C08 mov es,ax
00007C0A mov cx,#256
00007C0D sub si,si
00007C0F sub di,di
00007C11 cld
00007C12 rep movsw
00007C14 jmpi go,INITSEG ; Far jump (EAh, 19h, 00h, 00h, 90h)
00007C19 go:
После выполнения инструкции rep movsw
память на 00090000h будет содержать точную копию из 512 байтов, найденных в 00007C00h. Хотя автор этого кода заявил, что код удаляет сам по себе , это всего лишь вопрос речи. Это всегда дубликат, который создается. Исходные байты все еще там, если, конечно, не было перекрытия между 2 областями памяти в DS:SI
и ES:DI
, но здесь это не так.
Как следствие, указатель команды будет в 00007C14h и выполнит дальний переход (межсегментный) к линейному адресу 00090019h, где метка go .
С этого момента 512 байтов в 00007C00h можно игнорировать.