随笔 - 49  文章 - 0  评论 - 6  阅读 - 10万

操作系统学习笔记 005 引导扇区

 

引导扇区

BIOS运行完后,加载启动盘(BIOS里设置的)的MBR(主引导区)

512字节,以0xaa55作为结束标志,否则就认为是不可引导的

这段代码会加载到内存的07c00h位置,然后从这里开始执行

 

汇编代码

boot.asm

     org  07c00h             ; 告诉编译器程序加载到7c00处

     mov  ax, cs

     mov  ds, ax

     mov  es, ax

     call DispStr            ; 调用显示字符串例程

     jmp  $                  ; 无限循环

DispStr:

     mov  ax, BootMessage

     mov  bp, ax             ; ES:BP = 串地址

     mov  cx, 16             ; CX = 串长度

     mov  ax, 01301h         ; AH = 13,  AL = 01h

     mov  bx, 000ch          ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)

     mov  dl, 0

     int  10h                ; 10h 号中断

     ret

BootMessage:       db   "Hello, OS world!"

times    510-($-$$)    db   0    ; 填充剩下的空间,使生成的二进制代码恰好为512字节

dw   0xaa55                      ; 结束标志

 

编译运行

# nasm boot.asm -o boot.bin

# bximage                   ;按照提示生成一个1.44M的软盘镜像文件a.img

# dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc

# dd --help                 ;查看dd命令的帮助

把fdos-10meg/bochsrc.txt复制过来,删除其中ata的配置,添加:

floppya: 1_44=a.img, status=inserted

boot=floppy

# bochs

启动的虚拟机屏幕左上角有一个红色的Hello, OS world!

 

汇编基础

MOV指令

源\目标

通用寄存器

段寄存器

控制寄存器

调试寄存器

内存

立即数

Y

-

-

-

Y

通用寄存器

Y

Y

Y

Y

Y

段寄存器

Y

-

-

-

Y

控制寄存器

Y

-

-

-

-

调试寄存器

Y

-

-

-

-

内存

Y

Y

-

-

-

$           所在源代码行的地址

$$          当前段开始出的地址

$-$$        当前行所在当前段内的偏移

call        修改IP或同时修改CS+IP,相当于

push CS

push IP

jmp far/near ptr 标号

ret         用栈中的数据修改IP,实现近转移,相当于

pop IP

retf        用栈中的数据修改CS+IP,实现远转移,相当于

pop IP

pop CS

关于10h号中断,这个帖子写得很好:

http://blog.csdn.net/hua19880705/article/details/8125706

 

posted on   朱迎春  阅读(571)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示