[自己动手写操作系统]的学习实践【第一章】

最近开始看这本书了,所以就写下自己看的随笔。希望大家共同探讨,对错误进行指正。再次特别感谢一下书的作者于渊大哥,算实我看过的很好的作品了。希望有兴趣的朋友好好研读,呵呵。

第一章 马上动手写一个最小的“操作系统”
本章讲述了一个简单非依赖操作系统的程序boot.asm,该代码如下:
代码1-1 /chapter1/a/boot.asm
-------------------------------------------------------------
   org 07c00h        ; 告诉编译器程序加载到7c00 处
   mov ax, cs
   mov ds, ax
   mov es, ax
   call DispStr      ; 调用显示字符串例程
   jmp $             ; 无限循环,实际为跳转到当前行$,反编译结果  9  EBFE   jmp short 0x9
DispStr:
   mov ax, BootMessage ; BootMessage 实际的地址随着你原先规定的地址会不一样的,我们这里是 07c1E
   mov bp, ax        ; es:bp = 串地址
   mov cx, 16        ; cx = 串长度
   mov ax, 01301h    ; ah = 13h, al = 01h, ah=13用于显示字符串;ES:BP=串地址;CX=串长度,DH,DL=起始行列,BH=页号,AL=1 BL=属性
   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(Linux上带有这个工具,我们在windows上已经安装了,手册见帮助文件) 编译一下:
    nasm boot.asm –o boot.bin
我们由此得到一个引导程序(512B)。我们的目标是把它写入磁盘的0磁道0扇区成为一个引导盘。我们下面介绍IMG镜像文件的读写方法。由于这种映象文件的数据可以看成是一种线性序列(数组)。数组的第一个单元也就是0磁道0扇区0单元,接下来是0磁道0扇区1单元……
所以我们实际编程就是产生一个文件,这个文件的大小是一张磁盘(1.44MB),文件的前512字节就是 boot.bin的内容。我们编制的文件是a.fla,然后装入linux就可以看到我们的程序运行的结果。
调试方法,可以将文件编译成为一个com文件,该文件可以直接在系统上运行。
nasm boot.asm –o boot.com
文件开始部分改写为
%ifdef _BOOT_DEBUG_
   org 0100h;
%else
   org 07c00h    ; 告诉编译器程序加载到7c00 处
%endif
对于编译成的com文件,我们可以看到其内存的映象与代码是一样的。两者的区别就在地址不一样,其它都一样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值