汇编网首页登录博客注册
zdpopup的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
  •  十年磨一剑,我就不信不能学下去.
  • 『姓名』:达达
  • 『性别』:男『发送消息
  • 个人说明:从09年开始到2020年前,我一定一直深入写下去.
    只要每天多一点2020年再回首,不信不能提高到一个水平
  • 详细信息『加为好友』
学习动态
友情链接

[2009-07-28 18:00] 推荐博文 我自己写的双启动详细实现(代码+注解)

A)=========安装双系统:(用Virtual PC)============
步骤: 
1先装1个系统 
2 把D盘转为主(PQ中设),同时把这个设为主(我是在FDSIK下设的D为A主,在DOS下显示时C:就是显的原来D盘了) 
3 安装第2个系统 
4 运行自己写的代码 

B)============代码写的步骤============ 
1,先把原系统中MBR,复制到不用扇区  
2,再写在写MBR时(注意后4个字节.)选择并跳出 0:7C00送行.好在选择完成后重载原来MBR  
3,对于重载的原来MBR 对要启的分区表 头设80H,其它设0.一份在1BE 80H 1CE 0H, 一份在1BE 0H 1CE 80H 
4,重启原MBR,根据选择加入80H不同的备份扇。重回0:7C00  

C)============代码及解说:============
CODES SEGMENT
    ASSUME CS:CODES
;--------安装在扇区的程序,即自己实际运行MBR内容
    org 600h;因为要重载引导区,防被盖和便于转出7C00后能正常读取数据
SETUP_START:
  mov ax,0
  mov ds,ax
  mov es,ax
  mov si,7c00h   
  mov di,0600h   
  mov cx,offset SETUP_END-offset SETUP_START
  cld   
  rep movsb  ;将本程序内容从 7C00H 转到 600H
  mov bx,offset SETUP_BEGIN
  jmp bx          ;跳转到复制后到600H后的
  msg1 db 'welcome'
SETUP_BEGIN:
    mov bp,offset msg1
        mov cx,7
        mov dx,0
        mov bx,0fh
        mov al,0
        mov ah,13h
        int 10h ;显示提示          

SETUP_LOOP:
    mov ah,0
    int 16h
    mov ah,0ah
    mov bh,0
    mov cx,1
    int 10h
    cmp al,'0'
    je p0
    cmp al,'1'
    je p1
    cmp al,'2'
    je p2
                               ;3,4分区和1,2格式基本一样,可能很少用哪么多种系统吧,反正我只用2个
    jmp SETUP_LOOP ;读取键盘 如果是0 转到原MBR 1转到 1分区为主 2转到2为主
                               ;如果不是0,1,2则回到SETUP_LOOP 继续读键盘
   p0:                            ;读取原MBR
  mov   bx,7c00h   
  mov   ah,02h   
  mov   al,01h   
  mov   ch,0h   
  mov   cl,3h   
  mov   dh,0h   
  mov   dl,80h  
  int   13h   
   jmp   bx
    
  p1:                           ;读取1分区为主扇区入7C00H,即1BE处为80H的分区,要把基它处设为0
  mov   bx,7c00h   ;其它是指的这里的内容 7dbeh  7dceh 7ddeh 7deeh
  mov   ah,02h   
  mov   al,01h   
  mov   ch,0h   
  mov   cl,4h   
  mov   dh,0h   
  mov   dl,80h  
  int   13h   
  jmp   bx
  p2:                            ;和P1基本一样
  mov   bx,7c00h   
  mov   ah,02h   
  mov   al,01h   
  mov   ch,0h   
  mov   cl,5h   
  mov   dh,0h   
  mov   dl,80h  
  int   13h  
  jmp   bx
         
SETUP_END:
;--------安装程序-------------
        myFan db 512 dup(?);空出1扇 200H 即512 DB来转MBR内容
START:
     ;**********************************   
          ;移动引导分区   
          mov ax,cs
          mov ds,ax
          mov es,ax   
          mov bx,offset myFan   ;设定ES 和 BX为读写扇区用
            
          mov ah,02h   
          mov al,01h   
          mov ch,0h   
          mov cl,1h   
          mov dh,0h   
          mov dl,80h   
          int 13h                                ;读原来的MBR                           
            
          mov ah,03h   
          mov al,01h   
          mov ch,0h   
          mov cl,3h   
          mov dh,0h   
          mov dl,80h   
          int 13h                                ;原MBR写到03H处    
 
      mov si,offset SETUP_START 
      mov di,offset myFan
      mov cx,offset SETUP_END-offset SETUP_START 
      cld   
      rep   movsb     ;复制自己将写在MBR数据到自己定义的空间myFan中
    
          mov   bx,offset myFan   
      
      mov   ah,03h   
          mov   al,01h   
          mov   ch,0h   
          mov   cl,1h   
          mov   dh,0h   
          mov   dl,80h   
          int   13h   ;在MBR处写自定义的内容
          ;;---------修改1扇区为主引导
          mov ax,cs
          mov ds,ax
          mov es,ax
          mov bx,offset myFan 
          mov ah,02h   
          mov al,01h   
          mov ch,0h   
          mov cl,3h   
          mov dh,0h   
          mov dl,80h   
          int 13h  ;又和读次存入扇区3处的原MBR
          
          mov di,1beh
            mov myFan[di],80h
          mov di,1ceh
            mov myFan[di],0h
          mov di,1deh
            mov myFan[di],0h
            mov di,1eeh           ;这是设1分区为80H其它为0
            mov myFan[di],0h ;设置数据;7dbeh  7dceh 7ddeh 7deeh 1个为80H 其它为0
                                               
          mov ah,03h   
          mov al,01h   
          mov ch,0h   
          mov cl,4h   
          mov dh,0h   
          mov dl,80h   
          int 13h           ;引导1分区写在4中
          ;;---------修改2扇区为主引导同上
          mov ax,cs
          mov ds,ax
          mov es,ax
          mov bx,offset myFan 
          mov ah,02h   
          mov al,01h   
          mov ch,0h   
          mov cl,3h   
          mov dh,0h   
          mov dl,80h   
          int 13h
          
          mov di,1beh
            mov myFan[di],0h
          mov di,1ceh
            mov myFan[di],80h
          mov di,1deh
            mov myFan[di],0h
          mov di,1eeh
            mov myFan[di],0h
            
          mov ah,03h   
          mov al,01h   
          mov ch,0h   
          mov cl,5h   
          mov dh,0h   
          mov dl,80h   
          int 13h
        ;------安装程序结束        
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

D)============王爽汇编书外必需被充的内容:============
     1、硬盘的主引导扇区(隐含扇区)   
    
          该扇区主要由两个部分组成:主引导程序和分区信息表。分配如下表:   
    
  地址偏移硬盘0道(柱)、0头、1扇区   
    
  0000H―――主引导记录及一些数字0   
    
  01BEH―――第一分区表(16字节)   
    
  01CEH―――第二分区表(16字节)   
    
  01DEH―――第三分区表(16字节)   
    
  0IEEH―――第四分区表(16字节)   
    
  01FEH__55H   
    
  01FFH―――AAH   
    
          硬盘主引导扇区内容由FDISK.COM创建。整个硬盘空间最多划分为4个分区,可提供4个操作系统共享,每个操作系统占一个分区,如整个硬盘只提供一个操作系统使用,则其它三个分区的长度即所占扇区数为0。在IBM-PC、长城系列及其兼容机上,可通过FDISK.COM来指定各分区的大小和起止的柱面号、扇区号等;分区信息表就是用来保存这些分区信息的。分区信息表由4项组成,每项占16个字节。每一分区信息的各字节内容如下述(第几分区表)(16字节) :   
    
  第1字节:为引导标志。如该字节内容为0,表示系统加电或复位自检时,不从这个分区引导操作系统。如果该字节值为80H,则表示系统加电冷启动或热启动时,从这个分区中引导操作系统。在系统冷、热启动时,引导过程会检查分区信息表所有4项中的这个引导标志。DOS的FDISK.COM命令可以置某分区中这个字节值为80H,而置其余分区的这个字节值为0。   
    
  第2字节:为本分区起始磁头号。面   
    
  第3字节:为本分区起始的扇区号。在这个字节中只有低6位是表示扇区号,而高2位则表示起始柱面号的最高2位。   
    
  第4字节:为本分区起始的柱面号。 道  
    
  第5字节:为本分区操作系统代码。DOS3.0以下版本,该字节值为01,3.0以上版本该字节值为04,5.0以上版本为06等,当该字节值为   
                  02、03时,则表示该分区的操作系统为XENIX。该字节值为63,表示该分区的操作系统为NIX。该字节值为65,表示该分区的   
                  操作系统为NetWare。   
    
  第6字节:本分区结束的磁头号。   
    
  第7字节:本分区结束扇区号。其中高2位表示结束柱面号的高2位。   
    
  第8字节:本分区结束柱面号。   
    
  第9-12字节:在本分区之前已经使用掉的扇区数。   
    
  第13-16字节:本分区所使用的扇区数。   
    
          硬盘的主引导程序在硬盘的第一扇区中,它是各操作系统的共同部分。它的作用就是查看分区信息表中的4个分区引导标志,当某一分区的引导标志为80H时,主引导程序就把这一分区的第一个扇区(逻辑0扇区)读到内存0000:7C00H处,并从那儿开始执行。主引导程序是属于隐含扇区的,只能用以下两种方法进行读写操作:   

  
E)============还要注意的和我想为个精============
  还要了解CMOS下 
  INT 10H 用于显示我的们字符,INT 13H用于读写扇区 ,
  int 16h 用于得到键盘的输入
  如果差Virtual PC 或DOStx系统镜像加我QQ群90067703
评论次数(18)  |  浏览次数(5412)  |  类型(汇编作业) |  收藏此文  | 

[  mywiil   发表于  2009-07-29 10:28  ]

好啊,收藏了。
支持博主!

[  crazyman   发表于  2009-07-29 10:44  ]

确实值得一顶!~

[  游客   发表于  2009-07-29 13:20  ]

支持!

[  tangqc13   发表于  2009-07-31 00:11  ]

收藏。。

[  游客   发表于  2009-08-11 13:48  ]

very good

[  ming3477576   发表于  2009-09-24 15:25  ]

支持!

[  yangqingxiaogu   发表于  2009-12-09 16:58  ]

太牛B了 服了   我也要好好学习啊

[  feng_bird2010   发表于  2010-03-18 21:24  ]

牛B

[  qixiluopan   发表于  2010-03-23 12:20  ]

我才刚开始学呢     有空教教啊

[  游客   发表于  2010-04-06 16:18  ]

牛人呀

[  xixihaha   发表于  2010-04-21 22:30  ]

膜拜lz

[  qiou_fong   发表于  2010-07-12 17:35  ]

牛人。牛人。牛人。。。

[  liohao   发表于  2010-09-27 16:53  ]

写MBR呀  我怕把硬盘给整坏了
支持高手

[  wzp1990   发表于  2010-10-11 15:51  ]

顶!!!

[  matraxa   发表于  2010-10-20 19:32  ]

顶!顶!顶!!!

[  77919588410   发表于  2012-10-22 22:00  ]

顶起...

[  游客   发表于  2013-10-19 22:00  ]

支持高手!!

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码