博客网址:www.shicoder.top
微信:18223081347
欢迎加群聊天 :452380935
这次对上次的boot.asm进行代码讲解,也可以对汇编的相关理论进行补充
主引导扇区位于硬盘的0柱面0磁头1扇区处,首先BIOS加电后,就会将主引导程序加载进来,然后执行
我们先看下boot.asm中有啥把
[org 0x7c00]
; 设置屏幕模式为文本模式,清除屏幕
mov ax, 3
int 0x10
; 初始化段寄存器
mov ax, 0
mov ds, ax
mov es, ax
mov ss, ax
mov sp, 0x7c00
; 0xb8000 文本显示器的内存区域
mov ax, 0xb800
mov ds, ax
mov byte [0], 'H'
; 阻塞
jmp $
; 填充 0
times 510 - ($ - $$) db 0
; 主引导扇区的最后两个字节必须是 0x55 0xaa
; dw 0xaa55
db 0x55, 0xaa
- 0x7c00
因为bios在上电之后,会去将boot主引导程序加载到0x7c00,然后利用一个跳转,跳到0x7c00处执行,因此我们需要将boot.asm代码放在0x7c00处,org便是这个功能
- 设置屏幕为文本模式
mov ax, 3
int 0x10
int 0x10为bios中断服务,给定不同的ax,会进行不同的调用程序,下表给出ax=3时候的程序
AL 文字/图形 分表率 颜色 00 文字 4025 2 01 文字 4025 16 02 文字 8025 2 03 文字 8025 16 04 图形 320320 2 05 图形 320320 4 06 图形 640*200 2
- 初始化段寄存器
因为不能使用 mov ds,0
这种,因此借助 ax
进行初始化
- 显示文本
由于BIOS加载之后,还是实模式,为了在这个模式下显示文本,我们需要知道要在哪个内存区域进行显示,下面给出实模式下的内存区域
起始地址 结束地址 大小 用途
1KB 中断向量表
256B BIOS 数据区
29.75 KB 可用区域
512B MBR 加载区域
607.6KB 可用区域
1KB 扩展 BIOS 数据区
64KB 用于彩色显示适配器
32KB 用于黑白显示适配器
32KB 用于文本显示适配器
32KB 显示适配器 BIOS
160KB 映射内存
64KB-16B 系统 BIOS
16B 系统 BIOS 入口地址
可以看出在0xb8000处可以显示文本,因此
mov ax, 0xb800
mov ds, ax
mov byte [0], 'H'
相当于是 move byte ds:[0], 'H'
实模式下寻址方式为
( 16 位段基址 << 4 ) + 16 位偏移地址
ds << 4 + 0 = 0xb8000
- 0x55aa
若一段程序结束的魔数为0x55aa,BIOS才会认为是合格的主引导程序
注意,在汇编代码中,若定义一个数字 ,左边是高位
比如 dw 0xaa55,则编译之后,aa在高位Original: https://www.cnblogs.com/shilinkun/p/16230050.html
Author: 小坤学习园
Title: 操作系统实现-简单热身
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/607191/
转载文章受原作者版权保护。转载请注明原作者出处!