在linux0.11内核 中 bootsect.s里自搬移的代码,只移动256字(512字节),可是整个bootsect.s虽然不大,但也有10KB多,这个怎么理解,好像没有人这么问,为什么?
entry start !告诉链接程序,程序从标号start开始执行
start:
mov ax,#BOOTSEG !设置ds为0x07c0(段地址)
mov ds,ax
mov ax,#INITSEG !设置es为0x9000(段地址)
mov es,ax
mov cx,#256 !移动计数值256个字
sub si,si !源地址 ds:si = 0x07c0:0x0000
sub di,di !目的地址 es:di = 0x9000:0x0000
rep !重复执行并cx的值,直到cx = 0
movw !串传送指令,从[si]移动cx个字到[di]处。从start开始到这里,这段程序将bootsect从0x07c0复制到0x9000处
jmpi go,INITSEG !段间跳转,INITSEG 指跳转到的段地址, 标号go是段内偏移地址。