我是新手在线学习操作系统,其中提到了bootsect.s: https ://kernel.googlesource.com/pub/scm/linux/kernel/git/nico/archive/+/v0.99-pl8/ boot/bootsect.S 但是这段代码对我来说很奇怪:
mov ax,#BOOTSEG
mov ds,ax
mov ax,#INITSEG
mov es,ax
mov cx,#256
sub si,si
sub di,di
cld
rep
movsw
jmpi go,INITSEG
奇怪的部分是最后 3 行。根据我的理解,rep movsw
已经把代码本身移走了,所以当pc指向jumpi
并且计算机即将执行pc指向的代码时,应该会导致错误,因为代码jumpi go, INITSEG
已经被移走了。那么为什么这段代码仍然有效并且jumpi go, INITSEG
仍然可以找到并执行呢?