ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Write Your Own Operating System Tutorial(中文版) (转)

Write Your Own Operating System Tutorial(中文版) (转)

原创 Linux操作系统 作者:amyz 时间:2007-11-10 18:46:23 0 删除 编辑
Write Your Own Operating System Tutorial(中文版) (转)[@more@]

Lesson 4: Hello, WorldXML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

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

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

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

; Print a null-teRminated string on the screen

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

putstr:

  lodsb  ; 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 3的h.asm中。然后使用第三课中介绍的方法,编译,复制到软盘,启动。然后,享受吧。如果你遇到困难,你可以看看我的方法,helowrld.asm。不过只有你自己试过,才能体味到其间的快乐。

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


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752019/viewspace-981571/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    3984
  • 访问量
    7339180