相信有很多人和我一样,想写一个操作系统,从0开始完成一个属于自己的操作系统,从中获取更多的知识,使自己的技术更有深度。想写操作系统,就绕不开汇编语言,很多书籍和网站的文章都是从汇编语言开始的,所以就从网上下载了《汇编语言》这本书来看,而最后的一个实验:课程设计2 就描述了计算机开机后的执行过程,编写的程序是不需要在现有操作系统环境中执行的,是可以直接在裸机上运行的程序,那这不就和操作系统一样了吗?所以就动手来完成这个练习,以下图片是课程设计2的描述。
开发工具
- EMU8086:汇编学习工具,可一步一步编译程序代码并执行,方便代码调试。需要说明一下,该软件使用的是FASM编译器,不是MASM编译器,在该软件下编写的程序,在MASM下不一定可以编译成功。
- VMware:虚拟机,课程设计2 要求将程序写到软盘上,现在的电脑都不带软驱了,连个软盘几乎都找不到,所以用虚拟机来模拟软盘了。
- Bochs:一个x86硬件平台的开源模拟器,支持调试。当写入软盘的程序未按预期的方式执行时,可使用它对软盘程序进行调试,找出问题。
- WinHex:16 进制编辑器,使用该软件可以查看写入到软盘的数据。
首先,完成在页面显示4行描述信息,这个功能是比较简单的,之前的章节都有做过这样的练习,在这里,直接贴出我写的代码。
assume cs:code
code segment
option1: db '1) reset pc', 0
option2: db '2) start system', 0
option3: db '3) clock', 0
option4: db '4) set clock', 0
start:
mov bp, 0
mov bx, offset option1
call printf
mov bp, 160
mov bx, offset option2
call printf
mov bp, 320
mov bx, offset option3
call printf
mov bp, 480
mov bx, offset option4
call printf
mov ax, 4c00h
int 21h
; 显示以 0 结尾字符串方法
; bx:字符串的偏移地址
; bp:字符串显示位置的偏移地址
printf:
mov ax, 0b800h
mov es, ax
mov si, 0
mov ch, 0
va