动手开发操作系统- 0x1

Posted Yivies

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动手开发操作系统- 0x1相关的知识,希望对你有一定的参考价值。

0x4:NASM

  NASM:Netwide Assembler (简称 NASM)是一款基于x86架构的汇编与反汇编软件。它可以用来编写16位(8086、80286等)、32位(IA-32)和64位(x86_64)的程序。 NASM被认为是Linux平台上最受欢迎的汇编工具之一。我们将会用它来编译我们的源代码。安装方法百度有很多,我在这里不再复述,下面看看它的使用方法:

nasm -f bin [asm filename] -o [bin filename]

asm filename是源代码文件的名称,bin filename是要输出的.bin文件的名称。

0x5:VHDTool

  VHDTool是我自己开发的一个小工具,这里有到GitHub页面的超链接,大家可以去下载它的源码,再使用自己喜欢的编译器将他编译,或者直接下载程序。这个工具的作用是将我们编译出来的.bin文件写入到vhd虚拟磁盘里。用法如下:

vhdtool -x [bin filename] [vhd filename]

这会将bin filename所指定的文件,写入vhd filename,写入使用 -x 选项,工具中会让我们输入写入的开始扇区,示例如下:

也可以用它来查看二进制内容,查看二进制内容使用 -v 选项,该过程也会让我们输入查看的字节数:

0x6:第一个引导程序

  什么是引导程序?想必学过操作系统原理的朋友都了解过,这里不妨再说一下操作系统的启动过程:在我们按下开机键的那一刻起,我们的计算机系统将执行Bios进行加电自检,之后BIOS会将硬盘或者软盘里的第一个扇区的内容加载到内存中的 0X7C00 的位置,而第一个扇区的内容,就是我们的引导程序,所以第一个扇区也被称为 主引导扇区,一般大小为 512 字节。而我们的主引导程序将会把硬盘里的操作系统加载到内存里,最后让 CPU 跳转到操作系统的内存区运行程序,我们来看一段简单的引导程序代码:

section BOOT align=16 vstart=0x7c00
main:
	mov ax, 0xb800
	mov es, ax
	mov si, string
	mov di, 0x0
	mov cx, 0x18
	
	s0:
	mov al, ds:[si]
	mov es:[di], al
	inc si
	inc di
	loop s0
	hlt
	
string: db \'H\',0x07,\'e\',0x07,\'l\',0x07,\'l\',0x07,
		db \'o\',0x07,\'!\',0x07, \'M\',0x07,\'y\',0x07,
		db \' \',0x07,\'O\',0x07,\'S\',0x07,\'!\',0x07

	times 510-($-$$) db 0x0
	db 0x55, 0xaa

用我们的NASM编译成.bin文件后再用VHDTool写入我们上一章节的.VHD文件的第一个扇区后启动我们的虚拟机,我们会看到以下内容:

是不是感到很惊奇,我们的第一个手写引导程序就出来了!

以上是关于动手开发操作系统- 0x1的主要内容,如果未能解决你的问题,请参考以下文章

NMAKE:致命错误 U1077:“cl.exe”:返回代码“0x1”停止。在命令提示符下

信号 SIGSEGV:当我使用 go-python3 时,分段违规代码 = 0x1

Python - 任务计划程序 0x1

C# 调用 Go 语言0x1 Hello Golang

VS2015 代码片段整理

自己动手实现区块链