LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 963|回复: 4

看过<<自己动手写操作系统>>的请帮看下,万分感激!!!

[复制链接]
发表于 2007-1-31 13:36:45 | 显示全部楼层 |阅读模式
%define        _BOOT_DEBUG_        ; 做 Boot Sector 时一定将此行注释掉!将此行打开后用 nasm Boot.asm -o Boot.com 做成一个.COM文件易于调试

%ifdef        _BOOT_DEBUG_
        org  0100h                        ; 调试状态, 做成 .COM 文件, 可调试
%else
        org  07c00h                        ; Boot 状态, Bios 将把 Boot Sector 加载到 0:7C00 处并开始执行
%endif

        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                        ; int 10h
        ret
BootMessage:                db        "Hello, OS world!"
times         510-($-$$)        db        0        ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw         0xaa55                                ; 结束标志


第四行代码是要求编译成.com程序,但我用的是Linux系统,要回到dos好麻烦,要如何修改后编译才能在Linux下可执行??请高手讲下,不胜感激!!!
发表于 2007-1-31 16:36:27 | 显示全部楼层
linux是不可以的,因为dos工作在实模式。
linux工作在保护模式,这个问题很容易解释。而且linux的控制台 属于一个虚拟的串口设备。工作方式完全根dos不一样。所以必须用dos。想要调试的话最好用虚拟机装个win98或者win95来实现。
然而其实上面的代码一直运行在实模式没有进行到模式切换。
回复 支持 反对

使用道具 举报

发表于 2007-1-31 21:33:11 | 显示全部楼层
其实不用编译成 com 文件啊
直接用 qemu 启动他也可以啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-1 21:43:49 | 显示全部楼层
在此先多谢两位兄弟的回复。
能否请zlbruce兄讲详细一点?
还有一个问题。我在红旗下用vmware安装了一个win98,但两个系统如何设置一个共享文件夹。
回复 支持 反对

使用道具 举报

发表于 2007-2-2 18:18:11 | 显示全部楼层
..你开个ftp把
vmware调试不方便
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表