镜像还原--编写MBR主引导记录

镜像还原–编写MBR主引导记录

当按下主机的power键后,第一个运行的是BIOS。

BIOS的作用:检测初始化硬件,建立中断向量表(对一些实现调用,所有硬件需要在保护模式下实现)

实模式下1MB内存布局

在这里插入图片描述

BIOS如何启动

由于第一个运行的软件就是BOIS,它是由硬件加载。

在开机的一瞬间,cpu的CS:IP寄存器被去强制初始化为0xF000:0xFFF0。由于是实模式,段基址需要乘以16,这样0xF000:0xFFF0等效0xFFFF0。此地址就是BIOS的入口地址。

入口地址的内容:jmp far f000:e05b(这是BOIS真正开始的地方)

看上述表格,跳转到BIOS里面。

之后BOIS是检测内存显卡等外设,检测通过之后并初始化硬件,在内存中0x00-0x3ff处建立数据结构,中断向量表IVT并填写中断例程。

BOIS最后一项工作是检验启动盘位于0盘0道1扇区的内容。(此扇区末尾的两个字节分别为0x55和0xaa)(512字节)

如果后面是0x55、0xaa,则执行0x7c00的代码

mov ax,0xb800
mov ds,ax
mov byte ptr ds:0x0,0x48
//上述代码是将0x48赋值到0xb800:0x0000中,0x48对应H符号
jmp .-2
//一直死循环

hello.asm:

mov ax,3
int 0x10;将显示模式设置成文本模式,相当于清屏
mov ax,0xb800
mov ds,ax
mov byte[0],'H'
mov byte[1],11110000b

halt:
	jmp halt
times 510-($-$$) db 0
db 0x55,0xaa

times 123 db 0;表示填充123个字节0.

$表示当前地址

$$表示当前段地址

两者相减,再被510减就知道到底要填充多少0才会达到510个字节(从段地址开始)

最后两个字节填充0x55、0xaa(规定的)

上述hello.asm文件

mov byte[0],‘H’
mov byte[1],11110000b

奇数位是样式。

然后就可以书写输出hello,world的程序

mov ax,3
int 0x10;将显示模式设置成文本模式,相当于清屏
mov ax,0xb800
mov ds,ax
mov byte[0],'H'
mov byte[2],'e'
mov byte[4],'l'
mov byte[6],'l'
mov byte[8],'o'
mov byte[10],','
mov byte[12],'w'
mov byte[14],'o'
mov byte[16],'r'
mov byte[18],'l'
mov byte[20],'d'
halt:
	jmp halt
times 510-($-$$) db 0
db 0x55,0xaa

实现学习语言的第一步,输出hello,world

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值