免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 698 | 回复: 0
打印 上一主题 下一主题

最小的Linux操作系统 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-05 17:01 |只看该作者 |倒序浏览
;boot.asm文件,最小的操作系统,不到20行
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
BootMessage:  db "Hello, OS world!"
times  510-($-$$) db 0 ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw  0xaa55             ; 结束标志


Linux下编译:
nasm boot.asm            ;将生成一个boot文件。然后插入软盘,输入如下命令:
dd if=boot bs=512 count=2880 of=/dev/fd0       ;boot内容copy到软盘上.可以运行了
这时可用BOCHS or VMWare or VirtualPC 从软盘启动。红色的Hello,OS world!就出来了.
也可以再执行下面命令,创建一个软盘映像文件.
dd if=/dev/fd0 bs=512 count=2880 of=boot.img  ;生成一个boot.img映像文件。
注:若你只用VMware,那么只需dd boot.asm后直接dd if=boot of=boot.img,便可运行了。

Winodows下编译:
nasm boot.asm -o boot.bin ;生成一个512B的boot.bin文件
再用软盘绝对扇区读写工具将这个bin文件写到一个软盘上。就OK了。

备注:
$表示当前行被汇编后的地址。反汇编后可以看到这行是jmp short 0x7c09
$$表示一个节(section)的开始(被汇编后的)地址。这里只有1个节,即0x7c00

Reference:
于渊,自己动手写操作系统,2005-8


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/13855/showart_210629.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP