| 比较详细的MBR的分析 |
 |
作者: 来源: 日期:2007-5-17 11:17:11 点击次数: |
|
0000:07A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0000:07B0 00 00 00 00 00 00 00 00-86 D8 00 00 00 00 80 01 ................ 0000:07C0 01 00 06 3F 3F FD 3F 00-00 00 41 A0 0F 00 00 00 ...??.?...A..... 0000:07D0 01 FE 05 3F FF FE 80 A0-0F 00 C0 4F 2F 00 00 00 ...?.......O/... 0000:07E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0000:07F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............U. ; ; 反汇编结果 ; ; 0000:7C00~0000:7C1A:初始化各个段寄存器、堆栈指针,最后将主引导记录在内存中搬家,腾出其所占内 ; 存空间以供装入分区引导记录。 0000:7C00 33C0 XOR AX,AX ;AX寄存器清0 0000:7C02 8ED0 MOV SS,AX ;SS=0 0000:7C04 BC007C MOV SP,7C00 ;装填栈指针——SS:SP=0000:7C00 0000:7C07 FB STI ;开中断(装填栈指针时为避免硬件中断引起栈混乱应关中断) 0000:7C08 50 PUSH AX ; 0000:7C09 07 POP ES ;装填附加数据段寄存器ES=0 0000:7C0A 50 PUSH AX ; 0000:7C0B 1F POP DS ;装填数据段寄存器DS=0 0000:7C0C FC CLD ;规定其后的串操作为正向串操作 0000:7C0D BE1B7C MOV SI,7C1B ;源指针 0000:7C10 BF1B06 MOV DI,061B ;目的指针 0000:7C13 50 PUSH AX ; 0000:7C14 57 PUSH DI ;看看0000:7C1A——构造一个跳转 0000:7C15 B9E501 MOV CX,01E5 ; 0000:7C18 F3 REPZ ; 0000:7C19 A4 MOVSB ;0000:7C1B起始的CX字节传送至0000:061B起始的区域 0000:7C1A CB RETF ;跳转到0000:061B(这是一种技巧跳转) ; ; 为直观起见,下面的地址按实际运行时的地址给出。 ; 0000:061B~0000:062B:对分区表进行初步检验,一旦检测到某分区表项状态字节大于等于80h,就通过(当 ; 然,在此之前如果检测到某项分区表的状态字节小于80h,就转错误处理。当然,如果四个分区项的状态字节 ; 都为零,主引导记录就会调用BIOS-ROM的INT 18h,显示"PRESS A KEY TO REBOOT"信息等待你的操作。 0000:061B BEBE07 MOV SI,07BE ;SI指向第一个分区表项,这时CX=0 0000:061E B104 MOV CL,04 ;分区表共四个表项 上一篇:扩展int13h调用详解(修正) 下一篇:自己编程实现多引导 |
|
|
 |
| 北京总部: 4006-505-808 |
| 上 海 部: 021-58358765 |
| 深 圳 部: 0755-83692929 |
| 浙 江 部: 13666673722 |
| 广 州 部: 020-83821091 |
| 重 庆 部: 023-86870422 |
| 昆 明 部: 15987117834 |
| 哈尔滨部: 13946167430 |
| 其它地区: 4006-505-808 | | | |
|
 |
|