您的位置:首页 > 编程语言

《30天自制操作系统》1.初体验汇编程序

2014-09-09 21:14 204 查看
我们这次使用的汇编语言编译器是原书作者自己开发的,名为“nask”,很多语法和著名的汇编语言编译器nasm很像。由于原书作者没有给出有哪些不同,这里就无法给出不同了!
现在仅仅使用汇编语言中的DB指令来写个“操作系统”吧。
DB指令是"define byte"的缩写,往文件里写入1个字节

超长的源代码

;hello-os

;以下这段是标准FAT12格式软盘专用的代码

DB          0xeb, 0x4e, 0x90
DB          "HELLOIPL"          ; 启动区的名称,8字节大小
DW          512                    ; 每个扇区大小,必须为512字节
DB          1                    ; 簇(cluster)的大小,必须为1扇区
DW          1                    ; FAT的起始位置(一般从第1个扇区开始)
DB          2                    ; FAT的个数(必须为2)
DW          224                    ; 根目录的大小(一般设成224项)
DW          2880               ; 该磁盘的大小(必须是2880扇区)
DB          0xf0               ; 磁盘的种类(必须是0xf0)
DW          9                    ; FAT的长度(必须是9扇区)
DW          18                    ; 1个磁道(track)有几个扇区(必须是18)
DW          2                    ; 磁头数(必须是2)
DD          0                    ;不使用分区,必须是0
DD          2880               ; 重写一次磁盘大小
DB          0,0,0x29          ; 意义不明,固定
DD          0xffffffff          ; 可能是卷标号码
DB          "HELLO-OS   "     ; 磁盘的名称(11字节)
DB          "FAT12   "          ; 磁盘格式名称(8字节)
RESB     18                    ;空出18字节
; 程序主体
DB          0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
DB          0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
DB          0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
DB          0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
DB          0xee, 0xf4, 0xeb, 0xfd
; 信息显示部分呢
DB          0x0a, 0x0a          ; 2个换行
DB          "hello, world"
DB          0x0a               ; 换行
DB          0
RESB     0x1fe-$               ; 填充0x00数据,直到0x001fe
DB          0x55, 0xaa
; 以下是启动器以外部分的输出
DB          0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB     4600
DB          0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB     1469432


View Code

上面的源代码中,;是注释的意思,如果nask看到“;”字符后面的文字不会解析的,供程序员查阅
DW指令是"default word"的缩写,每一次可以写入一个word(2字节)长的内容,因为在计算机汇编的语言世界里,word指的是16位的意思,也就是2字节
DW指令是"default double-word"的缩写,每一次可以写入一个双word(4字节)长的内容
RESB 0x1fe-$,$是一个全局变量,保存了上面的代码已经填充了多少个字节 。为了保证执行到这一行代码,一级有0x1fe个字节填充了相应的数据。
为什么是0x1fe呢?因为计算机首先从第一个扇区(512字节=0x200)开始读取数据,如果该扇区最后两个字节为0x55 0xAA ,则认为该扇区有启动程序。你会看到后面紧接着DB 0x55 ,0xaa.
正好0x1fe + 2 = 0x200 = 512字节

运行结果就不贴截图了

注:本文的大部分内容来自《30天自制操作系统这本书》,只是将一些内容和自己理解的部分记录下来,难免会出现错误,君请谅解!
原文地址:/article/5744027.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: