响应式门户网站,潍坊建设网站的公司电话,英文网站推广方法,正在建设中网站本章的思路是#xff0c;在本机上上写一段代码#xff08;这些代码的意义是往显存中写一些数据#xff09;--》编译成bin文件--》写入到vhd硬盘的引导扇区#xff08;即第一扇区#xff0c;见第四章详述#xff09;--》开机从硬盘启动#xff0c;从而执行了自己写的这段…本章的思路是在本机上上写一段代码这些代码的意义是往显存中写一些数据--》编译成bin文件--》写入到vhd硬盘的引导扇区即第一扇区见第四章详述--》开机从硬盘启动从而执行了自己写的这段代码。
重点是理解引导扇区的代码是如何被CPU执行的下面还会分析。
书中源码如下 ;注释必须以分号“;”开始, 在源程序编译阶段编译器将忽略所有注释;代码清单5-1 ;文件名c05_mbr.asm;文件说明硬盘主引导扇区代码;创建日期2011-3-31 21:15 ;功能: 标号 number 处的汇编地址是 0x012E302mov ax,0xb800 ;指向缓存的逻辑地址mov es,ax;以下显示字符串Label offset:mov byte [es:0x00],Lmov byte [es:0x01],0x07 ;颜色设置mov byte [es:0x02],amov byte [es:0x03],0x07mov byte [es:0x04],bmov byte [es:0x05],0x07mov byte [es:0x06],emov byte [es:0x07],0x07mov byte [es:0x08],lmov byte [es:0x09],0x07mov byte [es:0x0a], mov byte [es:0x0b],0x07mov byte [es:0x0c],omov byte [es:0x0d],0x07mov byte [es:0x0e],fmov byte [es:0x0f],0x07mov byte [es:0x10],fmov byte [es:0x11],0x07mov byte [es:0x12],smov byte [es:0x13],0x07mov byte [es:0x14],emov byte [es:0x15],0x07mov byte [es:0x16],tmov byte [es:0x17],0x07mov byte [es:0x18],:mov byte [es:0x19],0x07mov ax,number ;取得标号number的偏移地址mov bx,10;设置数据段的基地址mov cx,csmov ds,cx;求个位上的数字mov dx,0div bxmov [0x7c00number0x00],dl ;保存个位上的数字, dx存的是余数实际上是存在了dl上;求十位上的数字xor dx,dxdiv bxmov [0x7c00number0x01],dl ;保存十位上的数字;求百位上的数字xor dx,dxdiv bxmov [0x7c00number0x02],dl ;保存百位上的数字;求千位上的数字xor dx,dxdiv bxmov [0x7c00number0x03],dl ;保存千位上的数字;求万位上的数字 xor dx,dxdiv bxmov [0x7c00number0x04],dl ;保存万位上的数字;以下用十进制显示标号的偏移地址mov al,[0x7c00number0x04]add al,0x30mov [es:0x1a],almov byte [es:0x1b],0x04mov al,[0x7c00number0x03]add al,0x30mov [es:0x1c],almov byte [es:0x1d],0x04mov al,[0x7c00number0x02]add al,0x30mov [es:0x1e],almov byte [es:0x1f],0x04mov al,[0x7c00number0x01]add al,0x30mov [es:0x20],almov byte [es:0x21],0x04mov al,[0x7c00number0x00]add al,0x30mov [es:0x22],almov byte [es:0x23],0x04mov byte [es:0x24],Dmov byte [es:0x25],0x07infi: jmp near infi ;无限循环,否则cs:ip会指向102行而引起错误number db 0,0,0,0,0times 203 db 0db 0x55,0xaa实验结果 过程分析
1 处理器加电或者复位之后如果硬盘是首选的启动设备那么 ROM-BIOS将试图读取硬盘的 0 面 0 道1 扇区。传统上这就是主引导扇区Main Boot SectorMBR。 2 读取的主引导扇区数据有 512 字节 ROM-BIOS 程序将它加载到逻辑地址0x0000:0x7c00处也就是物理地址0x07c00 处然后判断它是否有效。 3 一个有效的主引导扇区其最后两字节应当是 0x55和 0xAA。ROM-BIOS 程序首先检测这两个标志如果主引导扇区有效 则以一个段间转移指令jmp 0x0000:0x7c00 跳到那里继续执行 此时csip0x0000:0x7c00。 4 执行自己写的代码具体见代码注释。