您的位置:首页 > 其它

汇编学习(十五)X86汇编学习 (2)MBR为例

2016-06-05 22:14 549 查看
我们从《汇编语言》的坑爬出来,又进入到了《实模式到保护模式》的坑中。

MBR  : 计算机开机加电自检之后,BIOS 就就尝试读取0面0道1扇区的内容,传统上就是主引导扇区MBR共512B 以0x55 和 0xAA结尾。

然后将启动代码加载到逻辑地址:0x0000:0x7c00 处就是0x07c00处。

代码如下:
mov ax,0xb800                 ;指向文本模式的显示缓冲区
mov es,ax

;以下显示字符串"Label offset:"
mov byte [es:0x00],'L'
mov byte [es:0x01],0x07
mov byte [es:0x02],'a'
mov byte [es:0x03],0x07
mov byte [es:0x04],'b'
mov byte [es:0x05],0x07
mov byte [es:0x06],'e'
mov byte [es:0x07],0x07
mov byte [es:0x08],'l'
mov byte [es:0x09],0x07
mov byte [es:0x0a],' '
mov byte [es:0x0b],0x07
mov byte [es:0x0c],"o"
mov byte [es:0x0d],0x07
mov byte [es:0x0e],'f'
mov byte [es:0x0f],0x07
mov byte [es:0x10],'f'
mov byte [es:0x11],0x07
mov byte [es:0x12],'s'
mov byte [es:0x13],0x07
mov byte [es:0x14],'e'
mov byte [es:0x15],0x07
mov byte [es:0x16],'t'
mov byte [es:0x17],0x07
mov byte [es:0x18],':'
mov byte [es:0x19],0x07

mov ax,number                 ;取得标号number的偏移地址
mov bx,10

;设置数据段的基地址
mov cx,cs
mov ds,cx

;求个位上的数字
mov dx,0
div bx
mov [0x7c00+number+0x00],dl   ;保存个位上的数字

;求十位上的数字
xor dx,dx
div bx
mov [0x7c00+number+0x01],dl   ;保存十位上的数字

;求百位上的数字
xor dx,dx
div bx
mov [0x7c00+number+0x02],dl   ;保存百位上的数字

;求千位上的数字
xor dx,dx
div bx
mov [0x7c00+number+0x03],dl   ;保存千位上的数字

;求万位上的数字
xor dx,dx
div bx
mov [0x7c00+number+0x04],dl   ;保存万位上的数字

;以下用十进制显示标号的偏移地址
mov al,[0x7c00+number+0x04]
add al,0x30
mov [es:0x1a],al
mov byte [es:0x1b],0x04

mov al,[0x7c00+number+0x03]
add al,0x30
mov [es:0x1c],al
mov byte [es:0x1d],0x04

mov al,[0x7c00+number+0x02]
add al,0x30
mov [es:0x1e],al
mov byte [es:0x1f],0x04

mov al,[0x7c00+number+0x01]
add al,0x30
mov [es:0x20],al
mov byte [es:0x21],0x04

mov al,[0x7c00+number+0x00]
add al,0x30
mov [es:0x22],al
mov byte [es:0x23],0x04

mov byte [es:0x24],'D'
mov byte [es:0x25],0x07

infi: jmp near infi                 ;无限循环

number db 0,0,0,0,0

times 203 db 0
db 0x55,0xaa

我们创建一个硬盘,并将代码写进取:
nasm mbr.asm

qemu-img  create -f qcow disk.img 128M

dd if=mbr of=./disk.img

qemu disk.img





这段引导的MBR 的代码就完成了。

查看原文:http://zmrlinux.com/2016/06/05/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%ef%bc%88%e5%8d%81%e4%ba%94%ef%bc%89x86%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0-2mbr%e4%b8%ba%e4%be%8b/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: