硬盘主引导扇区代码

本文深入探讨硬盘的主引导扇区,解析其在启动计算机过程中的关键作用。内容包括主引导扇区的结构、作用原理,以及如何编写和修改主引导扇区代码。
摘要由CSDN通过智能技术生成
;文件说明:硬盘主引导扇区代码

core_base_address equ 0x00040000;常数,内核的起始内存地址
core_start_sector equ 0x00000001;常数,内核的起始逻辑扇区号
;初始化堆栈段和栈指针
mov ax,cs
mov ss,ax
mov sp,0x7c00

;计算GDT所在的逻辑段地址
mov eax,[cs:pgdt+0x7c00+0x02];GDT的32位物理地址
xor edx,edx
mov ebx,16
div ebx;分解成16位逻辑地址

mov ds,eax;让DS指向该段以进行操作0x07e0
mov ebx,edx;段内起始偏移地址0000

;跳过0#号描述符的槽位
;创建1#号描述符,这是一个数据段,对应0~4GB的线性地址空间
mov dword[ebx+0x08],0x0000ffff;基地址为0,段界限为0xFFFFF
mov dword[ebx+0x0c],0x00cf9200;粒度为4KB,存储器段描述符

;创建保护模式下初始化代码段描述符
mov dword[ebx+0x10],0x7c0001ff;基地址为0x00007c00,界限为0x1FF
mov dword[ebx+0x14],0x00409800;粒度为1个字节,代码段描述符

;建立保护模式下的堆栈段描述符
mov dword[ebx+0x18],0x7c00fffe;基地址为0x00007c00,界限为0xffffe
mov dword[ebx+0x14],0x00cf9600;粒度为4KB

;初始化描述符表寄存器GDTR
mov word[cs:pgdt+0x7c00],39;描述符表的界限(总字节大小-1)
lgdt [cs:pgdt+0x7c00];安装描述符符寄存器GDTR

in al,0x92
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值