博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Write Your Own Operating System Tutorial(中文版)- Lesson 4: Hello, World
阅读量:2234 次
发布时间:2019-05-09

本文共 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 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。不过只有你自己试过,才能体味到其间的快乐。
如果你完成了,请继续到下一课,我们将学着让我们的操作系统有交互性。

转载地址:http://ccibb.baihongyu.com/

你可能感兴趣的文章
jq对象转换成js对象。已经jq的复合选择器。
查看>>
(一)alin‘s mysql学习笔记----概述
查看>>
(二)alin’s mysql学习笔记----mysql的存储引擎
查看>>
(三)alin’s mysql学习笔记----常用的join连接查询
查看>>
(四)alin’s mysql学习笔记----索引简介
查看>>
分布式系统中的幂等性的理解
查看>>
spring的注解开发中的常用注解(一)------@bean @Configuration @ComponentScan @Import @Scope @Lazy
查看>>
(五)alin’s mysql学习笔记----索引性能分析
查看>>
Spring中使用@Transactional注解进行事务管理的时候只有应用到 public 方法才有效
查看>>
springboot整合rabbitmq及rabbitmq的简单入门
查看>>
mysql事务和隔离级别笔记
查看>>
事务的传播属性(有坑点)自调用失效学习笔记
查看>>
REDIS缓存穿透,缓存击穿,缓存雪崩原因+解决方案
查看>>
动态代理实现AOP
查看>>
23种常见的java设计模式
查看>>
关于被final修饰的基本数据类型一些注意事项
查看>>
java Thread中,run方法和start方法的区别
查看>>
在 XML 中有 5 个预定义的实体引用
查看>>
XML 元素是可扩展的
查看>>
避免 XML 属性?针对元数据的 XML 属性
查看>>