双启动详细实现(代码+注解) 转载于汇编网

我自己写的双启动详细实现(代码+注解) 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 用于得到键盘的输入
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值