|
248行和附近
- /* begin characteristics distinguish this sector from others */
- .byte 0x8E, 0xDB //movw %bx, %ds
- .byte 0x68, 0xE0, 0x07 //pushw $0x07E0
- .byte 0x07 //popw %es /* ES=0x07E0 */
- //cmpl $0xCE1A02B0, (wee63_signature - _start1 + 4 + STAGE2_SIZE - 4)
- .byte 0x66, 0x81, 0x3E //cmpl
- .word (wee63_signature - _start1 + STAGE2_SIZE)
- //this word is a pointer to the bootlace
- //signature near the end of pre_stage2
- //this word varies according to STAGE2_SIZE.
- .byte 0xB0, 0x02, 0x1A, 0xCE //this is the bootlace signature.
- //it should also appear at near the end
- //of pre_stage2
- /* end characteristics distinguish this sector from others */
复制代码
375行和附近- movb $0x80, %dl /* try hard drive first */
- 1:
- xorl %eax, %eax
- pushaw
- pushl %eax
- pushl %eax
- pushw %es
- pushw %ax
- pushw $127 //$63
- pushw $0x10
- movw %sp, %si /* DS:SI=SS:SP=disk address packet */
- movw $0x4200, %ax
- call int13
- popaw
- popaw
- /* compare the sector to the MBR, ignoring BPB */
- movw $0x5A, %si
- movw %si, %di
- movw $((0x200 - 0x5A) / 2), %cx
- cs repz cmpsw
- je 1f
- testb %dl, %dl /* floppy tried? */
- je Error_or_prev_MBR /* yes. fail */
- movb $0, %dl /* then try floppy */
- jmp 1b
- 1:
- movw %es, %bx
- addw $((wee63_signature - _start1 + 4 + STAGE2_SIZE - 4) >> 4), %bx
- movw %bx, %ds
- cmpl $0xCE1A02B0, ((STAGE2_SIZE - 4) & 0x0F)
- jne Error_or_prev_MBR /* Missing helper */
- 2:
- ljmp $0, $0x8200
复制代码
|
|