• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Linux内核系列—操作系统开发之HelloWorld,linuxhelloworld

Linux内核系列—操作系统开发之HelloWorld,linuxhelloworld

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了linux内核 文件操作,深入理解linux内核,linux内核完全注释,linux内核版本,查看linux内核版本等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Linux内核系列—操作系统开发之HelloWorld,linuxhelloworld


		org 07c00h	    ;伪指令,告诉编译器程序会被加载到7c00处

		mov ax, cs
		mov ds, ax
		mov es, ax
		call DispStr	     ;调用显示字符串例程
		jmp $			;无限循环
DispStr:
		mov ax, BootMessage
		mov bp, ax		;ES:BP=字符串地址
		mov cx, 16		;CX=字符串长度

		mov ax, 01301h		;AH=13,AL=01h
		mov bx, 000ch		;页号为0(BH=0)黑底红字(BL=0Ch,高亮)
		mov dl, 0
		int 10h			;10h号中断
		ret	                ;pop IP
BootMessage:	db "Hello, OS world!"
times 510-($-$$)db 0	         ;填充剩下的空间,使生成的二进制代码恰好为512字节
dw	0xaa55				;结束标志
        

以上是个非常简单的操作系统helloworld源码,用bochs加载后如下图(bochs是个虚拟机,模拟操作系统加载),显示了红色的Hello,OS world,实际上是系统加载起来的样子:

源码解析:

1.org 07c00h和dw 0xaa55和times 510-($-$$) db 0

当计算机电源打开,会先进行加电自检(POST),然后寻找启动盘,如果是选择从软盘启动,计算机会检查软盘的0面0磁道1扇区,如果发现它以0xaa55结束,则BIOS认为它是一个引导扇区。一个正确的引导扇区除了以0xaa55结束之外,还应该包含一段512字节的执行码。一旦BIOS发现了引导扇区,就会将这512字节的内容装载到内存地址0000:7c00处,然后跳转到0000:7c00处将控制权彻底交给这段引导代码。

org 07c00h就是告诉编译器,这段代码是要被加载到这个地址的。所以BootMessage的偏移地址是相对于07c00h处开始的。BootMessage实际上也是一个地址,不是相对量

2.mov ax, cs、mov ds, ax、mov es, ax

让ds和es指向cs的段,也就是07c00h。因为程序会被加载到07c00h处,所以执行到这一步的时候CS指向07c00h

3.call DispStr

调用显示字符串的函数,在NASM中,任何不被[]括起来的标签或变量名都被认为是地址,如果是访问标签中的内容则必须使用[]。所以mov ax, BootMessage会把"Hello,OS world!"这个字符串的首地址传给寄存器ax。然后mov bp, ax赋给bp,如果没写org指令,则BootMessage编译的时候就是相对于本程序加载到地址0的偏移地址,但是这里是相对于07c00h为基址的偏移地址,所以这里显示了org的作用。

4.int 10h

10H中断是由BIOS对显示器和屏幕所提供的服务程序。使用int 10h服务程序时,必须先指定ah寄存器。

功能13h:

功能描述:在Teletype模式下显示字符串
入口参数:AH=13H
BH=页码
BL=属性(若AL=00H或 01H)
CX=显示字符串长度
(DH、DL)=坐标(行、列)

ES:BP=显示字符串的地址
AL=显示输出方式
0—— 字符串中只含显示字符,其显示属性在BL中。显示后,光标位置不变
1——字符串中只含显示字符,其显示属性在BL中。显示后,光标位置改变
2 ——字符串中含显示字符和显示属性。显示后,光标位置不变
3——字符串中含显示字符和显示属性。显示后,光标位置改变
出口参数:无

5.$和$$

$-$$表示本行距离程序开始处的相对距离。times 510-($-$$) db 0表示将0这个字节重复510-($-$$)遍,也就是在剩下的空间中不停地填充0,直到程序有510字节为止。这样,加上结束标志0xaa55占用的2字节,恰好是512字节。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Linux内核系列—11.操作系统开发之ELF格式,linuxelf
  • Linux内核系列—7.操作系统开发之中断和异常,linux内核
  • Linux内核系列—6.操作系统开发之内存分页机制,linux分页
  • Linux内核系列—4.操作系统开发之LDT,linuxldt
  • Linux内核系列—操作系统开发之保护模式的优势,linux内核
  • Linux内核系列—操作系统开发之进入32位保护模式,linux保护模式
  • Linux内核系列—操作系统开发之HelloWorld,linuxhelloworld

相关文章

  • 2017-05-26android基础部分再学习---再谈Service进程服务通信
  • 2017-05-26春秋旅行安卓客户端源码项目,旅行安卓客户端源码
  • 2017-05-26几个常用的adb命令,常用adb命令
  • 2017-05-26android高仿微信拍照、多选、预览、删除(去除相片)相冊功能
  • 2017-05-26JAVA Web day01--- Android小白的第一天学习笔记,day01---android
  • 2017-05-26Android对应用程序签名,android签名
  • 2017-05-26【Android】第7章(2)--布局控件常用的公共属性,android第7章
  • 2017-07-22Android设备上获取照片、裁剪图片、压缩图片
  • 2017-05-26安卓开源项目周报1220,安卓开源项目1220
  • 2017-05-26android开发之路08(ListView&Adapter),androidlistview

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android View事件分发机制
    • cnbeta新闻资讯第三方客户端应用,cnbeta新闻资讯
    • 购物车动画(Android),购物车动画android
    • traceroute和tracert的区别
    • 多选按钮(CheckBox),多选按钮checkbox
    • Android设计模式(十六)-中介者模式
    • Android开发:消息机制简述
    • 2.6.1 PopupWindow(悬浮框)的基本使用
    • Java时间间隔问题在Android中的使用,javaandroid
    • Android 中间人攻击

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有