b 0x7c00
c
到这里是加载的winiboot
boot: 0x7cb3
push ax | remember partition
addb al,#ONE | say which one
call putc
mov bx,#m_crlf
call puts
pop ax
movb ah,#partition | size of each partition
mulb ah | offset
mov si,#BUFFER+TABLE | point at partition table
add si,ax | point at partition entry
pushf | fake an int 0x13 仿冒磁盘调用
push cs
mov bx,#BOOTCODE
push bx
mov ax,#VECTOR | vector segment
mov es,ax
mov ax,#0x201 | read one sector //ah=02,读取磁盘,al=1读取1个扇区
seg es
movb dh,shead(si) | head
seg es
movb cl,ssector(si) | sector
seg es
movb ch,scylinder(si) | cylinder
movb dl,diskcode | disk
seg es
jmpi @DISK_VECTOR | read boot b 0x7ce7
INT 13H,AH=02H 读扇区说明:
调用此功能将从磁盘上把一个或更多的扇区内容读进存贮器。因为这是一个
低级功能,在一个操作中读取的全部扇区必须在同一条磁道上(磁头号和磁道号
相同)。BIOS不能自动地从一条磁道末尾切换到另一条磁道开始,因此用户必须
把跨多条磁道的读操作分为若干条单磁道读操作。
入口参数:
AH=02H 指明调用读扇区功能。
AL 置要读的扇区数目,不允许使用读磁道末端以外的数值,也不允许
使该寄存器为0。
DL 需要进行读操作的驱动器号。
DH 所读磁盘的磁头号。
CH 磁道号的低8位数。
CL 低5位放入所读起始扇区号,位7-6表示磁道号的高2位。
ES:BX 读出数据的缓冲区地址。
返回参数:
如果CF=1,AX中存放出错状态。读出后的数据在ES:BX区域依次排列。
c
到这里是加载的bootlace
b 0x7c85 readshoehorn
<bochs:26> b 0x7c85
<bochs:27> c
(0) Breakpoint 4, 0x7c85 in ?? ()
Next at t=75146066
(0) [0x00007c85] 07c0:0085 (unk. ctxt): push cs ; 0e
<bochs:28> u /30
00007c85: ( ): push cs ; 0e
00007c86: ( ): pop es ; 07
00007c87: ( ): mov bx, 0x1fe ; bbfe01
00007c8a: ( ): pop dx ; 5a
00007c8b: ( ): pop cx ; 59
00007c8c: ( ): inc cx ; 41
00007c8d: ( ): mov ah, 0x0 ; b400
00007c8f: ( ): int 0x13 ; cd13
00007c91: ( ): mov ax, 0x201 ; b80102
00007c94: ( ): int 0x13 ; cd13
00007c96: ( ): jb 0x7c8d ; 72f5
00007c98: ( ): mov ax, 0x1000 ; b80010
00007c9b: ( ): mul ax, word ptr [ds:0xae] ; f726ae00
00007c9f: ( ): mov [ds:0x7f0], ax ; a3f007
00007ca2: ( ): mov word ptr [ds:0x7f2], dx ; 8916f207
00007ca6: ( ): call 0x7e97 ; e8ee01
00007ca9: ( ): call 1000:0000 ; 9a00000010
0x7e87 _shoehorn 0x100000 shoelace
b 0x7ca6
b 0x7e97
b 0x7ca9