想要自己实现一个操作系统的初步就是不依赖任何的软件运行自己的代码.. 那么这个是初步..
这个代码实现的逻辑也很简单就是调用10h号中断显示一个字符串, BIOS的中断可以使用. 但是Dos的功能调用那是不行的..
代码也比较好理解, 主要是用绝对扇区读写工具, 把自己编译的Com文件写到软盘镜像里面.. 有点繁琐. 不过搞定一次. 以后就轻车熟路.. 简单.
这个代码是编译成Dos下的COM文件, 用的是MASM9.0的编译器. 从VS2008里面自己COPY出来的, 传说MASM10也出来了, 在VS2010里面. 回头搞一个试试,, 没有必要还坚持在MASM5那么原始的编译器上. MASM9 和MASM10一样是可以写Dos的程序, 和Windows的程序, 只要连接器选择对就OK了. DOS下的连接器也没有必要用太低版本的5.xxx版本的也可以链接成DOS程序的, Windows的话可以用LINK10..
代码也没有什么难理解的, 于渊的书上有说, 所以就不啰嗦了.. 只是换成了MASM的语法.. 可以在这里下载源码
BootSector.rar
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
;============================================================================
;写软盘引导扇区实例 By Joen
;编译方法请参见 makefile
;============================================================================
.model tiny
.Code
org 7c00h
CodeStart equ this byte
Jmain Proc
local _Cursor:word
mov ah, 3 ;功能号(获取光标位置)
mov bh, 0 ;视频页号
int 10h
mov _Cursor, dx ;dx中返回光标位置
;============================================================================
;调用Dos的功能显示字符串
comment #
mov ah, 9 ;功能号
push cs
pop ds ;ds-dx-->字符串地址
mov dx, offset SzMessage
int 21h ;调用显示字符串中断
#
;============================================================================
;调用BISO中断显示字符串
mov ax, cs
mov es, ax
mov bp, offset SzMessage ;es-bp-->字符串地址
mov cx, sizeof SzMessage ;字符串长度
mov ah, 13h ;功能号
mov al, 01h ;显示模式
mov bh, 0 ;视频页, 页号0
mov bl, 0ch ;黑底红字(高亮)
mov dx, _Cursor
mov dh, 2 ;起始行号
mov dl, 0 ;起始列号
int 10h ;字符串显示中断
jmp $
Jmain Endp
SzMessage byte 'Hello This is Joen', 13, 10
CodeEnd equ this byte
CodeLength = CodeEnd - CodeStart
;============================================================================
byte 510 - CodeLength dup (0)
word 0aa55h ;结束标记
End Jmain
|