Write Your Own Operating System Tutorial(中文版)

原创 2003年07月30日 08:17:00

Lesson 4: Hello, World<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

你等待已久的时刻终于来临。写我们“第一个”程序已经是时候了。每一本像样的程序设计书籍都会有一个“Hello, World”程序,现在我们了解的足够多,可以写一个“Hello, World”操作系统了。如果你做过一些尝试已经完成这一步了,你可以跳过这一课。我们将创建一个输出字符串的函数并且用它来显示我们的消息。

每次在屏幕上打印一个字符实在够呛。所以我们要写一个函数来打印一个以零结尾的字符串。这将是一个循环,每次打印一个字符,直到结束。

; ---------------------------------------------

; Print a null-terminated string on the screen

; ---------------------------------------------

putstr:

     lodsb         ; <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />AL = [DS:SI]

     or al, al     ; Set zero flag if al=0

     jz putstrd    ; jump to putstrd if zero flag is set

     mov ah, 0x0e  ; video function 0Eh (print char)

     mov bx, 0x0007 ; color

     int 0x10

     jmp putstr

putstrd:

     retn

 

现在,稍许解释一下这个函数的用法。首先你需要把字串第一个字符的地址载入到SI中。然后就只需要调用这个putstr了。

你可以在你的程序中如下所示的创建字串。

msg  db 'Hello, World!', 0

最后的那个0用来标记这个字串的结束。接下来你就可以用下面的指令输出字串了。

mov si, msg    ; Load address of message

call putstr    ; Print the message

 

距离可以使用只有一项工作了。加载在SI寄存器中的msg的地址,实际上表示的是距离数据段首地址的偏移量,这个偏移量由寄存器DS存储。所以在你可以使用msg的地址之前,你必须设置当前的数据段。就现在而言,我们将使用从物理内存低地址开始的平坦寻址(flat addressing)。为了把数据段设为底部的开始部分,可以把DS设为零。下面的两个指令完成这个。

xor  ax, ax    ; Zero out ax

mov  ds, ax    ; Set data segment to base of RAM

 

试着把上面的代码结合到Lesson 3h.asm中。然后使用第三课中介绍的方法,编译,复制到软盘,启动。然后,享受吧。如果你遇到困难,你可以看看我的方法,helowrld.asm。不过只有你自己试过,才能体味到其间的快乐。

如果你完成了,请继续到下一课,我们将学着让我们的操作系统有交互性。

Write Your Own Operating System Tutorial(4)

Lesson 4: Hello, WorldNow is the time you’ve all been waiting for.  Finally we get to the classic “f...
  • tangl_99
  • tangl_99
  • 2003年01月21日 09:06
  • 1717

Write Your Own Operating System Tutorial(7)

Lesson 7: Start Saying Goodbye To BIOSNow that we have a boot loader that will load our operating sy...
  • tangl_99
  • tangl_99
  • 2003年01月21日 09:05
  • 1892

Write Your Own Operating System Tutorial(6)

Lesson 6: Boot LoaderEverything we’ve done so far has been placed entirely inside the boot sector.  ...
  • tangl_99
  • tangl_99
  • 2003年01月21日 09:06
  • 2162

Write Your Own Operating System Tutorial(2)

Lesson 2: Making Our First Bootable DiskIn this lesson, we will learn how to create a boot program o...
  • tangl_99
  • tangl_99
  • 2003年01月20日 09:50
  • 1651

Write Your Own Operating System Tutorial(3)

Lesson 3: NASMIn this lesson we will learn to use an assembler to write our programs.  In previous l...
  • tangl_99
  • tangl_99
  • 2003年01月21日 09:06
  • 2136

Write Your Own Operating System Tutorial(5)

Lesson 5: Let’s Make It InteractiveAll of this printing stuff to the screen is fun, but no operating...
  • tangl_99
  • tangl_99
  • 2003年01月21日 09:06
  • 1432

Write Your Own Operating System Tutorial(1)

Lesson 1: The Boot SectorIn this lesson we’ll learn about the contents of the boot sector so that we...
  • tangl_99
  • tangl_99
  • 2003年01月20日 09:43
  • 2218

Write Your Own Operating System Tutorial(中文版) -Lesson 5: 动起来!

 Lesson 5: 动起来!在屏幕上打印点东西是够乐的,但是如果操作系统一点都不能互动的话,还远不够好。让我们试着让它从键盘读取输入。我们将再一次使用BIOS的函数,来读取键盘。我们将使用0x16号...
  • aero_boy
  • aero_boy
  • 2009年02月08日 11:12
  • 575

Write Your Own Operating System Tutorial(中文版) - Lesson 1: 引导扇区

Lesson 1: 引导扇区这一课我们将学习引导扇区的知识,这样我们就能写一个我们自己的引导程序了。当计算机从软盘引导时, BIOS (Basic Input/Output System)将磁盘的第一...
  • aero_boy
  • aero_boy
  • 2009年02月08日 11:04
  • 722

Write Your Own Operating System Tutorial(中文版) 简介

简介这份教程将告诉你如何开始着手写一个你自己的操作系统。它将向你展示一个应该如何开始做这些事情的方法。这份教程并不试图解释操作系统的每个方面,也不一定使用最快,最好的方法或者是技巧。所有的源代码都以可...
  • Fnoopy
  • Fnoopy
  • 2003年07月30日 08:16
  • 1008
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Write Your Own Operating System Tutorial(中文版)
举报原因:
原因补充:

(最多只允许输入30个字)