忆杰的博客

忆杰的博客

引导扇区代码

想要自己实现一个操作系统的初步就是不依赖任何的软件运行自己的代码.. 那么这个是初步..

这个代码实现的逻辑也很简单就是调用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的语法.. 可以在这里下载源码
        http://www.joenchen.com/JoenTools/BootSector.rar

;============================================================================
	;写软盘引导扇区实例	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

发表评论


Warning: Undefined variable $user_ID in /www/wwwroot/joenchen.com/wp-content/themes/agan/comments.php on line 66

您必须登录 才能进行评论。