本文共 1207 字,大约阅读时间需要 4 分钟。
Lesson 4: Hello, World
你等待已久的时刻终于来临。写我们“第一个”程序已经是时候了。每一本像样的程序设计书籍都会有一个“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 putstrputstrd: retn 现在,稍许解释一下这个函数的用法。首先你需要把字串第一个字符的地址载入到SI中。然后就只需要调用这个putstr了。你可以在你的程序中如下所示的创建字串。msg db 'Hello, World!', 0最后的那个0用来标记这个字串的结束。接下来你就可以用下面的指令输出字串了。mov si, msg ; Load address of messagecall putstr ; Print the message 距离可以使用只有一项工作了。加载在SI寄存器中的msg的地址,实际上表示的是距离数据段首地址的偏移量,这个偏移量由寄存器DS存储。所以在你可以使用msg的地址之前,你必须设置当前的数据段。就现在而言,我们将使用从物理内存低地址开始的平坦寻址(flat addressing)。为了把数据段设为底部的开始部分,可以把DS设为零。下面的两个指令完成这个。xor ax, ax ; Zero out axmov ds, ax ; Set data segment to base of RAM 试着把上面的代码结合到Lesson 3的h.asm中。然后使用第三课中介绍的方法,编译,复制到软盘,启动。然后,享受吧。如果你遇到困难,你可以看看我的方法,helowrld.asm。不过只有你自己试过,才能体味到其间的快乐。如果你完成了,请继续到下一课,我们将学着让我们的操作系统有交互性。转载地址:http://ccibb.baihongyu.com/